Einführung in SQL: Mehrere Tabellen
Aus Wikibooks
Ein besonderes Merkmal von relationalen Datenbanken und damit von SQL ist, dass die Informationen fast immer über mehrere Tabellen verteilt sind und bei Abfragen in der Ergebnismenge zusammengeführt werden müssen. Dieses Kapitel gibt einen Überblick über die Möglichkeiten dazu.
Inhaltsverzeichnis |
[Bearbeiten] Schreibweisen bei mehreren Tabellen
Bitte beachten Sie bei allen Befehlen, die mehrere Tabellen verwenden (das sind zwangsläufig nur SELECT-Befehle):
- Wenn ein Spaltenname in Bezug auf den gesamten SQL-Befehl eindeutig ist, genügt dieser Name.
- Wenn ein Spaltenname mehrfach vorkommt (wie ID), dann muss der Tabellenname vorangesetzt werden; der Spaltenname wird nach einem Punkt angefügt.
SELECT Personalnummer AS MitNr, Name, Vorname, Dienstwagen.ID, Kennzeichen, Fahrzeugtyp_ID AS Typ FROM Mitarbeiter, Dienstwagen;
- Wegen der Übersichtlichkeit wird der Tabellenname in der Regel auch dann bei jeder Spalte angegeben, wenn es wegen der ersten Regel nicht erforderlich wäre.
SELECT Mitarbeiter.Personalnummer AS MitNr, Mitarbeiter.Name, Mitarbeiter.Vorname, Dienstwagen.ID AS DIW, Dienstwagen.Kennzeichen, Dienstwagen.Fahrzeugtyp_ID AS Typ FROM Mitarbeiter, Dienstwagen;
- Anstelle des Namens einer Tabelle kann überall auch ein Tabellen-Alias benutzt werden; dieser muss einmal hinter ihrem Namen (in der FROM- oder in der JOIN-Klausel) angegeben werden.
SELECT mi.Personalnummer AS MitNr, mi.Name, mi.Vorname, dw.ID AS DIW, dw.Kennzeichen, dw.Fahrzeugtyp_ID AS Typ FROM Mitarbeiter mi, Dienstwagen dw;
Alle diese Befehle, mit denen man "Alle Kombinationen" von Mitarbeitern und Dienstwagen erhält, sind gleichwertig. Zu empfehlen ist die vollständige Schreibweise mit Alias wie im letzten Beispiel.
Der Alias kann auch aus einem einzelnen Buchstaben bestehen und ist nur für den betreffenden SQL-Befehl gültig. Ein und dieselbe Tabelle kann mal als "a", dann als "mi" oder auch als "xyz" bezeichnet werden. Wegen des leichteren Verständnisses sind aussagefähige Kürzel sinnvoll; auch deshalb sind sie unter Tabellenstruktur der Beispieldatenbank angegeben.
[Bearbeiten] Verknüpfung über WHERE – der traditionelle Weg
Beim einfachsten Verfahren, mehrere Tabellen gleichzeitig abzufragen, werden in der FROM-Klausel alle Tabellen aufgeführt; die WHERE-Klausel enthält neben den Auswahlbedingungen auch Verknüpfungsbedingungen, wie die Tabellen zueinander gehören.
Einzelheiten werden in Einfache Tabellenverknüpfung behandelt.
[Bearbeiten] JOINs - der moderne Weg
Beim "modernen" Weg, mehrere Tabellen gleichzeitig abzufragen, wird jede verknüpfte Tabelle in einer JOIN-Klausel aufgeführt; der ON-Parameter enthält die Verknüpfungsbedingung. Die WHERE-Klausel enthält nur die Auswahlbedingungen.
Die Einführung dazu wird in Arbeiten mit JOIN besprochen.
[Bearbeiten] OUTER JOIN - auch null-Werte zurückgeben
Bei Abfragen mit einem "einfachen" JOIN wie im Kapitel Arbeiten mit JOIN werden nicht alle Datensätze aufgeführt. Zeilen, bei denen es in der einen oder anderen Tabelle keine Verknüpfung gibt, fehlen im Ergebnis.
Mit einem OUTER JOIN können auch solche "fehlenden" Zeilen aufgeführt werden.
Einzelheiten dazu werden in OUTER JOIN behandelt.
[Bearbeiten] Weitere Möglichkeiten von JOIN
Als SELF JOIN wird eine Tabelle mit sich selbst verknüpft.
Oft kommt es vor, dass man die Daten aus einer Tabelle erst bearbeiten möchte, bevor man sie mit einer anderen Tabelle verknüpft. Dazu gibt es die Möglichkeit einer "Inline-View".
Diese Ergänzungen werden in Mehr zu JOIN besprochen.
[Bearbeiten] Zusammenfassung
In diesem Kapitel erhielten wir Hinweise darauf, wie mehrere Tabellen veknüpft werden können:
- einfach über die FROM-Klausel und passende WHERE-Bedingungen
- übersichtlich über die JOIN-Klausel mit verschiedenen Varianten