Samenvatting :in deze tutorial leer je hoe je de SQLite EXISTS . gebruikt operator om te testen op het bestaan van rijen die worden geretourneerd door een subquery.
Inleiding tot SQLite EXISTS telefoniste
De EXISTS operator is een logische operator die controleert of een subquery een rij retourneert.
Hier is de basissyntaxis van de EXISTS operator:
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
In deze syntaxis is de subquery een SELECT statement dat nul of meer rijen retourneert.
Als de subquery een of meer rijen retourneert, wordt de EXISTS operator return true. Anders, de EXISTS operator retourneert false of NULL .
Merk op dat als de subquery één rij retourneert met NULL , het resultaat van de EXISTS operator is nog steeds waar omdat de resultaatset één rij met NULL bevat.
Om de EXISTS te negeren operator, gebruik je de NOT EXISTS operator als volgt:
NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)
De NOT EXISTS operator retourneert true als de subquery geen rij retourneert.
SQLite EXISTS operator voorbeeld
Zie de volgende Customers en Invoices tabellen uit de voorbeelddatabase:
De volgende verklaring vindt klanten die facturen hebben:
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) De volgende afbeelding toont de gedeeltelijke resultaatset:
In dit voorbeeld geldt voor elke klant de EXISTS operator controleert of de klant-ID bestaat in de invoices tafel.
- Zo ja, dan retourneert de subquery één rij met waarde 1 die de
EXISTSveroorzaakt operator evalueren naar waar. Daarom bevat de query de curstomer in de resultatenset. - In het geval dat de klant-ID niet bestaat in de
Invoicestabel, de subquery retourneert geen rijen waardoor deEXISTSoperator om te evalueren naar false, daarom neemt de zoekopdracht de klant niet op in de resultatenset.
Merk op dat u de IN . kunt gebruiken operator in plaats van EXISTS operator in dit geval om hetzelfde resultaat te bereiken:
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)
Zodra de subquery de eerste rij retourneert, wordt de EXISTS operator stopt met zoeken omdat hij het resultaat kan bepalen. Aan de andere kant, de IN operator moet alle rijen scannen die door de subquery worden geretourneerd om het resultaat te bepalen.
Over het algemeen bestaat de EXISTS operator is sneller dan IN operator als de resultaatset die door de subquery wordt geretourneerd groot is. Daarentegen is de IN operator is sneller dan de EXISTS operator als de resultaatset die door de subquery wordt geretourneerd klein is.
SQLite NOT EXISTS operator voorbeeld
Zie de volgende artiesten- en albumstabel uit de voorbeelddatabase:
Deze zoekopdracht vindt alle artiesten die geen album hebben in de Albums-tabel:
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) Hier is de gedeeltelijke output:
In deze tutorial heb je geleerd hoe je de SQLite EXISTS . gebruikt operator om te testen op het bestaan van rijen die worden geretourneerd door een subquery.