Jede Abfrage, die mehr als eine Tabelle betrifft, erfordert eine Form der Zuordnung, um die Ergebnisse von Tabelle „A“ mit Tabelle „B“ zu verknüpfen. Das traditionelle (ANSI-89) Mittel dazu ist:
- Listen Sie die beteiligten Tabellen in einer kommagetrennten Liste in der FROM-Klausel auf
-
Schreiben Sie die Zuordnung zwischen den Tabellen in die WHERE-Klausel
SELECT * FROM TABLE_A a, TABLE_B b WHERE a.id = b.id
Hier ist die Abfrage, die mit ANSI-92 JOIN-Syntax neu geschrieben wurde:
SELECT *
FROM TABLE_A a
JOIN TABLE_B b ON b.id = a.id
Aus Leistungssicht:
Wo unterstützt (Oracle 9i+, PostgreSQL 7.2+, MySQL 3.23+, SQL Server 2000+), bringt die Verwendung einer der beiden Syntaxen gegenüber der anderen keinen Leistungsvorteil. Der Optimierer sieht sie als dieselbe Abfrage. Komplexere Abfragen können jedoch von der Verwendung der ANSI-92-Syntax profitieren:
- Möglichkeit, die JOIN-Reihenfolge zu steuern – die Reihenfolge, in der Tabellen gescannt werden
- Möglichkeit, vor dem Beitritt Filterkriterien auf eine Tabelle anzuwenden
Aus Wartungsperspektive:
Es gibt zahlreiche Gründe, ANSI-92 JOIN-Syntax über ANSI-89 zu verwenden:
- Lesbarer, da das JOIN-Kriterium von der WHERE-Klausel getrennt ist
- Weniger Verfehlung der JOIN-Kriterien
- Konsistente Syntaxunterstützung für andere JOIN-Typen als INNER, wodurch Abfragen einfach in anderen Datenbanken verwendet werden können
- WHERE-Klausel dient nur als Filterung des kartesischen Produkts der verknüpften Tabellen
Aus Design-Perspektive:
ANSI-92 JOIN-Syntax ist Muster, nicht Anti-Muster:
- Der Zweck der Abfrage ist offensichtlicher; die von der Anwendung verwendeten Spalten sind klar
- Es folgt der Modularitätsregel, wann immer möglich strikte Typisierung zu verwenden. Explizit ist fast überall besser.
Schlussfolgerung
Mangels Vertrautheit und/oder Komfort sehe ich keinen Vorteil darin, weiterhin die ANSI-89-WHERE-Klausel anstelle der ANSI-92-JOIN-Syntax zu verwenden. Einige mögen sich darüber beschweren, dass die ANSI-92-Syntax ausführlicher ist, aber das macht sie deutlich. Je expliziter, desto einfacher ist es zu verstehen und zu pflegen.