Mit SQL Tabellen kombinieren: JOIN-Anweisungen (Tutorial)

Gelesen bei AboutWebDesign.de
URL: http://www.aboutwebdesign.de/awd/content/1076260680.shtml

Der JOIN-Befehl wird im Rahmen von SQL-Datenbankabfragen dazu genutzt, Daten aus verschiedenen Tabellen miteinander zu kombinieren, also in Beziehung zueinander zu setzen. Diese Fähigkeit ist es übrigens, die den heutigen Datenbanksystemen das Attribut "relational" gegeben hat - aber das nur so nebenbei.

Folgender Artikel versteht sich also als eine kleine Einführung in den JOIN-Befehl von SQL. Schritt für Schritt, damit der Arbeitsablauf nachvollziehbar wird.

Schritt I: Die schlechte Tabelle


Der erste Versuch zur Organisation von Daten ist häufig nicht optimal. Besonderes Kennzeichen eines solchen Entwurfs: Daten werden redundant gespeichert. Soll heißen: es werden mehr Informationen gespeichert als nötig. Das erschwert die spätere Handhabung und bläht die Datenbankgröße auf.

Ein Beispiel für so eine Tabelle (dem Dunstkreis "Auftragsverwaltung" entnommen):



Kunde Strasse Produkt Anzahl
Meier und PartnerSchmalstrasse 10CD-Player4
Meier und Partner Schmalstrasse 10 Festplatten 2
Meier und Partner Schmalstrasse 10 RAM-Speicher 2
Holz-Industries Bergweg 2 Motorsägen 2


Schritt II: Die verbesserte Struktur


Sie sehen das Problem? Straße und Name der Firma, die etwas bestellt hat, werden mehrfach abgespeichert. Wenn sich die Adresse nun ändert, müssen Sie die Werte in allen Datensätzen ändern. Außerdem ist diese Lösung nicht elegant.

Die Lösung: Teilen Sie die Tabelle auf zwei separate Tabellen auf:

Tabelle 'Kunden':
Kunden_Nummer Name Strasse
1 Meier und PartnerSchmalstrasse 10
2 Holz-Industries Bergweg 2


Tabelle 'Lieferungen' (verkürzt):
Produkt Anzahl Kunden_Nummer
CD-Player 41


Was haben wir geändert?

Schritt III: Daten mit JOIN abfragen


Nun wollen wir die Daten abfragen, und zwar innerhalb ihres logischen Zusammenhangs: d.h., wir wollen zu den Lieferungen wissen, an wen wir geliefert haben.

Ein entsprechender SQL-Befehl wäre z.B.:
SELECT Kunden.Name, Kunden.Strasse, Lieferungen.Produkt, Lieferungen.Anzahl FROM Lieferungen INNER JOIN Kunden ON (Lieferungen.Kunden-Nummer = Kunden.Kunden_Nummer);

Es ist empfehlenswert, den Feldnamen den Tabellen-Namen voranzustellen - dadurch steigt die Übersicht und Fehlerquellen werden minimiert. Sie müssen das aber nicht - der SQL-Standard schreibt es nicht vor.

Verschiedene Typen von JOIN


Hier haben wir einen INNER JOIN verwendet: es werden nur solche Datensätze zurückgegeben, auf die die mit dem Schlüsselwort ON formulierte Bedingung zutrifft.

Sie könnten aber z.B. auch einen LEFT OUTER JOIN verwenden. Dabei würden dann auch Lieferungs-Datensätze zurückgegeben, denen keine Kunden-Nummer zugeordnet ist (Tipp zum Verständnis: 'Lieferungen' stehen links vom 'JOIN'). Beispiel:

SELECT Kunden.Name, Kunden.Strasse, Lieferungen.Produkt, Lieferungen.Anzahl FROM Lieferungen LEFT OUTER JOIN Kunden ON (Lieferungen.Kunden-Nummer = Kunden.Kunden_Nummer);

Genauso gibt es einen RIGHT OUTER JOIN: dabei würden dann auch Kunden-Datensätze geliefert, zu denen keine Lieferung existiert.

Wichtiger Hinweis: die genauen Schlüsselwörter und Syntax-Optionen unterscheiden sich von Datenbank-System zu Datenbank-System. Konsultieren Sie daher die Dokumentation Ihres Systems, wenn unsere Beispiel-Codes nicht funktionieren - eine Suche nach dem Schlüsselwort "JOIN" führt meist zu den gewünschten Resultaten.

Schritt IV: Abfragen mit WHERE eingrenzen


Natürlich ist es möglich, JOIN-Abfragen mit WHERE zusätzlich einzugrenzen. Beispiel:
SELECT Kunden.Name, Kunden.Strasse, Lieferungen.Produkt, Lieferungen.Anzahl FROM Lieferungen INNER JOIN Kunden ON (Lieferungen.Kunden-Nummer = Kunden.Kunden_Nummer) WHERE Lieferungen.Produkt = "CD-Player";

Fazit


JOIN-Befehle halten den Code übersichtlich und die Daten kohärent und relational. Setzen Sie sie ein, wann immer es möglich ist!