513 Stimmen

Unterschied zwischen EXISTS und IN in SQL?

Was ist der Unterschied zwischen dem EXISTS y IN Klausel in SQL?

Wann sollten wir die EXISTS und wann sollten wir die IN ?

3voto

Welche Variante schneller ist, hängt von der Anzahl der Abfragen ab, die von der inneren Abfrage abgerufen werden:

  • Wenn Ihre innere Abfrage Tausende von Zeilen abruft, wäre EXIST die bessere Wahl
  • Wenn Ihre innere Abfrage nur wenige Zeilen abruft, wird IN schneller sein

EXIST wertet auf true oder false, aber IN vergleicht mehrere Werte. Wenn Sie nicht wissen, ob der Datensatz vorhanden ist oder nicht, sollten Sie EXIST wählen.

3voto

rogue lad Punkte 2248

Der Unterschied liegt hier:

select * 
from abcTable
where exists (select null)

Die obige Abfrage gibt alle Datensätze zurück, während die untere leere Datensätze zurückgeben würde.

select *
from abcTable
where abcTable_ID in (select null)

Probieren Sie es aus und beobachten Sie das Ergebnis.

3voto

Vipin Jain Punkte 5437

Der Grund dafür ist, dass der EXISTS-Operator nach dem Prinzip "at least found" arbeitet. Er gibt "true" zurück und stoppt das Scannen der Tabelle, sobald mindestens eine passende Zeile gefunden wurde.

Wenn der IN-Operator hingegen mit einer Unterabfrage kombiniert wird, muss MySQL zuerst die Unterabfrage verarbeiten und verwendet dann das Ergebnis der Unterabfrage, um die gesamte Abfrage zu verarbeiten.

Als Faustregel gilt: Wenn die Unterabfrage eine große Datenmenge enthält Menge an Daten enthält, bietet der EXISTS-Operator eine bessere Leistung.

Die Abfrage, die den IN-Operator verwendet, wird jedoch schneller ausgeführt, wenn die von der Unterabfrage zurückgegebene Ergebnismenge sehr klein ist.

1voto

In certain circumstances, it is better to use IN rather than EXISTS. In general, if the selective predicate is in the subquery, then use IN. If the selective predicate is in the parent query, then use EXISTS.

https://docs.oracle.com/cd/B19306_01/server.102/b14211/sql_1016.htm#i28403

1voto

Ranjeeth Punkte 91

Nach meinem Verständnis sollten beide gleich sein, solange wir nicht mit NULL-Werten arbeiten.

Der gleiche Grund, warum die Abfrage nicht den Wert für = NULL vs is NULL zurückgibt. http://sqlinthewild.co.za/index.php/2010/02/18/not-exists-vs-not-in/

Was als boolesche vs Komparator Argument geht, um einen booleschen beide Werte zu generieren muss verglichen werden und das ist, wie jeder wenn Bedingung works.so ich nicht verstehen, wie IN und EXISTS anders verhalten .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X