 |
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 Partner | Schmalstrasse 10 | CD-Player | 4 |
| 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 Partner | Schmalstrasse 10 | | 2 | Holz-Industries | Bergweg 2 |
Tabelle 'Lieferungen' (verkürzt):
| Produkt | Anzahl | Kunden_Nummer | | CD-Player | 4 | 1 |
Was haben wir geändert?
- Wir haben zwei separate Tabellen erstellt
- Die Informationen haben wir über das Feld "Kunden-Nummer" miteinander in Verbindung gebracht.
- Dabei handelt es sich um eine Zahl, die für jeden Kunden eindeutig sein sollte (Primärschlüssel). Das muss zwar nicht sein, ist aber von Vorteil.
- Die meisten Datenbanksysteme ermöglichen es, solche Nummern automatisch zu vergeben. Das entsprechende Stichwort geht oft in Richtung "AUTO INCREMENT" o.Ä. Benutzen Sie dieses Feature! Es vereinfacht Vieles!
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!
|
 |
|
|
Sie wollen diese Seite ausdrucken? Dafür haben wir eine spezielle Druckversion ohne grafische Elemente entwickelt! |
|
|
Einführung in CSS bei HTMLWorld.
|
|