Join - Verknüpfen von Tabellen

 

Folgende JOINS werden von MySQL unterstützt:

     table_reference, table_reference
     table_reference [CROSS] JOIN table_reference
     table_reference INNER JOIN table_reference join_condition
     table_reference STRAIGHT_JOIN table_reference
     table_reference LEFT [OUTER] JOIN table_reference join_condition
     table_reference LEFT [OUTER] JOIN table_reference
     table_reference NATURAL [LEFT [OUTER]] JOIN table_reference
     { oj table_reference LEFT OUTER JOIN table_reference ON conditional_expr }
     table_reference RIGHT [OUTER] JOIN table_reference join_condition
     table_reference RIGHT [OUTER] JOIN table_reference
     table_reference NATURAL [RIGHT [OUTER]] JOIN table_reference

Tabellen-Referenz könne mit einem Alias versehen werden: tbl_name AS alias_name oder tbl_name alias_name :

 

      MySQL> select t1.name, t2.salary from employee AS t1, info AS t2
                 where t1.name = t2.name;

oder einfacher ohne as: cdsammlung c, cdinterpret i

JOIN und , (Komma) sind von der Syntax her völlig äquivalent. Beide führen einen vollen JOIN Befehl zwischen zwei Tabellen aus.
Normalerweise sollten Tabellen mit Hilfe der WHERE Bedingung verbunden werden.
Der Ausdruck ON beschreibt ein kondizionales "Wenn es übereinstimmt", und kann mit dem Ausdruck WHERE verbunden werden.

 

Der einfachste JOIN ist der sogenannte "EQUI-JOIN". Ein Beispiel :


SELECT A.EineSpalte, B.EineAndereSpalte   
FROM Tabelle1 AS A, Tabelle2 AS B WHERE A.EinWert = B.EinAndererWert;

SELECT titel, interpret, name 
FROM cdsammlung c, ausgeliehen a WHERE c.id = a.cd_id 
SELECT titel, interpret, name 
FROM cdsammlung c JOIN ausgeliehen a WHERE c.id = a.cd_id 
 

Die Kosten eines JOINS sollte man sich immer durch EXPLAIN anzeign lassen!
z.B.: EXPLAIN SELECT titel, interpret, name FROM cdsammlung c JOIN ausgeliehen a WHERE c.id = a.cd_id

Ein LEFT JOIN nimmt jeden Treffer der linken Tabelle und gibt wenn vorhanden die entsprechenden Ergebnisse der rechten Tabelle aus.

z.B.: Alle CDs aus der Sammlung auflisten und wenn verliehen die dazugehörigen Ausleiher:


SELECT titel, interpret, name FROM cdsammlung c LEFT JOIN ausgeliehen a ON c.id = a.cd_id LIMIT 0, 30

titel interpret name
master of the rings 4 Thomas
stone temple pilots 7 Thomas
Westernhagen 3 Hans
Matrix2 6 Hans
indiana 5 NULL
indiana2 5 NULL
Jar of Flies2 1 NULL
Yes2 8 NULL

Besonderheit:

NULL Werte

NULL ist ein nicht vorhandener Wert! Der benötigt wird wenn ich nach etwas such das irgendwo nicht vorhanden ist

 
 

MySQL> SELECT 1 IS NULL, 1 IS NOT NULL;
+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|         0 |             1 |
+-----------+---------------+

Die Felder in SQL Datenbanken können drei Werte enthalten: 0 (NULL), einen String oder eine Zahl, ein Datum oder auch NULL. Man spricht hier von Dreiwertigkeit.

Alle CDs anzeigen die ausgliehen sind
SELECT titel, interpret, name FROM cdsammlung c LEFT JOIN ausgeliehen a ON c.id = a.cd_id WHERE a.cd_id IS NOT NULL LIMIT 0, 30
titel interpret name
master of the rings 4 Thomas
stone temple pilots 7 Thomas
Westernhagen 3 Hans
Matrix2 6 Hans

(Gibt es dafür noch eine weitere Lösung?)

Man muß aber nicht zwei verschiedene Tabellen nutzen, um einen JOIN auszuführen.
Manchmal kann es auch sinnvoll sein, Einträge in einer Tabelle mit anderen Einträgen in derselben Tabelle miteinander zu vergleichen.
Das Schlüsselwort JOIN muß in diesem Beispiel auch nicht explizit angegeben werden.

 
SQL-Befehl :
SELECT * FROM cdsammlung c1, cdsammlung c2 WHERE c1.titel != c2.titel and c1.preis= c2.preis

titel interpret spiellaenge erscheinungsjahr kaufdatum preis Ort Inhalt titel interpret spiellaenge erscheinungsjahr kaufdatum preis Ort Inhalt
indiana 5 55:02 127 0000-00-00 22.50 Auto Booklet indiana 5 55:02 127 0000-00-00 22.50 Auto Booklet
indiana2 5 55:02 127 1995-05-22 22.50 Auto Booklet indiana2 5 55:02 127 1995-05-22 22.50 Auto Booklet
Pulp Fiction 6 NULL NULL NULL 34.45 Auto Booklet Pulp Fiction 6 NULL NULL NULL 34.45 Auto Booklet
Vom Winde verweht 6 NULL NULL NULL 34.45 Auto Booklet Vom Winde verweht 6 NULL NULL NULL 34.45 Auto Booklet

In dieser Abfrage werden zwei Aliase für den Tabellennamen angegeben, um es überhaupt zu ermöglichen, daß man sich mehrfach auf eine spezielle Spalte ein und derselben Tabelle beziehen kann. (Aliase: c1, c2)

 
Der Join im Detail Neue Befehle: ALTER SELECT (mit JOIN)

 
 
© 2001 by  tbee / Impressum last update at: 19.05. 2003 20:05:15
url: www.tbee.de/mysql/t3_tabellenverknuepfungen_join.php