PostgreSQL EXISTE com SELECT Operator (Exemplo)

โšก Resumo Inteligente

PostgreSQL EXISTS รฉ um operador booleano que testa se uma subconsulta correlacionada retorna alguma linha, permitindo que as instruรงรตes SELECT, INSERT, UPDATE e DELETE filtrem dados pela presenรงa ou ausรชncia de registros correspondentes de forma eficiente.

  • ๐Ÿ“‹ Sintaxe: A clรกusula WHERE EXISTS (subconsulta) retorna verdadeiro quando a subconsulta produz pelo menos uma linha.
  • ๐Ÿ”— Subconsulta correlacionada: EXISTS vincula consultas internas e externas, encontrando linhas correspondentes com base em uma chave compartilhada.
  • โšก Curto-circuito: A funรงรฃo EXISTS para na primeira linha correspondente, portanto, ela se adapta bem a tabelas grandes.
  • ๐Ÿ” Quatro declaraรงรตes: O operador funciona dentro de consultas SELECT, INSERT, UPDATE e DELETE.
  • ๐Ÿ›ก๏ธ NรƒO EXISTE: Exclui linhas com seguranรงa e evita a armadilha NULL que interrompe o NOT IN.
  • ๐Ÿค– Consultas de IA: Os assistentes geram clรกusulas EXISTS e sinalizam riscos de desempenho relacionados a subconsultas correlacionadas.

PostgreSQL EXISTE com Selecionar Operator

O que existe em PostgreSQL?

O PostgreSQL EXISTE O operador EXISTS testa se uma ou mais linhas existem em uma subconsulta. Isso significa que o operador รฉ usado em conjunto com uma subconsulta. Diz-se que o operador EXISTS foi atendido quando pelo menos uma linha รฉ encontrada na subconsulta. Vocรช pode usar essa operaรงรฃo com as instruรงรตes SELECT, UPDATE, INSERT e DELETE.

PostgreSQL Sintaxe de consulta EXISTS

Aqui estรก a sintaxe para o PostgreSQL Declaraรงรฃo EXISTE:

WHERE EXISTS (subquery);

A sintaxe acima mostra que o operador EXISTS recebe um argumento, que รฉ uma subconsulta. A subconsulta รฉ simplesmente uma Instruรงรฃo SELECT que deve comeรงar com SELECT * em vez de uma lista de nomes de colunas ou expressรตes.

PostgreSQL EXISTS com instruรงรฃo SELECT

Vejamos como usar uma instruรงรฃo SELECT com o operador EXISTS. Temos as seguintes tabelas:

Livro:

PostgreSQL EXISTS com instruรงรฃo SELECT

Preรงo:

PostgreSQL EXISTS com instruรงรฃo SELECT

Execute a seguinte instruรงรฃo:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Isso retorna o seguinte:

PostgreSQL EXISTS com resultado da instruรงรฃo SELECT

O comando acima deve retornar todos os registros da tabela Book cujo id corresponda ao id de qualquer registro da subconsulta. Apenas um ID foi correspondido. Portanto, apenas um registro foi retornado.

PostgreSQL EXISTE com instruรงรฃo INSERT

Podemos usar o operador EXISTS em um INSERIR declaraรงรฃo. Temos as 3 tabelas a seguir:

Livro:

PostgreSQL EXISTE com instruรงรฃo INSERT

Preรงo:

PostgreSQL EXISTE com instruรงรฃo INSERT

Preรงo2:

PostgreSQL EXISTE com instruรงรฃo INSERT

Podemos entรฃo executar a seguinte instruรงรฃo:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

A tabela de preรงos agora รฉ a seguinte:

PostgreSQL EXISTS com resultado da instruรงรฃo INSERT

A linha com id 5 na tabela chamada Price2 foi correspondida. Este registro foi entรฃo inserido na tabela Preรงo.

PostgreSQL EXISTE com instruรงรฃo UPDATE

Podemos usar o operador EXISTS em uma instruรงรฃo UPDATE.

Execute a seguinte consulta:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

PostgreSQL EXISTE com instruรงรฃo UPDATE

Estamos atualizando a coluna de preรงos da tabela Preรงo. Nosso objetivo รฉ que os preรงos dos itens que compartilham um ID sejam iguais. Apenas uma linha foi correspondida, ou seja, 5.

Porรฉm, como os preรงos sรฃo iguais, ou seja, 205, nenhuma atualizaรงรฃo foi feita. Se houvesse diferenรงa, uma atualizaรงรฃo teria sido feita.

PostgreSQL EXISTE com instruรงรฃo DELETE

A PostgreSQL A instruรงรฃo DELETE pode usar o operador EXISTS. Aqui estรก um exemplo:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

A tabela de preรงos agora รฉ a seguinte:

PostgreSQL EXISTE com instruรงรฃo DELETE

A linha com ID 5 foi excluรญda.

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Alรฉm do shell SQL, as mesmas consultas EXISTS podem ser executadas visualmente atravรฉs da interface do pgAdmin. Vejamos agora como essas aรงรตes podem ser realizadas usando o pgAdmin:

Com a instruรงรฃo SELECT

A seguir estรฃo os passos para usar uma consulta EXISTS em PostgreSQL Com uma instruรงรฃo SELECT usando pgAdmin:

