Hin und wieder sehe ich, dass diese verwendet werden, aber es scheint nie etwas zu sein, das nicht genauso gut, wenn nicht sogar besser, mit einer normalen Verknüpfung oder Unterabfrage ausgeführt werden kann.
Ich sehe sie als irreführend an (sie sind im Vergleich zu herkömmlichen Joins und Unterabfragen wohl schwerer zu visualisieren), oft missverstanden (zB verhält sich SELECT *
genauso wie SELECT 1
in der EXISTS/NOT EXISTS
Unterabfrage), und aus meiner begrenzten Erfahrung, langsamer auszuführen.
Kann mir jemand ein Beispiel beschreiben und / oder angeben, wo es am besten passt oder wo es keine andere Möglichkeit gibt, als sie zu nutzen? Beachten Sie, dass ihre Ausführung und Leistung wahrscheinlich plattformabhängig ist. Daher bin ich besonders an deren Verwendung in MySQL .
Hin und wieder sehe ich, dass diese verwendet werden, aber es scheint nie etwas zu sein, das nicht genauso gut, wenn nicht sogar besser, mit einem normalen Join oder einer Unterabfrage ausgeführt werden kann.
Dieser Artikel (obwohl SQL Server
verwandt):
könnte für Sie von Interesse sein.
Zusammengefasst ist JOIN
eine gesetzte Operation, während EXISTS
ein Prädikat ist.
Mit anderen Worten, diese Abfragen:
%Vor%gegen
%Vor% sind nicht dasselbe: Ersteres kann mehr als einen Datensatz von a
zurückgeben, während Letzteres nicht möglich ist.
Ihre Gegenstücke, NOT EXISTS
vs. LEFT JOIN / IS NULL
, sind logisch, aber nicht leistungsmäßig.
Tatsächlich ist ersteres möglicherweise effizienter in SQL Server
:
Wenn die Hauptabfrage viel weniger Zeilen zurückgegeben hat als die Tabelle, in der Sie sie finden möchten. Beispiel:
%Vor%dies mit einem Join wird viel langsamer sein. oder ein besseres Beispiel, wenn Sie suchen möchten, ob ein Element in einer von mehreren Tabellen existiert.
Tags und Links sql mysql subquery exists not-exists