Axel Richter: join unter access

Beitrag lesen

Hallo Philipp

select * from tabelle1, tabelle2 where tabelle1.id = tabelle2.id
Die Syntax ist korrekt und selbst Access kennt diesen simplen JOIN.
Das ist korrekt. Auch ACCESS kann diesen Unsinn.
Unsinn? - Weil ein INNER JOIN eigentlich das Kreuzprodukt erzwingt (obwohl natürlich
vom QueryOptimizer optimiert) und somit aperformant "klingt"?

Da ist kein großer Unterschied. Auch

SELECT * FROM tabelle1, tabelle2

verbindet erstmal jeden Datensatz aus tabelle1 mit jedem Datensatz aus tabelle2. WHERE filtert dann die heraus, bei denen gilt:

tabelle1.id = tabelle2.id

@Jose: IMHO ist INNER JOIN eine Syntax, die es nur in MySQL gibt.
Wie kommst Du zu dieser Meinung?
Tja, jetzt frage ich mich auch :-)
Ich hatte mir folgendes überlegt:
Ein INNER JOIN und die Kommagetrennte Liste der WHERE-Klausel sind semantisch äquivalent.
Beide machen einen Full Table Join und selektieren dann aufgrund Kriterien.
Frag mich nicht warum, aber ich dachte, dass diese INNER JOIN - Syntax nur MySQL
spezifisch sei (eigentlich ist die eine oder andere Syntax ja redundant).

SQL-89 standard for inner joins:

SELECT TableA.Field1, TableB.Field2, blah, blah
FROM TableA, TableB
WHERE TableA.Field1=TableB.Field2

SQL-92 standard:

SELECT TableA.Field1, TableB.Field2, blah, blah
FROM TableA
INNER JOIN TableB
ON TableA.Field1=TableB.Field2
WHERE Blah (any non-linking criteria)

Das meinte ich. JOIN ist für die Tabellenverbindung, WHERE ist für die Filterung zuständig. Das ist einfach übersichtlicher als komplex verschachtelte WHERE-Klauseln.

Leider habe ich noch keine komplette SQL-Standard-Bibliothek gefunden. Nur gegen Bezahlung:

International Organization for Standardization
1 Rue de Varembé
Case postale 56
CH-1211, Geneva 20, Switzerland
Phone: +41.22.749.0111
Fax: +41.22.733.3430
Web site: http://www.iso.ch/

or from their web store:
http://www.iso.ch/cate/cat.html

allerdings ist JOIN (INNER JOIN, LEFT JOIN, RIGHT JOIN) Bestandteil der ISO-SQL-92 Standards.

viele Grüße

Axel