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
EXISTS
veroorzaakt operator evalueren naar waar. Daarom bevat de query de curstomer in de resultatenset. - In het geval dat de klant-ID niet bestaat in de
Invoices
tabel, de subquery retourneert geen rijen waardoor deEXISTS
operator 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.