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
EXISTSoperatören utvärdera till sant. Därför inkluderar frågan curstomer i resultatuppsättningen. - Om kund-id inte finns i
Invoicestabell, returnerar underfrågan inga rader som orsakarEXISTSoperatö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.