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)
|