Sumário: neste tutorial, aprenderá como utilizar o PostgreSQL EXISTS
operador para testar a existência de filas numa subconsulta.
Introdução ao operador PostgreSQL EXISTS
O operador EXISTS
operador é um operador booleano que testa a existência de filas numa subconsulta.
O seguinte ilustra a sintaxe do EXISTS
operador:
EXISTS (subquery)
O EXISTS
aceita um argumento que é uma subconsulta.
Se a subconsulta retornar pelo menos uma linha, o resultado de EXISTS
é verdadeiro. Caso a subconsulta não devolva nenhuma linha, o resultado é de EXISTS
é falso.
O operador EXISTS
é frequentemente utilizado com a subconsulta correlacionada.
O resultado de EXISTS
operador depende se alguma linha devolvida pela subconsulta, e não do conteúdo da linha. Portanto, as colunas que aparecem no SELECT
cláusula da subconsulta não são importantes.
Por este motivo, a convenção de codificação comum é escrever EXISTS
na seguinte forma:
Nota que se a subconsulta retornar NULL, o resultado de EXISTS
é verdadeiro.
Exemplos de EXISTÊNCIAS do PostgreSQL
Usaremos as seguintes tabelas customer
e payment
na base de dados da amostra para a demonstração:
A) Encontrar clientes que tenham pelo menos um pagamento cujo montante seja superior a 11.
A seguinte declaração devolve os clientes que tenham pago pelo menos um aluguer com um montante superior a 11:
SELECT first_name, last_nameFROM customer cWHERE EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
A seguinte declaração devolve o seguinte resultado:
Neste exemplo, para cada cliente na tabela customer
, a subconsulta verifica a tabela payment
se esse cliente fez pelo menos um pagamento (p.customer_id = c.customer_id
) e o montante é superior a 11 ( amount > 11
)
B) NÃO EXISTE exemplo
O NOT
operador nega o resultado do EXISTS
operador. O NOT EXISTS
é oposto a EXISTS
. Significa que se a subconsulta não retorna nenhuma linha, o NOT EXISTS
retorna verdadeiro. Se a subconsulta retornar uma ou mais linhas, o NOT EXISTS
retorna falso.
O exemplo seguinte retorna clientes que não tenham efectuado qualquer pagamento superior a 11.
SELECT first_name, last_nameFROM customer cWHERE NOT EXISTS (SELECT 1 FROM payment p WHERE p.customer_id = c.customer_id AND amount > 11 )ORDER BY first_name, last_name;
Aqui está a saída:
C) EXISTS e NULL
se a subconsulta regressar NULL
EXISTS
regressa verdadeiro. Ver o seguinte exemplo:
Code language: SQL (Structured Query Language) (sql)SELECTfirst_name,last_nameFROMcustomerWHEREEXISTS( SELECT NULL )ORDER BYfirst_name,last_name;
Neste exemplo, a subconsulta retornou NULL
, portanto, a consulta retornou todas as linhas da tabela customer
.
Neste tutorial, aprendeu a utilizar o PostgreSQL EXISTS
para testar a existência de linhas na subconsulta.