SQLite
 sql >> Database >  >> RDS >> SQLite

SQLite ESISTE

Riepilogo :in questo tutorial imparerai come usare SQLite EXISTS operatore per verificare l'esistenza di righe restituite da una sottoquery.

Introduzione a SQLite EXISTS operatore

Il EXISTS operatore è un operatore logico che controlla se una sottoquery restituisce una riga.

Ecco la sintassi di base di EXISTS operatore:

EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)

In questa sintassi, la sottoquery è un SELECT istruzione che restituisce zero o più righe.

Se la sottoquery restituisce una o più righe, EXISTS operatore restituisce true. Altrimenti, EXISTS l'operatore restituisce false o NULL .

Nota che se la sottoquery restituisce una riga con NULL , il risultato di EXISTS l'operatore è ancora vero perché il set di risultati contiene una riga con NULL.

Per negare il EXISTS operatore, usi il NOT EXISTS operatore come segue:

NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)

Il NOT EXISTS l'operatore restituisce true se la sottoquery non restituisce alcuna riga.

SQLite EXISTS esempio di operatore

Vedi i seguenti Customers e Invoices tabelle dal database di esempio:

Il seguente estratto conto trova i clienti che hanno fatture:

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)

L'immagine seguente mostra il set di risultati parziali:

In questo esempio, per ogni cliente, il EXISTS l'operatore controlla se l'ID cliente esiste nelle invoices tabella.

  • Se sì, la sottoquery restituisce una riga con valore 1 che causa il EXISTS l'operatore restituisce true. Pertanto, la query include il cliente nel set di risultati.
  • Nel caso in cui l'ID cliente non esista nelle Invoices tabella, la sottoquery non restituisce righe che causano EXISTS operatore per valutare false, quindi la query non include il cliente nel set di risultati.

Nota che puoi usare IN operatore invece di EXISTS operatore in questo caso per ottenere lo stesso risultato:

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)

Una volta che la sottoquery restituisce la prima riga, EXISTS l'operatore interrompe la ricerca perché può determinare il risultato. D'altra parte, il IN l'operatore deve eseguire la scansione di tutte le righe restituite dalla sottoquery per determinare il risultato.

In generale, il EXISTS operatore è più veloce di IN operatore se il set di risultati restituito dalla sottoquery è grande. Al contrario, il IN operatore è più veloce di EXISTS operatore se il set di risultati restituito dalla sottoquery è piccolo.

SQLite NOT EXISTS esempio di operatore

Vedi la seguente tabella Artisti e Album dal database di esempio:

Questa query trova tutti gli artisti che non hanno album nella tabella Album:

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)

Ecco l'output parziale:

In questo tutorial, hai imparato a usare SQLite EXISTS operatore per verificare l'esistenza di righe restituite da una sottoquery.