Weiter Zurück [Inhalt] Online Suche im Handbuch

31.16 Verknüpfen von Tabellen

Welche weiteren Informationen brauchen wir ? Z.B Ereignisse, die mit Datum, Typ und Bemerkungen festgehalten werden. Darin könnte man z.B. Geburten von Nachkommen, Tierarztbesuche o.ä. festhalten. Nicht, daß wir nun eine komplette Datenbank für Tierärzte aufbauen möchten....man könnte sie aber dafür nehmen, wenn sie fertig ist.....Wir legen also ohne weitere Überlegungen eine neue Tabelle in der Datenbank an:

mysql> CREATE TABLE ereignis (name VARCHAR(20), datum DATE,
    -> typ VARCHAR(15), bemerkung VARCHAR(255));

Laden wir nun eine ASCII Tabelle ein:

Fluffy  1995-05-15      spitz   4 kittens, 3 weiblich, 1 männlich 
Buffy   1993-06-23      spitz   5 welpen, 2 weiblich, 3 männlich 
Buffy   1994-06-19      spitz   3 welpen, 3 weiblich,
Chirpy  1999-03-21      küken   gelb weiss 
Slim    1997-08-03      Küken   gebrochene rippe 
Bowser  1991-10-12      perser 
Fang    1991-10-12      perser  
Fang    1998-08-28              birthday  
Claws   1998-03-17              birthday  
Whistler1998-12-09              birthday  

Laden wir nun die ASCII Tabelle in die Datenbank ein:


mysql> LOAD DATA LOCAL INFILE "ereignis.txt" INTO TABLE ereignis;

Wir haben nun zwei Datenbanken. Beide möchten wir zusammen benutzen. Hier also einfach einmal ein Beispiel für eine Abfrage über zwei Tabellen hinweg:

mysql> SELECT tier.name, (TO_DAYS(date) - TO_DAYS(birth))/365 AS alter, bemerkung
    -> FROM tier, ereignis
    -> WHERE tier.name = ereignis.name AND type = "spitz";
+--------+------+-----------------------------------+
| name   | alter| bemerkung                         |
+--------+------+-----------------------------------+
| Fluffy | 2.27 | 4 kittens, 3 weiblich, 1 männlich |
| Buffy  | 4.12 | 5 welpen, 2 weiblich, 3 männlich  |
| Buffy  | 5.10 | 3 welpen, 3 weiblich              |
+--------+------+-----------------------------------+

Einige Dinge bedürfen noch der Erklärung:

Um Tabellen miteinander zu verknüpfen, benutzt man gewöhnlich den JOIN Befehl. Man muß aber nicht zwangsläufig 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:

mysql> SELECT p1.name, p1.geschlecht, p2.name, p2.geschlecht, p1.spezies
    -> FROM tier AS p1, tier AS p2
    -> WHERE p1.spezies = p2.spezies AND p1.geschlecht = "f" AND p2.geschlecht = "m";
+--------+-------------+--------+-------------+---------+
| name   | geschlecht  | name   | geschlecht  | spezies |
+--------+-------------+--------+-------------+---------+
| Fluffy | w           | Claws  | m           | cat     |
| Buffy  | w           | Fang   | m           | dog     |
| Buffy  | w           | Bowser | m           | dog     |
+--------+-------------+--------+-------------+---------+

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. Ohne die Aliase würde dies nicht funktionieren.


Weiter Zurück [Inhalt] Online Suche im Handbuch