SQL IN vs. SQL EXISTS
Dieser Artikel behandelt ausführlich die Operatoren IN und EXISTS in SQL . Es ist eine häufige Frage unter Entwicklern, was der Unterschied zwischen diesen beiden Operatoren ist. Um den Unterschied zu kennen, lassen Sie uns zuerst jeden dieser Operatoren im Detail besprechen.
IN-Operator
Der IN-Operator wird verwendet, um Ergebnisse abzurufen, wenn ein bestimmter Wert mit einem Wert in einer Gruppe von Werten übereinstimmt oder von einer inneren Abfrage zurückgegeben wird. Dieser Operator kann auch mit WHERE verwendet werden -Klausel, um mehr als einen Wert anzugeben. Der IN-Operator wird oft als Akronym für den OR-Operator bezeichnet, da er die Verwendung mehrerer OR-Bedingungen in SELECT-, INSERT-, UPDATE- oder DELETE-Abfragen reduziert .
In diesem Operator wird zuerst die Unterabfrage gelöst und dieses Ergebnis wird dann verwendet, um die äußere Abfrage zu lösen.
Das Folgende ist die allgemeine Syntax des IN-Operators:
SELECT column_name FROM table_name WHERE column_name IN (value1, value2, …);
Beispiel:
Betrachten wir die folgende Kundentabelle.
Kunden-ID | Kundenname | Stadt | Beruf |
1 | Harry | Kolkata | Geschäft |
2 | Ron | Mumbai | Doktor |
3 | Albus | Delhi | Ingenieur |
4 | Dobby | Pune | Wissenschaftler |
5 | Schnappe | Bangalore | Schüler |
Abfrage:
SELECT * FROM Customer WHERE Occupation IN ('Doctor', 'Scientist', 'Engineer');
Die obige Abfrage gibt alle Kunden zurück, die entweder Arzt, Wissenschaftler oder Ingenieur sind.
Ausgabe:
Kunden-ID | Kundenname | Stadt | Beruf |
2 | Ron | Mumbai | Doktor |
3 | Albus | Delhi | Ingenieur |
4 | Dobby | Pune | Wissenschaftler |
EXISTS-Operator
Der EXISTS-Operator gibt im Gegensatz zum IN-Operator einen booleschen Wert zurück. Dieser Operator prüft das Ergebnis der inneren Abfrage und gibt einen booleschen Wert zurück, d. h. entweder wahr oder falsch. Wenn die innere Abfrage einen einzelnen oder mehrere Datensätze zurückgibt, gibt der Operator true zurück, andernfalls gibt er false zurück, wenn keine Datensätze gefunden werden.
Dieser Operator ist auch effizient, da er die weitere Verarbeitung stoppt, sobald das erste wahre Ereignis erkannt wird.
Das Folgende ist die Syntax des EXISTS-Operators:
SELECT column_names FROM table_name WHERE NOT EXISTS ( SELECT column_names FROM table_name WHERE condition );
Beispiel:
Betrachten wir die folgende Kundentabelle.
Kunden-ID | Name | Beruf | Alter |
101 | Harry | Ingenieur | 32 |
102 | Ron | Entwickler | 30 |
103 | Dobby | Anführer | 28 |
104 | Albus | Wissenschaftler | 45 |
105 | Schnappe | Zimmermann | 26 |
106 | Ingwer | Schauspieler | 25 |
107 | NULL | NULL | NULL |
Betrachten wir eine andere Tabelle Orders.
Auftrags-ID | Kunden-ID | Produktname | Bestelldatum |
1 | 101 | Laptop | 2021-01-10 |
2 | 103 | Desktop | 2021-02-12 |
3 | 106 | iPhone | 2021-02-15 |
4 | 104 | Mobil | 2021-03-05 |
5 | 102 | Fernsehen | 2021-03-20 |
Abfrage:
SELECT Name, Occupation FROM Customer WHERE EXISTS ( SELECT * FROM Orders WHERE Customer.Cust_id = Orders.Cust_id );
Die obige Abfrage gibt den Namen und Beruf aller Kunden zurück, die mindestens eine Bestellung aufgegeben haben.
Ausgabe:
Name | Beruf |
Harry | Ingenieur |
Ron | Entwickler |
Dobby | Anführer |
Albus | Wissenschaftler |
Ingwer | Schauspieler |
Differenztabelle zwischen IN- und EXISTS-Operator
Die wichtigsten Unterschiede zwischen dem IN-Operator und dem EXISTS-Operator sind unten tabellarisch aufgelistet:
IN-Operator | EXISTS-Operator |
Es minimiert die Verwendung der ODER-Bedingungen. | Es prüft die Existenz eines Datensatzes in der inneren Abfrage. |
Es vergleicht die Werte der inneren Abfrage mit dem Wert der äußeren Abfrage. | Die Werte zwischen der inneren Abfrage und der Unterabfrage werden nicht verglichen. |
Es überprüft alle Werte innerhalb des Blocks der IN-Klausel. | Es stoppt jede weitere Ausführung, sobald die erste wahre Bedingung erfüllt ist. |
Er kann TRUE, FALSE oder NULL zurückgeben. | Er gibt entweder TRUE oder FALSE. zurück |
Es kann verwendet werden, um NULL-Werte zu überprüfen. | Es kann nicht verwendet werden, um NULL-Werte zu prüfen. |
Es wird sowohl mit Unterabfragen als auch mit Werten verwendet. | Es wird nur mit Unterabfragen verwendet. |
Die Ausführung ist schneller, wenn das Ergebnis der inneren Abfrage kleiner ist. | Die Ausführung ist schneller, selbst wenn das Ergebnis der inneren Abfrage groß ist. Er ist effizienter als der IN-Operator. |
Syntax :SELECT Spaltennamen FROM Tabellenname WHERE Spaltenname IN (Unterabfrage); | Syntax :SELECT column_namesFROM table_nameWHERE [NOT] EXISTS (Unterabfrage); |
Fazit:
In diesem Thema wurde ein Vergleich zwischen dem IN-Operator und den EXISTS-Operatoren von SQL durchgeführt. Beide Bediener führen die gleiche Operation aus, aber ihre interne Arbeitsweise ist unterschiedlich. Sie haben unterschiedliche logische Arbeitsweisen. Jeder von ihnen kann entsprechend der Anforderung ausgewählt werden. Aber wenn der Datensatz groß ist, wird immer empfohlen, sich für den EXISTS-Operator zu entscheiden.