Platzhalter

 
Platzhalter PlatzhalterPlatzhalter

Mit SQL Tabellen kombinieren: JOIN-Anweisungen (Tutorial)

Platzhalter
 
  Startseite
  eBook-Projekt
  Web-Lexikon
  Bücher bestellen
   
  Design-Theorie
  Design-Praxis
  Promotion
  HTML/XML-Praxis
  Projekt-Management
  Webmaster-Praxis
  Fragen & Antworten
  Technik-Ecke
   
  Portal/Links
  Buch-Rezensionen
  Software
  Impressum
PlatzhalterPlatzhalter







 

Platzhalter 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?

  • 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!

Autor: Alexander Dilthey | Erstmalig veröffentlicht: 08.02.2004 | Einen Artikel schreiben?

 

Neue Artikel

Rezension: Entwurfsmuster von Kopf bis Fuß
Rezension: Webdesign mit CSS
AJAX - XML und JavaScript in Schönheit vereint?
Rich Email - Flash im Newsletter
Screen Reader Usability
Comment Spam und CAPTCHAs
Logfile-Analyse selbst gemacht - ein Perl-Beispiel

Partnerprogramm




Kommentar

Ist die Freiheit der Informationsgesellschaft in Gefahr?
Derzeit leben wir in einer relativ freien Welt. Doch sind derzeit Tendenzen erkennbar, die Freiheit des Individuums den Interessen der Großindustrie zu opfern. Ein Kommentar.

Druckversion
Sie wollen diese Seite ausdrucken? Dafür haben wir eine spezielle Druckversion ohne grafische Elemente entwickelt!



Einführung in CSS bei HTMLWorld.