SQL EXISTS oder NOT EXISTS, das ist hier die Frage
Der Artikel bietet einen detaillierten Überblick über die T-SQL-Anweisungen IF EXISTS und NOT EXISTS. Er erklärt auch, warum EXISTS gegenüber IN und NOT EXISTS gegenüber NOT IN gewählt werden sollte, wenn Sie Datensätze mit Unterabfragen vergleichen.
SQL EXISTS ist ein logischer Operator, der verwendet wird, um die Existenz von Zeilen in einer Datenbank zu prüfen. Er gibt TRUE zurück, wenn die Unterabfrage einen oder mehrere Datensätze zurückgibt. SQL NOT EXISTS verhält sich genau entgegengesetzt zum EXISTS-Operator und ist zufrieden, wenn die Unterabfrage keine Zeilen zurückgibt.
SQL EXISTS verwenden
Das Ergebnis der EXISTS-Bedingung ist ein boolescher Wert – True oder False. SQL Server EXISTS kann in SELECT-, UPDATE-, INSERT- oder DELETE-Anweisungen verwendet werden.
SQL EXISTS Syntax
SQL EXISTS Beispiel
Lassen Sie uns das folgende Beispiel für die Verwendung von SQL EXISTS betrachten. Angenommen, unsere Datenbank BicycleStoreDev enthält zwei Tabellen: Customer und Order, die mit einer eins-zu-viele-Tabellenbeziehung verbunden sind.
Nehmen wir an, wir möchten eine Remarketing-Kampagne starten und benötigen daher eine Liste der Kunden, die mindestens eine Bestellung aufgegeben haben. Wie können wir also überprüfen, ob eine Zeile in SQL existiert? Dazu führen wir die folgende Abfrage aus:
Die Abfrage listet die Zeilen aus der Tabelle Customer auf, in denen die Felder CustomerID den Feldern OrderID in der Tabelle Order entsprechen.
SQL NOT EXISTS verwenden
Die SQL-Server-Bedingung NOT EXISTS besteht aus zwei logischen Operatoren: EXISTS, der oben beschrieben wurde, und NOT, der verwendet wird, um eine boolesche Eingabe zu negieren.
Was ist der Unterschied zwischen EXISTS und NOT EXISTS in SQL?
Im Gegensatz zu EXISTS gibt NOT EXISTS TRUE zurück, wenn das Ergebnis der Unterabfrage keine Zeilen enthält. Falls ein einzelner Datensatz in einer Tabelle mit der Unterabfrage übereinstimmt, gibt NOT EXISTS FALSE zurück und die Ausführung der Unterabfrage wird abgebrochen. Im Klartext: NOT EXISTS ermöglicht das Auffinden von Datensätzen, die nicht mit der Unterabfrage übereinstimmen.
SQL NOT EXISTS Syntax
SQL NOT EXISTS in einer Unterabfrage
NOT EXISTS wird mit einer Unterabfrage in der WHERE-Klausel verwendet, um zu prüfen, ob das Ergebnis der Unterabfrage TRUE oder FALSE ist. Der boolesche Wert wird dann verwendet, um die Zeilen aus der äußeren Select-Anweisung einzuschränken.
Mit einfachen Worten: Die Unterabfrage mit NOT EXISTS prüft jede Zeile aus der äußeren Abfrage, gibt TRUE oder FALSE zurück und sendet den Wert zur Verwendung an die äußere Abfrage. In noch einfacheren Worten: Wenn Sie SQL NOT EXISTS verwenden, gibt die Abfrage alle Zeilen zurück, die die EXISTS-Bedingung nicht erfüllen.
SQL NOT EXISTS Beispiel
Um die Verwendung von NOT EXISTS in SQL Server zu demonstrieren, werden wir die Tabelle Customer abfragen, um Zeilen zu finden, in denen die CustomerID nicht in der Tabelle Order vorhanden ist. Durch die Verwendung von NOT EXISTS erhalten wir also die Liste der Kunden, die noch keine Bestellung aufgegeben haben.
Unterschied zwischen SQL Server IN und EXISTS
Der logische Operator IN in SQL gibt TRUE zurück, wenn ein angegebener Wert mit einem der Werte in einer Unterabfrage oder einer Liste übereinstimmt. Einfach ausgedrückt, vergleicht der IN-Operator einen gegebenen Wert mit einer angegebenen Liste von Werten. Wenn der angegebene Wert mit mindestens einem Wert aus der Liste übereinstimmt, gibt er TRUE zurück, andernfalls wird FALSE ausgegeben.
Angenommen, wir setzen unsere Remarketing-Kampagne fort und benötigen eine Liste von Kunden, die in New York leben, um ihnen ein Sonderangebot zu schicken.
Erinnern Sie sich an unsere Abfrage mit EXISTS? Die, die wir verwendet haben, um die Liste der Kunden zu finden, die Bestellungen aufgegeben haben? Lassen Sie uns diese nun mit IN umschreiben. Wie Sie sehen können, ist das Ergebnis dasselbe.
Welches soll ich dann wählen?
Es liegt auf der Hand, dass Unterabfragen mit IN intuitiver sind, aber sie sind langsamer und weniger effizient als dieselben Abfragen, die mit EXISTS geschrieben wurden, wenn es um große Datensätze geht.
Wir sollten auch andere wichtige Unterschiede zwischen den beiden Operatoren erwähnen:
- Die Ausgabe der Unterabfrage mit EXISTS kann entweder TRUE oder FALSE sein, während die Ausgabe von IN TRUE, FALSE oder NULL sein kann.
- Die Datenbank-Engine hört auf, Zeilen auf EXISTS zu überprüfen, sobald sie mindestens eine übereinstimmende Zeile gefunden hat. Bei IN hingegen wird jede Zeile auf den angegebenen Wert überprüft.
- Nullwerte, die von einer Unterabfrage zurückgegeben werden, die mit der äußeren Anweisung mit IN oder NOT IN verglichen wird, geben UNKNOWN zurück. Daher kann die Verwendung von Nullwerten mit IN zu unerwarteten Ergebnissen führen.
SQL Server NOT IN vs. NOT EXISTS
SQL NOT IN besteht aus zwei logischen Operatoren: IN, den wir oben beschrieben haben, und NOT, der jeder bedingten Anweisung vorangestellt werden kann, um Zeilen zu finden, für die diese Anweisung falsch ist.
Wie man NOT IN in SQL verwendet
Lassen Sie uns mit unserer Remarketing-Kampagne fortfahren. Nehmen wir an, wir brauchen eine Liste von Kunden, die in anderen Staaten als New York leben.
NOT IN vs. NOT EXISTS Leistung im SQL Server
Zunächst sollten wir erwähnen, dass NOT EXISTS und NOT IN im Gegensatz zu EXISTS und IN nicht in allen Situationen austauschbar sind. Wenn nämlich NULLs beteiligt sind, liefern sie unterschiedliche Ergebnisse. In diesem Fall, wenn die Unterabfrage auch nur einen Nullwert zurückgibt, wird NOT IN keine Zeile finden.
Was die Leistung betrifft, so wäre SQL NOT EXISTS die bessere Wahl als SQL NOT IN. NOT EXISTS ist deutlich schneller als NOT IN, insbesondere wenn das Ergebnis der Unterabfrage sehr groß ist.
Fazit
SQL ist eine logische Sprache, und hier funktioniert alles ganz einfach. Ihre logischen Operatoren prüfen die Bedingung und geben einen booleschen Datentyp zurück. In bestimmten Fällen können diese logischen Operatoren austauschbar verwendet werden, und die Wahl des Operators ist dem Benutzer überlassen. In diesem Artikel haben wir einen detaillierten Überblick und Vergleich von SQL EXISTS, NOT EXISTS, IN und NOT IN gegeben, damit Sie bei Ihrer Arbeit die richtige Wahl treffen können.
Die Screenshots in diesem Artikel haben wir mit dem Tool SQL Complete erstellt, einem Add-In für SSMS und Visual Studio, das die SQL-Programmierungsfähigkeiten seiner Benutzer erheblich verbessert und beschleunigt. Möchten Sie es selbst ausprobieren? Laden Sie eine 14-tägige kostenlose Testversion von SQL Complete herunter und testen Sie alle fortschrittlichen Funktionen, die es bietet.