mit zu beginnen, unten ist die SQL-Reihenfolge der Vorgänge:
- FROM-Klausel
- WHERE-Klausel
- GROUP BY-Klausel
- HAVING-Klausel
- SELECT-Klausel
- ORDER BY-Klausel
In einer einfachen Abfrage erfolgt die Filterung nach der FROM
Klausel (Joins finden Sie in diesem Teil). Was Sie oben tun, ist, dass es in erster Linie die Tabellen mit ihren verknüpfenden Spalten verbindet, die ihre Beziehung definieren. Nach den Aufzeichnungen eingestellt wurde (das Ergebnis Joins) die WHERE
Klausel erfolgt dann Type
, um herauszufiltern, wo ist 1.
Hier gleich ein weiteres Beispiel von LEFT JOIN
verwenden,
Erste Abfrage:
SELECT A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth
FROM A
LEFT JOIN B
ON A.ContactID = B.ID AND
B.LastName = 'Michaels'
vs Zweite Frage:
SELECT A.ID,
A.Name,
A.Type,
B.FirstName,
B.LastName,
B.DateOfBirth
FROM A
LEFT JOIN B ON A.ContactID = B.ID
WHERE B.LastName = 'Michaels'
Die erste Abfrage gibt ALLE Datensätze aus der Tabelle A
zurück. Was B.LastName = 'Michaels'
tut ist, bevor die Tabelle B
mit der Tabelle A
verbunden wird, filtert sie alle Datensätze aus, in denen LastName
gleich Michaels
ist. Die Datensätze aus der Tabelle A
, die keine Übereinstimmungen mit den gefilterten Datensätzen in der Tabelle B
aufweisen, haben die Werte NULL in den Spalten aus der Tabelle B
.
Die zweite Abfrage liefert nicht das gleiche Ergebnis mit der ersten Abfrage und führt genau dasselbe mit INNER JOIN
aus, da nach dem Verknüpfen der Datensätze eine weitere Filterung für das Ergebnis ausgeführt wird und nur die Datensätze übernommen werden, für die LastName
gleich ist Michaels.
Können Sie einen Abfrageausführungsplan enthalten? Das wird wahrscheinlich deine Frage beantworten. – mellamokb
Ich hatte immer den Eindruck, dass der Abfrageoptimierer es herausgefunden und dort angewendet hat, wo es am optimalsten (oder nahe wie) war. Führen Sie die Abfrage mit der Option "Tatsächlichen Abfrageplan einbeziehen" aus, die in SSMS aktiviert ist, um zu sehen, was passiert. –
Ändert es etwas? Solange die Ergebnisse stimmen, natürlich. SQL Server wird es so machen, wie es effizienter ist. – MarcinJuraszek