Ein Join ist eine Verknüfpung zwischen zwei Tabellen. Wenn du z. B. eine Tabelle mit Namen tbl_name und eine mit Telefonnummern tbl_tel hast, fragst du mit
PHP-Code:
SELECT name, telefonnummer FROM tbl_name, tbl_tel WHERE tbl_name.id = tbl_tel.id
die Namen und die zugehörigen Telefonnummern ab. Dann werden hier aber nur Datensätze gefunden, die auch auf beiden Seiten, also in beiden Tabellen ein entsprechendes Gegenstück haben. Hat also ein Name keine Telefonnummer gespeichert, wird dieser nicht mit ausgegeben.
Im Grunde ist die erste Schreibweise schon ein JOIN, denn 2 Tabellen werden miteinander verknüpft.
Die selbe Abfrage könntest du auch so schreiben:
PHP-Code:
SELECT name, telefonnummmer FROM tbl_name JOIN tbl_tel WHERE tbl_name.id = tbl_tel.id
ebenfalls dasselbe wäre der Inner Join, bei dem beide Tabellen verglichen werden, und nur die Datensätze ausgegeben werden, bei denen auf beiden Seiten Übereinstimmungen gefunden werden. Da SQL dieses als default annimmt, ist es daher dasselbe wie die erste Abfrage ohne JOIN:
PHP-Code:
SELECT name, telefonnummmer FROM tbl_name INNER JOIN tbl_tel WHERE tbl_name.id = tbl_tel.id
Jetzt wollen wir alle Namen und die zugehörigen Telefonnummern ausgeben, auch wenn keine Nummer gespeichert ist:
PHP-Code:
SELECT name, telefonnummmer FROM tbl_name LEFT JOIN tbl_tel ON tbl_name.id = tbl_tel.id
Mit LEFT JOIN wird also zuerst die linke Tabelle ausgelesen und dann erst die entsprechenden Datensätze der rechten Tabelle dazugestellt. Es ändert sich nur folgendes: Anstatt WHERE muss ON verwendet werden, die Parameter dahinter werden gleich geschrieben.
LEFT OUTER JOIN ist nur eine andere Schreibweise für den LEFT JOIN, also in dem Fall dasselbe.
RIGHT JOIN ist naturgemäß das selbe, nur wird zuerst die rechte Tabelle ausgelesen und dann die Datensätze der linken Tabelle dazugestellt.
STRAIGHT JOIN ist eine mySQL Spezialität und liest zuerst die linke Tabelle und dann die rechte, es ergibt sich eine andere Sortierung als bei JOIN.
Soweit alles unklar?
Gruß, Jürgen