Eine anhaltende Herausforderung im Umgang mit SQL ist die Bestimmung der richtigen Nutzung der vorhanden ist und IN -Betreiber . Die beiden Betreiber können die gleichen Ergebnisse , aber nicht immer so zu tun. Außerdem gibt es erhebliche Debatte darüber, wie jeder Betreiber ist auf Geschwindigkeit optimiert. Benutzer sollten verstehen, die verschiedenen Attribute der einzelnen Betreiber und versuchen , sowohl die entsprechende Funktion zu bestimmen. IN Operator
Der Operator gibt eine Zeile , wenn eine WHERE klimatisierten table.field Wert entspricht einer Liste von IN-Werte . IN ist in der Regel als Teil eines Haupt -Abfrage oder in Verbindung mit einer Unterabfrage verwendet
Beispiel 1 : . WHERE table.field in ('a' , 'b' , 'c' )
Beispiel 2 : WHERE table.field in ( Unterabfrage Rückkehr von Werten )
Operator
EXISTS die EXISTS- Operator liefert alle wichtigen Abfrage Reihen, wenn die Unterabfrage keine Zeilen enthält .
EXISTS wird nur in Verbindung mit einer Unterabfrage verwendet . Zurückgegebenen Zeilen durch einen Filter an der Haupt- Abfrage -Ebene bestimmt. Beispiel : WHERE EXISTS ( Unterabfrage Rückkehr von Werten )
Difference
IN nicht auswerten kann NULL-Werte , so die Zeilen sind immer falsch, und nicht zurückgegeben.
EXISTS kann NULL-Werte zu bewerten, so dass diese Zeilen können zurückgegeben werden.
Ähnlichkeiten
existiert und in beiden Unterstützung korrelierte und nicht korrelierte Unterabfragen und beide können produzieren wichtigsten ähnliche Ergebnisse . Wenn korreliert , existiert und im Match eine Haupt- Abfrage Feld einer Unterabfrage Feld (ex : main.id = subquery.id ) . Die Unterabfrage wertet Zeile für Zeile , für jedes Spiel gefunden. In diesem Fall wird IN und EXISTS wieder die gleichen Zeilen auf ähnliche id Spiele basiert. Wenn nicht-korrelierten , EXISTS und IN Prozess ihre Unterabfragen zuerst, dann Spiel Ergebnisse zu den wichtigsten Abfrage.
Performance existiert und IN
Die Performance wird von der Datenbank bestimmt Optimierer und der Ausführungsplan beschäftigt für den Code ausgeführt. Für EXISTS und IN, kann der Optimierer wählen unterschiedliche Wege . In Oracle ist dies durch NOT EXISTS Vermeidung eines anti- kommen , und in der Regel schneller als Nachweis NICHT IN . Am Ende wird einige trial and error erforderlich, um den schnellsten Weg Benchmark abhängig von der Datenbank und es ist Version verwendet wird. Achten Sie darauf , um den Bediener , dass die richtigen Ergebnisse sorgt ersten verwenden , dann, wenn alle die gleiche ist, versuchen Sie ersetzen existiert und IN , um wirklich zu sehen, welche schneller ist.