Sammanfattning :i denna handledning kommer du att lära dig hur du använder SQLite EXISTS
operator för att testa förekomsten av rader som returneras av en underfråga.
Introduktion till SQLite EXISTS
operatör
EXISTS
operator är en logisk operator som kontrollerar om en underfråga returnerar någon rad.
Här är den grundläggande syntaxen för EXISTS
operatör:
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
I den här syntaxen är underfrågan en SELECT
sats som returnerar noll eller fler rader.
Om underfrågan returnerar en eller flera rader, EXISTS
operatör returnerar sant. Annars EXISTS
operatorn returnerar false eller NULL
.
Observera att om underfrågan returnerar en rad med NULL
, resultatet av EXISTS
operatorn är fortfarande sant eftersom resultatuppsättningen innehåller en rad med NULL.
För att negera koden EXISTS
operatorn, använder du NOT EXISTS
operatör enligt följande:
NOT EXISTS (subquery)
Code language: SQL (Structured Query Language) (sql)
NOT EXISTS
operatorn returnerar true om underfrågan inte returnerar någon rad.
SQLite EXISTS
operatörsexempel
Se följande Customers
och Invoices
tabeller från exempeldatabasen:
Följande uttalande hittar kunder som har fakturor:
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öljande bild visar den partiella resultatuppsättningen:
I det här exemplet, för varje kund, EXISTS
operatören kontrollerar om kund-id finns i invoices
bord.
- Om ja, returnerar underfrågan en rad med värdet 1 som orsakar
EXISTS
operatören utvärdera till sant. Därför inkluderar frågan curstomer i resultatuppsättningen. - Om kund-id inte finns i
Invoices
tabell, returnerar underfrågan inga rader som orsakarEXISTS
operatör för att utvärdera till falskt, därför inkluderar frågan inte kunden i resultatuppsättningen.
Observera att du kan använda IN
operator istället för EXISTS
operatör i detta fall för att uppnå samma 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 underfrågan returnerar den första raden, EXISTS
operatören slutar söka eftersom den kan fastställa resultatet. Å andra sidan, IN
Operatören måste skanna alla rader som returneras av underfrågan för att fastställa resultatet.
Generellt sett är EXISTS
operatören är snabbare än IN
operatorn om resultatuppsättningen som returneras av underfrågan är stor. Däremot IN
operatorn är snabbare än EXISTS
operatorn om resultatuppsättningen som returneras av underfrågan är liten.
SQLite NOT EXISTS
operatörsexempel
Se följande lista över artister och album från exempeldatabasen:
Denna fråga hittar alla artister som inte har något 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)
Här är den partiella utmatningen:
I den här handledningen har du lärt dig hur du använder SQLite EXISTS
operator för att testa förekomsten av rader som returneras av en underfråga.