SQLite
 sql >> Datenbank >  >> RDS >> SQLite

SQLite EXISTIERT

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 zu EXISTS 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.