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
EXISTS
führt Operatorauswertung auf wahr. Daher schließt die Abfrage den Kunden in die Ergebnismenge ein. - Falls die Kundennummer nicht in den
Invoices
existiert Tabelle, die Unterabfrage gibt keine Zeilen zurück, was zuEXISTS
fü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.