Resumo :neste tutorial, você aprenderá como usar o SQLite
EXISTS
operador para testar a existência de linhas retornadas por uma subconsulta. Introdução ao SQLite EXISTS
operador
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)
Code language: SQL (Structured Query Language) (sql)
Nesta sintaxe, a subconsulta é um
SELECT
instrução que retorna zero ou mais linhas. Se a subconsulta retornar uma ou mais linhas, o
EXISTS
operador retorna verdadeiro. Caso contrário, o EXISTS
operador retorna falso ou NULL
. Observe que se a subconsulta retornar uma linha com
NULL
, o resultado do EXISTS
O operador ainda é 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 forma:NOT EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)
O
NOT EXISTS
operador retorna true se a subconsulta não retornar nenhuma linha. SQLite EXISTS
exemplo de operador
Veja os seguintes
Customers
e Invoices
tabelas do banco de dados de exemplo:A instrução a seguir encontra clientes que têm faturas:
SELECT
CustomerId,
FirstName,
LastName,
Company
FROM
Customers c
WHERE
EXISTS (
SELECT
1
FROM
Invoices
WHERE
CustomerId = c.CustomerId
)
ORDER BY
FirstName,
LastName;
Code language: SQL (Structured Query Language) (sql)
A imagem a seguir mostra o conjunto de resultados parcial:
Neste exemplo, para cada cliente, o
EXISTS
operador verifica se o ID do cliente existe nas invoices
tabela. - Se sim, a subconsulta retorna uma linha com valor 1 que faz com que
EXISTS
operador avaliar como verdadeiro. Portanto, a consulta inclui o cliente no conjunto de resultados. - Caso o ID do cliente não exista nas
Invoices
tabela, a subconsulta não retorna nenhuma linha, o que faz com que oEXISTS
operador para avaliar 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;
Code language: SQL (Structured Query Language) (sql)
Assim que a subconsulta retornar a primeira linha, o
EXISTS
operador pára de pesquisar porque pode determinar o resultado. Por outro lado, o IN
O operador deve varrer todas as linhas retornadas pela subconsulta para determinar o resultado. De um modo geral, o
EXISTS
operador é mais rápido que IN
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. SQLite NOT EXISTS
exemplo de operador
Consulte a seguinte tabela de Artistas e Álbuns do banco de dados de exemplo:
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;
Code language: SQL (Structured Query Language) (sql)
Aqui está a saída parcial:
Neste tutorial, você aprendeu como usar o SQLite
EXISTS
operador para testar a existência de linhas retornadas por uma subconsulta.