Anfragen über mehrere Tabellen, Joins |
Verknüpfung von Tabellen - Join | Bedeutung der WHERE-Klausel | Self-Join | Übungen |
Relationale Datenbanken bestehen in der Regel aus sehr vielen Tabellen. Oft werden bei einer SQL-Anfrage Daten gewünscht, die aus verschiedenen Tabellen stammen. Dazu müssen die Tabellen verknüpft werden. Solche Verknüpfungen nennt man Joins.
Gewünscht ist eine Liste mit den Klassenleitern und der jeweiligen Klasse. Die Tabelle Lehrkraft liefert zwar den Namen der in Frage kommenden Personen, aber keine Information über die Klassenleitung. In der Tabelle Klasse findet man zwar die Personalnummer, nicht aber den Namen des jeweiligen Klassenleiters.
|
Die Verknüpfung der Tabellen erfolgt durch Angabe der beteiligten Tabellen in der FROM - Klausel. Häufig haben Attribute, die aus verschiedenen Tabellen stammen, identische Namen. Wird ein solches Attribut in der SQL-Anfrage verwendet, muss zusätzlich noch der Tabellenname angegeben werden. Man schreibt: Tabellenname.Attributname.
Der Attributname Name ist zweideutig. Er beschreibt einerseits die Lehrernamen, andererseits die Klasse. In unserem Bespiel muss der Name der Klasse mit Klasse.Name und der Name der Lehrkraft mit Lehrkraft.Name angesprochen werden. |
Bemerkung |
Ist der Spaltenname eindeutig, kann auf das Voranstellen des Tabellennamen verzichtet werden. |
Folgende Query zeigt das Prinzip. Die Bedeutung der WHERE - Klausel wird nachfolgend genauer erklärt.
Gewünscht ist eine Liste der Klassenleiter mit den jeweiligen Klassen.
|
Innerhalb der FROM - Klausel ist eine Umbenennung der Tabellennamen möglich. Dazu stellt SQL das Schlüsselwort AS zur Verfügung, das aber nicht unbedingt verwendet werden muss. Damit ist beispielsweise folgende Formulierung der obigen Anfrage möglich:
SELECT l.Name, k.Name
FROM Lehrkraft AS l, Klasse AS k WHERE l.PersNr = k.Klassenleitung ; |
SELECT l.Name, k.Name
FROM Lehrkraft l, Klasse k WHERE l.PersNr = k.Klassenleitung ; |
WHERE PersNr = Klassenleitung
|
Innerhalb der FROM - Klausel ist eine Umbenennung der Tabellennamen möglich. Dazu stellt SQL das Schlüsselwort AS zur Verfügung, das aber nicht unbedingt verwendet werden muss. Damit ist beispielsweise folgende Formulierung der obigen Anfrage möglich:
SELECT p.Name, d.RaumNr
FROM Professor AS p, Dienstzimmer AS d WHERE p.PersNr = d.PersNr ; |
SELECT p.Name, d.Raumnr
FROM professor p, Dienstzimmer d WHERE p.PersNr = d.PersNr ; |
SELECT Name, RaumNr
|
Bemerkung |
|
Das Weglassen der WHERE - Klausel in obigem Beispiel führt zu nachfolgendem Ergebnis:
|
Mit Hilfe der WHERE - Klausel können Gleichheitsbedingungen angegeben werden, die unsinnige bzw. nicht aussagekräfte Kombinationen ausschließen.
Manchmal wird eine Tabelle mit sich selbst verknüpft. Dieser spezielle Join heißt Self-Join.
Welche Lehrkräfte (Angabe der PersNr) haben die Lehrbefähigung für mehr als ein Fach?
|
Welche Fächer dürfen die einzelnen Lehrkräfte unterrichten? Gewünscht ist die Ausgabe der Namen von Lehrkraft und Fach.
|
Welche Lehrerin bzw. welcher Lehrer (Angabe des Namens) ist Fachbetreuer in Deutsch?
|
Gesucht sind die Namen der Lehrkräfte, die die Schülerin Falbala unterrichten?
|
Gibt es Lehrkräfte (Angabe der PersNr), die mehr als ein Fach in derselben Klasse unterrichten?
|