Resumo : neste tutorial, você aprenderá como usar o EXISTS
operador SQLite para testar a existência de linhas retornadas por uma subconsulta.
EXISTS
Introdução ao operador SQLite
O EXISTS
operador é um operador lógico que verifica se uma subconsulta retorna alguma linha.
Aqui está a sintaxe básica do EXISTS
operador:
EXISTS(subquery)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Nesta sintaxe, a subconsulta é uma SELECT
instrução que retorna zero ou mais linhas.
Se a subconsulta retornar uma ou mais linhas, o EXISTS
operador retornará verdadeiro. Caso contrário, o EXISTS
operador retornará falso ou NULL
.
Observe que se a subconsulta retornar uma linha com NULL
, o resultado do EXISTS
operador ainda será verdadeiro porque o conjunto de resultados contém uma linha com NULL.
Para negar o EXISTS
operador, você usa o NOT EXISTS
operador da seguinte maneira:
NOT EXISTS (subquery)
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
O NOT EXISTS
operador retorna verdadeiro se a subconsulta não retornar nenhuma linha.
EXISTS
Exemplo de operador SQLite
Consulte o seguinte Customers
e Invoices
as tabelas do banco de dados de exemplo :
A instrução a seguir localiza clientes que possuem faturas:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
EXISTS (
SELECT
1
FROM
Invoices
WHERE
CustomerId = c.CustomerId
)
ORDER BY
FirstName,
LastName;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
A imagem a seguir mostra o conjunto de resultados parciais:
Neste exemplo, para cada cliente, o EXISTS
operador verifica se o id do cliente existe na invoices
tabela.
- Se sim, a subconsulta retorna uma linha com valor 1 que faz com que o
EXISTS
operador seja avaliado como verdadeiro. Portanto, a consulta inclui o cliente no conjunto de resultados. - Caso o ID do cliente não exista na
Invoices
tabela, a subconsulta não retorna nenhuma linha, o que faz com que oEXISTS
operador seja avaliado como falso, portanto a consulta não inclui o cliente no conjunto de resultados.
Observe que você pode usar o IN
operador em vez de EXISTS
operador neste caso para obter o mesmo resultado:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
CustomerId IN (
SELECT
CustomerId
FROM
Invoices
)
ORDER BY
FirstName,
LastName;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Depois que a subconsulta retorna a primeira linha, o EXISTS
operador interrompe a pesquisa porque pode determinar o resultado. Por outro lado, o IN
operador deve verificar todas as linhas retornadas pela subconsulta para determinar o resultado.
De modo geral, o EXISTS
operador é mais rápido que IN
o operador se o conjunto de resultados retornado pela subconsulta for grande. Por outro lado, o IN
operador é mais rápido que o EXISTS
operador se o conjunto de resultados retornado pela subconsulta for pequeno.
NOT EXISTS
Exemplo de operador SQLite
Consulte a seguinte tabela Artistas e Álbuns do banco de dados de amostra:
Esta consulta encontra todos os artistas que não possuem nenhum álbum na tabela Álbuns:
SELECT
*
FROM
Artists a
WHERE
NOT EXISTS(
SELECT
1
FROM
Albums
WHERE
ArtistId = a.ArtistId
)
ORDER BY Name;
Linguagem de código: SQL (linguagem de consulta estruturada) ( sql )
Aqui está a saída parcial:
Neste tutorial, você aprendeu como usar o EXISTS
operador SQLite para testar a existência de linhas retornadas por uma subconsulta.