tbee's page
   home  work  myself  mixed  guestbook  
   
      INHALT MySQL Join - Verknüpfung von Tabellen

Wer mir was gutes tun will kauft �ber diesen Link bei Amazon ein !

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)

 

Druckerversion     [valid html 4.01]      [english]
style: blauer Stylegelber Styleroter Stylegruener StyleStandard Style
© 2001 by  tbee / Impressum last update at: 01.01. 1970 01:01:00
url: www.tbee.de