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
EXISTSl'operatore restituisce true. Pertanto, la query include il cliente nel set di risultati. - Nel caso in cui l'ID cliente non esista nelle
Invoicestabella, la sottoquery non restituisce righe che causanoEXISTSoperatore 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.