SQLite
 sql >> Base de Dados >  >> RDS >> SQLite

SQLite EXISTE


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 o EXISTS 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.