Hallo,
Kann ich INNER JOIN also meine Variante von oben immer anwenden,
oder brauch ich manchmal auch RIGHT, LEFT, OUTER und INNER JOIN ?
Man unterscheidet zunächst INNER und OUTER Joins.
INNER Joins verbinden Felder aus mehreren Tabellen zu Datensatzmengen, wobei nur solche Datensätze aus den Einzeltabellen verbunden werden, die eine innere Verbindung zueinander haben.
OUTER Joins tun das auch, beziehen aber in die Datensatzmenge auch solche Datensätze aus den Einzeltabellen ein, die eine solche innere Verbindung nicht haben.
OUTER Joins kann man nochmals unterteien in LEFT OUTER JOIN und RIGHT OUTER JOIN.
Die LEFT JOIN Geschichte ist schwer zu verstehen.
Aber sie funktioniert. ;-)
Naja, schwer ist relativ:
Dein Beispiel:
Tabellen:
tabelle1 - id (primary key), bla, foo
tabelle2 - tab2id (primary key), tab1id (foreign key), blabla, foofoo
SELECT tabelle1.id, tabelle1.bla, tabelle2.tab1id, tabelle2.blabla
FROM tabelle1 INNER JOIN tabelle2 ON tabelle1.id=tabelle2.tab1id
ergibt eine Datensatzmenge mit den angegebenen Feldern aus beiden Tabellen in jedem Datensatz, die nur solche Datensätze enthält, bei denen gilt tabelle1.id = tabelle2.tab1id.
SELECT tabelle1.id, tabelle1.bla, tabelle2.tab1id, tabelle2.blabla
FROM tabelle1 LEFT JOIN tabelle2 ON tabelle1.id=tabelle2.tab1id
ergibt eine Datensatzmenge mit den angegebenen Feldern aus beiden Tabellen in jedem Datensatz, die alle Datensätze aus tabelle1 (LEFT) und nur solche Datensätze aus tabelle2 enthält, bei denen gilt tabelle1.id = tabelle2.tab1id. Für die zusätzlichen Datensätze aus tabelle1, bei denen es keine Entsprechung tabelle1.id = tabelle2.tab1id gibt, sind die Felder aus tabelle2 mit dem Wert NULL belegt.
SELECT tabelle1.id, tabelle1.bla, tabelle2.tab1id, tabelle2.blabla
FROM tabelle1 RIGHT JOIN tabelle2 ON tabelle1.id=tabelle2.tab1id
ergibt eine Datensatzmenge mit den angegebenen Feldern aus beiden Tabellen in jedem Datensatz, die alle Datensätze aus tabelle2 (RIGHT) und nur solche Datensätze aus tabelle1 enthält, bei denen gilt tabelle1.id = tabelle2.tab1id. Für die zusätzlichen Datensätze aus tabelle2, bei denen es keine Entsprechung tabelle1.id = tabelle2.tab1id gibt, sind die Felder aus tabelle1 mit dem Wert NULL belegt.
viele Grüße
Axel