Benutzer-Werkzeuge

Webseiten-Werkzeuge


neuerlehrplan:klasse09:mehreretabellen

Dies ist eine alte Version des Dokuments!


Anfragen über mehrere Tabellen - Verbund

Eine Anfrage über mehrere SQL-Tabellen nennt man Verbund oder Join. Ausführlich wird das Thema in der Sekundarstufe II behandelt. Hier soll nur ein kleiner Einblick gegeben. Zur Einführung nehme ich diesmal nicht Instahub, weil das zu unübersichtlich werden würde.

Wir betrachten eine kleine Datenbank Geo, die aus den folgenden beiden Tabellen bestehen soll:

Tabelle Stadt

Name Einwohnerzahl Fläche Staat
Berlin 3,769 Mio 891,8 km² Deutschland
Hamburg 1,845 Mio 755,2 km² Deutschland
London 8,982 Mio 1572 km² Großbritannien
Paris 2,176 Mio 105,34 km² Frankreich

Tabelle Staaten

Staat Sprache
Deutschland Deutsch
Großbritanien Englisch
Frankreich Französisch

Das Attribut Staat, welches in der Tabelle Staaten Primärschlüssel ist, ist in der Tabelle Stadt Fremdschlüssel, es verbindet also die Tabellen. (Die zweite Tabelle ist bewusst klein gehalten, dass der Umfang der Seite gesprengt wird.)

Wenn man die folgende Abfrage durchführt

SELECT *
FROM Stadt, Staaten;

erhält man die folgende Tabelle

Name Einwohnerzahl Fläche Staat Staat Sprache
Berlin 3,769 Mio 891,8 km² Deutschland Deutschland Deutsch
Hamburg 1,845 Mio 755,2 km² Deutschland Deutschland Deutsch
London 8,982 Mio 1572 km² Großbritannien Deutschland Deutsch
Paris 2,176 Mio 105,34 km² Frankreich Großbritanien Englisch
Berlin 3,769 Mio 891,8 km² Deutschland Großbritanien Englisch
Hamburg 1,845 Mio 755,2 km² Deutschland Großbritanien Englisch
London 8,982 Mio 1572 km² Großbritannien Großbritanien Englisch
Paris 2,176 Mio 105,34 km² Frankreich Frankreich Französisch
Berlin 3,769 Mio 891,8 km² Deutschland Frankreich Französisch
Hamburg 1,845 Mio 755,2 km² Deutschland Frankreich Französisch
London 8,982 Mio 1572 km² Großbritannien Frankreich Französisch
Paris 2,176 Mio 105,34 km² Frankreich Deutschland Deutsch

Es wird also jede Zeile der ersten Tabelle mit jeder Zeile der zweiten Tabelle kombiniert. Uns interessieren aber nur die Zeilen, in der die Eigenschaft Staat der einen Tabelle mit der Eigenschaft Staat der zweiten Tabelle übereinstimmt. Da die Spalte Staat in beiden Tabellen auftritt, muss im SQL-Befehl der Spaltenname mit dem Tabellenname verknüpft werden:

SELECT *
FROM Stadt, Staaten
WHERE Stadt.Staat = Staaten.Staat;

Die Abfrage ergibt:

Name Einwohnerzahl Fläche Staat Staat Sprache
Berlin 3,769 Mio 891,8 km² Deutschland Deutschland Deutsch
Hamburg 1,845 Mio 755,2 km² Deutschland Deutschland Deutsch
London 8,982 Mio 1572 km² Großbritannien Großbritanien Englisch
Paris 2,176 Mio 105,34 km² Frankreich Frankreich Französisch

Eine solche Abfrage nennt man Verbund oder Join. Man kann sie auch wie folgt formulieren:

SELECT *
FROM Stadt JOIN Staaten
ON Stadt.Staat = Staaten.Staat;

Auf das Ergebnis des Verbunds lassen sich dann wiederum Projektion und Selektion anwenden.

Hier ist Geo als LibreOffice-Datenbank, mit der du das Ergebnis testen kannst:

Übertragen wir nun das Ganze auf die Instahub-Datenbank. Dazu betrachten wir die Tabellen users und photos:

$\text{users(} \underline{\text{id}}\text{, username, email, password, name, bio, gender, birthday, city, country, centimeters, avatar, role, is\_active, remember\_token, created\_at, updated\_at)}$

neuerlehrplan/klasse09/mehreretabellen.1731666707.txt.gz · Zuletzt geändert: 2024/11/15 11:31 von lutz