Was ist der Unterschied zwischen "nicht in" und "nicht existiert"?

8

Was ist der Unterschied zwischen not in und not exists in einer Oracle-Abfrage?

Wann verwende ich not in ? Und not exist ?

    
Gold 09.11.2009, 06:46
quelle

4 Antworten

5

Ich denke, dass es dem gleichen Zweck dient.

not in kann auch Literalwerte annehmen, während not exists eine Abfrage benötigt, um die Ergebnisse mit zu vergleichen.

EDIT: not exists könnte gut sein, weil es join mit der äußeren Abfrage & amp; kann zur Verwendung des Index führen, wenn das Kriterium eine indexierte Spalte verwendet.

EDIT2: Siehe auch diese Frage.

EDIT3: Lassen Sie mich die obigen Dinge zurücknehmen.
Siehe diesen Link. Ich denke, es hängt alles davon ab, wie die DB das übersetzt & amp; auf Datenbank / Indizes etc.

    
shahkalpesh 09.11.2009, 06:48
quelle
14

Der Unterschied zwischen NOT IN und NOT EXISTS wird klar, wenn NULL -Werte im Ergebnis enthalten sind.

Zum Beispiel:

%Vor%

Hinweis : Der Hauptunterschied besteht darin, dass test_b einen null -Wert enthält.

%Vor%

Keine Zeilen zurückgegeben

%Vor%

Gibt

zurück %Vor%     
Nick Pierpoint 09.11.2009 20:50
quelle
0

Nicht in testet das Vorhandensein eines Elements in einem Satz von Elementen, also ist es einfacher.

Not exists kann kompliziertere Abfragen verarbeiten, einschließlich der Gruppierung (z. B. mit sum (x) = z oder mit count (*) & gt; 3), Ergebnissen mit mehreren Bedingungen (z. B. das Zuordnen mehrerer Elemente) und kann Indizes nutzen .

In manchen Situationen ist es nicht einfacher zu tun, als es nicht gibt. Ich finde im Allgemeinen, dass ich hier für den Wert eines Schlüsselfeldes in einer Menge von Werten teste.

Als Daumenregel bevorzuge ich nicht, da es viel mehr Situationen umfasst als nicht. Nicht vorhanden kann für jede Situation verwendet werden, für die nicht in, aber nicht umgekehrt.

    
Oliver Townshend 09.11.2009 12:26
quelle
0

Es kann zu Leistungsunterschieden kommen, da es schneller besteht.

Der wichtigste Unterschied ist der Umgang mit Nullen. Ihre Abfrage scheint sowohl mit "in" als auch "exist" identisch zu sein. Wenn Ihre Unterabfrage jedoch null zurückgibt, können Sie einen Schock bekommen.

Sie könnten feststellen, dass die Existenz von Nullen als Ursache fehlschlägt.

Siehe Joe Celkos "SQL for Smarties" für eine bessere Erklärung, wann sie jeweils zu verwenden sind.

    
David Roussel 09.11.2009 07:00
quelle

Tags und Links