zurück weiter

Datenbanken -
Abfragen mehrerer Tabellen

G.Eichelsdörfer - Staatliche Technikerschule Weilburg

Gleichzeites Abfragen mehrerer Tabellen

Die letzte Anwendung erforderte mehrere Abfragen nacheinander in verschiedenen Tabellen. Dazu wurden Fremdschlüssel als Referenzen zu anderen Tabellen verwendet. Dies war erforderlich, weil wir ausschließlich Abfragen in jeweils einer Tabelle an das DBMS senden konnten. Diese Vorgehensweise kann vereinfacht werden, wenn in einer Abfrage auf mehrere Tabellen zugegriffen wird. Dazu sind die Kenntnisse von "qualifizierten Bezeichnern" erforderlich und von "Aliasnamen" hilfreich.

Qualifizierte Bezeichner

Mit qualifizierten Bezeichnern können die Lokalitäten von Tabellen und Spalten absolut angegeben werden. Eine Spalte gehört zu einer Tabelle und eine Tabelle zu einer Datenbank. Um eine Spalte (Attribut) absolut und genau anzugeben, sind die Nennungen der Datenbank und der Tabelle erforderlich. Hierzu wird die vielfach gebräuchliche Punktnotation verwendet.
Form: Datenbank.Tabelle.Spalte

Beispiel für qualifizierte Bezeichner:
Um die Attributwerte der Spalte "Titel" in der Tabelle "Buch" der Datenbank "Buchverleih" abzufragen, kann folgende SQL-Anweisung gesendet werden:
SELECT Buchverleih.Buch.Titel FROM Buchverleih.Buch
Wenn die Datenbank "Buchverleih" bereits ausgewählt ist genügt auch
SELECT Buch.Titel FROM Buch
Darin sind "Buchverleih.Buch", "Buchverleih.Buch.Titel" und "Buch.Titel" qualifizierte Bezeichner. Die vollständig qualifizierten Bezeichner "Buchverleih.Buch" und "Buchverleih.Buch.Titel" sind für Datenbank übergreifende Abfragen erforderlich oder zumindest hilfreich. Der teilweise qualifizierte Bezeichner "Buch.Titel" ist auch dann aus der zugehörigen Datenbank heraus erforderlich, wenn mehrere Tabellen mit einer SQL-Anweisung abgefragt werden sollen.

Mehrere Tabellen in einer Abfrage

Um in einer Abfrage mehrere Tabellen und Spalten unterzubringen ist jede Spalte qualifiziert zu bezeichnen.
Form: SELECT Tabelle1.Spalte1,Tabelle1.Spalte2,Tabelle2.Spalte1 ... FROM Tabelle1,Tabelle2 ... WHERE ...

Beispiel für gleichzeitiges Abfragen mehrerer Tabellen:

In der Datenbank "Buchverleih" sollen alle Bücher in der folgenden Form aufgelistet werden:
Autorname Buchtitel Verlagsname

Die gewünschten Daten liegen in den Tabellen "Buch", "Autor" und "Verlag". Um diese Daten mit einer einzigen SQL-Anweisung zu holen, kann die folgende SQL-Anweisung verwendet werden:
SELECT Autor.Name,Buch.Titel,Verlag.Name FROM Autor,Buch,Verlag
WHERE (Buch.AutorNr=Autor.Id) AND (Buch.VerlagNr=Verlag.Id)

Der MySQL-Monitor liefert beispielsweise die folgende Ausgabe:

Schenk     C++ Programmieren mit einfachen Beispielen     Springer-Verlag
Buchholz   Die C++ Standardbibliothek                     Wesel-Verlag
Lustig     Loewenzahn                                     Broesel-Verlach
Liebmann   Lichtschranken                                 Stam-Verlag
Buchholz   Kochbuch                                       Wesel-Verlag

In der obigen SQL-Anweisung sind die gewünschten Spalten eindeutig durch ihre qualifizierten Bezeichner identifiziert. Die Reihenfolge der Ausgabe wird durch die Reihenfolge der Spalten in der Spaltenliste zwischen SELECT und FROM festgelegt. Die Reihenfolge der Tabellen hinter FROM kann hier nach Belieben geändert werden. Mit Aliasnamen kann die SQL-Anweisung etwas kürzer notiert werden.

Aliasnamen

Aliasnamen werden hinter den tatsächlichen Tabellennamen definiert. Sie dienen entweder einer kürzeren Schreibweise oder zur Steigerung der Verständlichkeit einer SQL-Anweisung.

Definition eines Aliasnamens: ... Tabellenname Aliasname ...
Nach der Definition kann ein Aliasname ebenso verwendet werden wie dessen Original-Tabellenname.

Zum obigen SQL-Beispiel - Aliasnamen sind hier a,b und v:
SELECT a.Name,b.Titel,v.Name FROM Autor a,Buch b,Verlag v
WHERE (b.AutorNr=a.Id) AND (b.VerlagNr=v.Id)

Auftrag

Vereinfachen Sie die letzte Anwendung durch gleichzeitiges Abfragen mehrerer Tabellen!
Sie sollten auch einmal Aliasnamen verwenden!