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