Passo 1) Faรงa login na sua conta pgAdmin. Abra o pgAdmin e faรงa login na sua conta usando suas credenciais.

Passo 2) Criar um banco de dados de demonstraรงรฃo.

  1. Na barra de navegaรงรฃo ร  esquerda, clique em Bancos de dados.
  2. Clique em Demonstraรงรฃo.

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Passo 3) Digite a consulta abaixo no editor de consultas:

SELECT *
FROM Book
WHERE EXISTS (SELECT *
              FROM Price
              WHERE Book.id = Price.id);

Passo 4) Clique no botรฃo Executar.

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Deve retornar o seguinte:

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Com instruรงรฃo INSERT

Para fazer o mesmo por meio do pgAdmin, faรงa o seguinte:

Passo 1) Faรงa login em sua conta pgAdmin.

Passo 2)

  1. Na barra de navegaรงรฃo ร  esquerda, clique em Bancos de dados.
  2. Clique em Demonstraรงรฃo.

Declaraรงรฃo EXISTS em PostgreSQL usando pgAdmin

Passo 3) Digite a consulta no editor de consultas:

INSERT INTO Price
SELECT id, price
FROM Price2
WHERE EXISTS (SELECT id
              FROM Book
              WHERE Book.id = Price2.id);

Passo 4) Clique no botรฃo Executar.

Declaraรงรฃo EXISTS em PostgreSQL usando pgAdmin

A tabela de preรงos agora deve ser a seguinte:

Declaraรงรฃo EXISTS em PostgreSQL usando pgAdmin

Com declaraรงรฃo UPDATE

Para fazer o mesmo por meio do pgAdmin, faรงa o seguinte:

Passo 1) Faรงa login em sua conta pgAdmin.

Passo 2)

  1. Na barra de navegaรงรฃo ร  esquerda, clique em Bancos de dados.
  2. Clique em Demonstraรงรฃo.

Declaraรงรฃo EXISTS em PostgreSQL usando pgAdmin

Passo 3) Digite a consulta no editor de consultas:

UPDATE Price
SET price = (SELECT price
              FROM Price2
              WHERE Price2.id = Price.id)
WHERE EXISTS (SELECT id, price
FROM Price2
WHERE Price2.id = Price.id);

Passo 4) Clique no botรฃo Executar.

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

A tabela de preรงos agora deve ser a seguinte:

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Com instruรงรฃo DELETE

Para fazer o mesmo por meio do pgAdmin, faรงa o seguinte:

Passo 1) Faรงa login em sua conta pgAdmin.

Passo 2)

  1. Na barra de navegaรงรฃo ร  esquerda, clique em Bancos de dados.
  2. Clique em Demonstraรงรฃo.

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Passo 3) Digite a consulta no editor de consultas:

DELETE FROM Price
WHERE EXISTS (SELECT *
              FROM Price2
              WHERE Price.id = Price2.id);

Passo 4) Clique no botรฃo Executar.

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

A tabela de preรงos agora deve ser a seguinte:

PostgreSQL Declaraรงรฃo EXISTS usando pgAdmin

Baixe o banco de dados usado neste tutorial

Perguntas Frequentes

EXISTS testa se uma subconsulta correlacionada retorna alguma linha e para na primeira correspondรชncia, sendo, portanto, adequada para subconsultas grandes. IN compara um valor com uma lista e รฉ adequada para conjuntos pequenos e constantes.

A clรกusula NOT IN pode retornar zero linhas quando a subconsulta contรฉm um valor NULL, porque a comparaรงรฃo se torna desconhecida. Jรก a clรกusula NOT EXISTS ignora valores NULL e avalia cada linha corretamente, tornando-se a escolha confiรกvel para anti-junรงรตes.

Uma subconsulta correlacionada referencia uma coluna da consulta externa, como em WHERE Book.id = Price.id. A funรงรฃo EXISTS verifica novamente essa coluna para cada linha da consulta externa e retorna verdadeiro quando uma correspondรชncia รฉ encontrada.

Sim. A funรงรฃo EXISTS retorna verdadeiro assim que a subconsulta produz uma linha, portanto, nรฃo examina o restante. Esse comportamento de curto-circuito a torna eficiente em subconsultas correlacionadas de grande porte.

Nรฃo. A clรกusula EXISTS verifica apenas se a subconsulta retorna uma linha, portanto, SELECT *, SELECT 1 ou SELECT id se comportam da mesma maneira. A lista de colunas dentro da subconsulta nรฃo afeta o resultado.

Indexe as colunas unidas dentro da subconsulta, mantenha a condiรงรฃo de correlaรงรฃo otimizรกvel e execute EXPLAIN ANALYZE. PostgreSQL Frequentemente, a clรกusula EXISTS รฉ reescrevida como uma semi-junรงรฃo eficiente quando os รญndices a suportam.

Os assistentes de IA transformam regras em linguagem natural em clรกusulas EXISTS, constroem a subconsulta correlacionada e alertam sobre armadilhas NOT IN NULL. Eles tambรฉm sugerem รญndices e dicas EXPLAIN para otimizaรงรฃo.

Sim. Um copiloto de IA detecta padrรตes de subconsultas e reescreve IN como EXISTS ou NOT IN como NOT EXISTS, melhorando a seguranรงa contra valores NULL e o desempenho em tabelas grandes.

Resuma esta postagem com: