ANSI-Syntax
Beide Abfragen sind JOINs, und beide verwenden die ANSI-Syntax, aber eine ist älter als die andere.
Verbindet mit dem JOIN
Schlüsselwort bedeutet, dass die ANSI-92-Syntax verwendet wird. ANSI-89-Syntax bedeutet, dass die Tabellen durch Komma getrennt in der FROM
Klausel, und das Kriterium, das sie miteinander verbindet, findet sich in der WHERE
Klausel. Beim Vergleich von INNER JOINs gibt es keinen Leistungsunterschied - dies:
SELECT *
FROM table_1 t1, table_2 t2
WHERE t1.column = t2.column
...wird den gleichen Abfrageplan erzeugen wie:
SELECT *
FROM TABLE_1 t1
JOIN TABLE_2 t2 ON t2.column = t1.column
Äpfel zu Orangen
Ein weiterer Unterschied ist, dass die beiden Abfragen nicht identisch sind - ein LEFT [OUTER] JOIN erzeugt alle Zeilen aus TABLE_1
und Verweise auf TABLE_2
in der Ausgabe wird NULL sein, wenn es keine Übereinstimmung auf der Grundlage der JOIN-Kriterien gibt (angegeben in der Datei ON
Klausel). Das zweite Beispiel ist ein INNER JOIN, der seulement Zeilen erzeugen, die übereinstimmende Datensätze in TABLE_2
. Hier ist ein Link zu einer visuellen Darstellung von JOINs um den Unterschied zu verdeutlichen...
Pro/Kontra
Der Hauptgrund für die Verwendung der ANSI-92-Syntax ist, dass ANSI-89 keine Unterstützung für OUTER JOIN (LEFT, RIGHT, FULL) bietet. Die ANSI-92-Syntax wurde speziell eingeführt, um dieses Manko zu beheben, da die Anbieter ihre eigene, benutzerdefinierte Syntax implementierten. Oracle verwendete (+)
SQL Server verwendet ein Sternchen an der Seite des Gleichheitszeichens in den Verknüpfungskriterien (IE: t1.column =* t2.column
).
Der nächste Grund für die Verwendung der ANSI-92-Syntax ist, dass sie expliziter und lesbarer ist und gleichzeitig eine Trennung zwischen der Verknüpfung von Tabellen und der eigentlichen Filterung ermöglicht.