Zusammenfassung :In diesem Tutorial erfahren Sie, wie Sie die SQLite EXISTS verwenden Operator zum Testen der Existenz von Zeilen, die von einer Unterabfrage zurückgegeben werden.
Einführung in SQLite EXISTS Betreiber
Der EXISTS Operator ist ein logischer Operator, der prüft, ob eine Unterabfrage eine Zeile zurückgibt.
Hier ist die grundlegende Syntax von EXISTS Betreiber:
EXISTS(subquery)
Code language: SQL (Structured Query Language) (sql)
In dieser Syntax ist die Unterabfrage ein SELECT Anweisung, die null oder mehr Zeilen zurückgibt.
Wenn die Unterabfrage eine oder mehrere Zeilen zurückgibt, wird EXISTS Operator gibt true zurück. Andernfalls EXISTS Operator gibt false oder NULL zurück .
Beachten Sie, dass die Unterabfrage eine Zeile mit NULL zurückgibt , das Ergebnis von EXISTS Der Operator ist immer noch wahr, da die Ergebnismenge eine Zeile mit NULL enthält.
Um das EXISTS zu negieren verwenden Sie den Operator NOT EXISTS Operator wie folgt:
NOT EXISTS (subquery)Code language: SQL (Structured Query Language) (sql)
Der NOT EXISTS Der Operator gibt true zurück, wenn die Unterabfrage keine Zeile zurückgibt.
SQLite EXISTS Operatorbeispiel
Siehe die folgenden Customers und Invoices Tabellen aus der Beispieldatenbank:
Die folgende Anweisung findet Kunden, die Rechnungen haben:
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) Das folgende Bild zeigt die partielle Ergebnismenge:
In diesem Beispiel ist für jeden Kunden der EXISTS überprüft, ob die Kundennummer in den Invoices vorhanden ist Tabelle.
- Falls ja, gibt die Unterabfrage eine Zeile mit dem Wert 1 zurück, was zu
EXISTSführt Operatorauswertung auf wahr. Daher schließt die Abfrage den Kunden in die Ergebnismenge ein. - Falls die Kundennummer nicht in den
Invoicesexistiert Tabelle, die Unterabfrage gibt keine Zeilen zurück, was zuEXISTSführt -Operator zu "false" auswerten, daher schließt die Abfrage den Kunden nicht in die Ergebnismenge ein.
Beachten Sie, dass Sie den IN verwenden können Operator anstelle von EXISTS Operator in diesem Fall, um das gleiche Ergebnis zu erzielen:
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)
Sobald die Unterabfrage die erste Zeile zurückgibt, ist EXISTS Der Operator stoppt die Suche, weil er das Ergebnis bestimmen kann. Andererseits der IN Der Operator muss alle von der Unterabfrage zurückgegebenen Zeilen scannen, um das Ergebnis zu ermitteln.
Allgemein gesagt, der EXISTS Operator ist schneller als IN -Operator, wenn die von der Unterabfrage zurückgegebene Ergebnismenge groß ist. Im Gegensatz dazu ist der IN Operator ist schneller als EXISTS -Operator, wenn die von der Unterabfrage zurückgegebene Ergebnismenge klein ist.
SQLite NOT EXISTS Operatorbeispiel
Sehen Sie sich die folgende Interpreten- und Albentabelle aus der Beispieldatenbank an:
Diese Abfrage findet alle Künstler, die kein Album in der Albentabelle haben:
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 ist die Teilausgabe:
In diesem Tutorial haben Sie gelernt, wie Sie SQLite EXISTS verwenden Operator zum Testen der Existenz von Zeilen, die von einer Unterabfrage zurückgegeben werden.