Database
 sql >> Datenbank >  >> RDS >> Database

SQL IN vs. SQL EXISTS

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.