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 ?

22voto

IN unterstützt nur Gleichheitsbeziehungen (oder Ungleichheit, wenn ihr ein NO ).
Es ist ein Synonym für \= beliebig / \=einige z.B.

select    * 
from      t1 
where     x in (select x from t2)
;

EXISTS unterstützt verschiedene Arten von Beziehungen, die nicht mit IN z.B..

select    * 
from      t1 
where     exists (select    null 
                  from      t2 
                  where     t2.x=t1.x 
                        and t2.y>t1.y 
                        and t2.z like '' || t1.z || ''
                  )
;

Und in einem anderen Zusammenhang -

Die angeblichen Leistungs- und technischen Unterschiede zwischen EXISTS y IN können aus den Implementierungen/Einschränkungen/Fehlern eines bestimmten Anbieters resultieren, aber oft sind sie nichts anderes als Mythen, die aus mangelndem Verständnis der Datenbankinterna entstanden sind.

Die Definition der Tabellen, die Genauigkeit der Statistiken, die Datenbankkonfiguration und die Version des Optimierers wirken sich alle auf den Ausführungsplan und damit auf die Leistungskennzahlen aus.

20voto

Wenn Sie die IN Operator, scannt die SQL-Engine alle Datensätze, die von der inneren Abfrage geholt wurden. Andererseits, wenn wir den Operator EXISTS wird die SQL-Engine den Scanvorgang beenden, sobald sie eine Übereinstimmung gefunden hat.

10voto

Arulraj.M Punkte 101

En Exists Schlüsselwort wahr oder falsch auswertet, aber IN Schlüsselwort alle Werte in der entsprechenden Spalte der Unterabfrage vergleichen. Eine weitere Select 1 kann verwendet werden mit Exists Befehl. Beispiel:

SELECT * FROM Temp1 where exists(select 1 from Temp2 where conditions...)

Pero IN weniger effizient ist, so dass Exists schneller.

5voto

Gishu Punkte 130442

Glaube ich,

  • EXISTS ist, wenn Sie die Ergebnisse einer Abfrage mit einer anderen Unterabfrage abgleichen müssen. Die Ergebnisse der Abfrage Nr. 1 müssen abgerufen werden, wenn die Ergebnisse der Unterabfrage übereinstimmen. Eine Art von Join.. Z.B. select customers table#1 who have placed orders table#2 too

  • IN soll abfragen, ob der Wert einer bestimmten Spalte IN eine Liste (1,2,3,4,5) Z.B. Wählen Sie Kunden aus, die in den folgenden Postleitzahlen liegen, d.h. die Werte der Postleitzahl liegen in der Liste (....).

Wann sollte man das eine dem anderen vorziehen... wenn man das Gefühl hat, dass es sich angemessener liest (die Absicht besser vermittelt).

3voto

ram Punkte 31

Wenn eine Unterabfrage ein NULL Wert, dann wird die ganze Aussage zu NULL . In diesen Fällen verwenden wir die EXITS Stichwort. Wenn wir bestimmte Werte in Unterabfragen vergleichen wollen, verwenden wir das IN Stichwort.

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