Oversigt :i denne vejledning lærer du, hvordan du bruger SQLite EXISTS operator til at teste for eksistensen af rækker, der returneres af en underforespørgsel.
Introduktion til SQLite FINDER operatør
Her er den grundlæggende syntaks for EXISTS operatør:
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
I denne syntaks er underforespørgslen en SELECT sætning, der returnerer nul eller flere rækker.
Hvis underforespørgslen returnerer en eller flere rækker, vil EXISTS operatør returnerer sandt. Ellers FINDER operator returnerer false eller NULL .
Bemærk, at hvis underforespørgslen returnerer én række med NULL , resultatet af EXISTS operatoren er stadig sand, fordi resultatsættet indeholder én række med NULL.
For at ophæve koden EXISTS operatør, bruger du EKSISTERER IKKE operatør som følger:
NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)
SQLite FINDER operatøreksempel
Se følgende Kunder og Fakturaer tabeller fra eksempeldatabasen:
Følgende erklæring finder kunder, der har fakturaer:
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) Følgende billede viser det delvise resultatsæt:
I dette eksempel, for hver kunde, er EXISTS operatør kontrollerer, om kunde-id'et findes i fakturaerne tabel.
- Hvis ja, returnerer underforespørgslen én række med værdien 1, der forårsager
EXISTSoperatør vurdere til sandt. Derfor inkluderer forespørgslen curstomer i resultatsættet. - Hvis kunde-id'et ikke findes i
Fakturaertabel, returnerer underforespørgslen ingen rækker, som forårsagerEXISTSoperatør for at evaluere til falsk, derfor inkluderer forespørgslen ikke kunden i resultatsættet.
Bemærk, at du kan bruge IN operator i stedet for FINDER operatør i dette tilfælde for at opnå det samme resultat:
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)
Når underforespørgslen returnerer den første række, FINDER operatør stopper med at søge, fordi den kan bestemme resultatet. På den anden side er IN operatøren skal scanne alle rækker returneret af underforespørgslen for at bestemme resultatet.
Generelt set er FINDER operatoren er hurtigere end IN operator, hvis resultatsættet, der returneres af underforespørgslen, er stort. Derimod er IN operatoren er hurtigere end EXISTS operator, hvis resultatsættet, der returneres af underforespørgslen, er lille.
SQLite FINDER IKKE operatøreksempel
Se følgende tabel over kunstnere og album fra eksempeldatabasen:
Denne forespørgsel finder alle kunstnere, der ikke har noget album i tabellen 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) Her er det delvise output:
I denne øvelse har du lært, hvordan du bruger SQLite EXISTS operator til at teste for eksistensen af rækker, der returneres af en underforespørgsel.