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 causanoEXISTS
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.