Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

EXISTS vs. JOIN und Verwendung der EXISTS-Klausel

EXISTS wird verwendet, um einen booleschen Wert zurückzugeben, JOIN gibt eine ganz andere Tabelle zurück

EXISTS wird nur verwendet, um zu testen, ob eine Unterabfrage Ergebnisse zurückgibt, und schließt Kurzschlüsse, sobald dies der Fall ist. JOIN wird verwendet, um eine Ergebnismenge zu erweitern, indem sie mit zusätzlichen Feldern aus einer anderen Tabelle kombiniert wird, zu der eine Beziehung besteht.

In Ihrem Beispiel sind die Abfragen semantisch äquivalent.

Verwenden Sie im Allgemeinen EXISTS Wann:

  • Sie müssen keine Daten aus der zugehörigen Tabelle zurückgeben
  • Du hast Duplikate in der zugehörigen Tabelle (JOIN kann zu doppelten Zeilen führen, wenn sich Werte wiederholen)
  • Sie wollen die Existenz prüfen (verwenden Sie statt LEFT OUTER JOIN...NULL Zustand)

Wenn Sie über geeignete Indizes verfügen, ist der EXISTS meistens verhält sich genauso wie JOIN . Die Ausnahme bilden sehr komplizierte Unterabfragen, bei denen es normalerweise schneller ist, EXISTS zu verwenden .

Wenn Ihr JOIN Schlüssel nicht indiziert ist, kann es schneller sein, EXISTS zu verwenden aber Sie müssen für Ihre spezifischen Umstände testen.

JOIN Syntax ist normalerweise auch leichter zu lesen und klarer.