Möglichkeiten von Aliasnamen und Join-Klausel

Durch den Prozess der Normalisierung werden sachlich zusammengehörige Informationen in verschiedene Tabellen zerlegt. Um diese verteilten Informationen wieder zu verbinden, ist eine Abfrage erforderlich, die gleichzeitig auf mehrere Tabellen zugreift. Ein Verbund (Join) bildet aus den Zeilen verschiedener Tabellen neue, zusammengehörige Zeilen, in denen die gewünschte Information wieder zusammengeführt bzw. verknüpft ist.

Es gibt hierfür zwei Möglichkeiten:

1. Tabellenalias

Bei einem Zugriff auf mehrere Tabellen können gleiche Spaltennamen in verschiedenen Tabellen auftreten. Zur eindeutigen Adressierung einer Spalte ist dann neben dem Spaltennamen ein Bezug auf die gewünschte Tabelle erforderlich. Hierfür kann in der FROM-Klausel ein Tabellen-Alias angegeben werden:

Beispiel

Die ISBN-Nummern, die reserviert wurden, werden mit Mitgliedsnummern und Mitgliedern, die reserviert haben, angezeigt.

SELECT Res.ISBN, Res.Mitglieds_Nr, Mit.Nachname 
FROM Reservierung AS Res, Mitglieder AS Mit 
WHERE Res.Mitglieds_Nr = Mit.Mitglieds_Nr

Wird kein Aliasname ausdrücklich für eine Tabelle vereinbart, ist der Tabellen­name standardmäßig der Aliasname. Auf einen Aliasnamen kann nur dann verzichtet werden, wenn ein benutzter Spaltenname nur in einer der verwendeten Tabellen auftritt.

SELECT Mitglieder.Nachname, Reservierung.ISBN FROM Mitglieder, 
Reservierung ORDER BY Reservierung.ISBN

Aus Gründen der Übersichtlichkeit ist die Verwendung eines Aliasnamens auch in diesen Fällen empfehlenswert.

2. JOIN-Klausel

SELECT wähle
Feldliste Feldnamen (durch Kommata getrennt)
FROM der Tabelle
Tabelle Tabellenname (mehrere durch Komma getrennt)
INNER |
LEFT |
RIGHT
nur verknüpfte Datensätze - oder
alle Datensätze der linken Tabelle - oder
alle Datensätze der rechten Tabelle mit
JOIN Verbindung zur
Tabelle Tabellenname
ON mit der Bedingung
Tabelle Bedingung, die das Kriterium für die Verbindung der Tabellen enthält

Beispiele

Alle Mitglieder und Mitgliedsnummern, die reserviert haben, werden mit entsprechender ISBN-Nummer angezeigt.

SELECT Mitglieder.Mitglieds_Nr, Nachname, ISBN 
FROM Mitglieder INNER JOIN Reservierung 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr

Alle Mitglieder werden mit Mitgliedsnummern angezeigt, falls Reservierungen vorliegen, werden ISBN-Nummern angezeigt.

SELECT Mitglieder.Mitglieds_Nr, Nachname, ISBN 
FROM Mitglieder LEFT JOIN Reservierung 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr

Innerer und äußerer Verbund

Cross Join (kartesisches Produkt)

Jede Zeile der einen Tabelle wird mit allen Zeilen der anderen Tabelle verbun­den. Das folgende Beispiel zeigt das Prinzip, wenn es auch inhaltlich wenig sinnvoll ist:

Beispiel

Alle Mitgliedsnummern und Mitglieder, die reserviert haben, werden mit allen ISBN-Nummern angezeigt.

SELECT Mitglieder.Mitglieds_Nr, Mitglieder.Nachname, Exemplar.ISBN 
FROM Mitglieder, Exemplar

So lassen sich alle möglichen Kombinationen aus mehreren Tabellen abfragen:

SELECT MealName, DrinkName FROM Meals, Drinks

Veranschaulichung eines Cross Join
Veranschaulichung eines Cross Join   (02.05.2024)

Condition Join

Bei diesem Verbund steuert ein Vergleich von Spalteninhalten der einen Tabelle mit Spalteninhalten der zweiten Tabelle die auszuwählenden Zeilen. Die zu vergleichenden Spalten und der verwendete Vergleichsoperator sind dabei beliebig (gleich, kleiner, größer, ungleich usw.). Oft wird auf Gleichheit von Spalteninhalten geprüft (Equi-Join).

Beispiele

Die ISBN-Nummern, die reserviert wurden, werden mit Mitgliedsnummern und Mitgliedern, die reserviert haben, angezeigt.

SELECT Res.ISBN, Res.Mitglieds_Nr, Mit.Nachname 
FROM Reservierung AS Res, Mitglieder AS Mit 
WHERE Res.Mitglieds_Nr = Mit.Mitglieds_Nr
SELECT ISBN, Reservierung.Mitglieds_Nr, Nachname 
FROM Reservierung INNER JOIN Mitglieder 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr

zu SQL-Beispiel 1: Die Auswahl der Zeilen kann man sich so vorstellen: Zunächst wird das kar­tesische Produkt aus den Tabellen Reservierung und Mitglieder gebildet. Es enthält alle möglichen Zeilenkombinationen von Reservierung und Mitglieder. Aus diesem Zwischenergebnis werden nun die Zeilen ausgesucht, in denen Reservierung.Mitglieds_Nr und Mitglieder.Mitglieds_Nr identisch sind (Selektion). Von den verbleibenden Zeilen werden die Spalten Reservierung.ISBN, Reservierung.Mitglieds_Nr und Mitglieder.Nachname ausgewählt (Projektion) und angezeigt.

zu SQL-Beispiel 2: Der Vorteil ist, hier wird kein kartesisches Produkt gebildet. Die Bedingung wird bei der Verknüpfung schon beachtet. Daher ergibt sich ein großer Performance-Gewinn bei großen Tabellen.

Äußere Verbund (Outer Join)

Die Ergebnistabelle des Equi-Join oben zeigt: Zeilen in den Ausgangstabel­len, die die Gleichheitsbedingung nicht erfüllen, werden ignoriert. Mitglieder die nicht reserviert haben erscheinen auch nicht in der Ergebnista­belle. Ein Outer Join übernimmt auch solche Zeilen mit in die Ergebnistabelle. Drei Varianten sind möglich:

Left Outer Join

Bei einem Left Outer Join werden alle Zeilen der ersten (linken) Tabelle mit in die Ergebnistabelle übernommen.

Beispiel

Alle Mitglieder werden mit Mitgliedsnummern angezeigt, falls Reservierungen vorliegen, werden ISBN-Nummern angezeigt.

SELECT Mitglieder.Mitglieds_Nr, Nachname, ISBN 
FROM Mitglieder LEFT JOIN Reservierung 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr

Right Outer Join

Bei einem Right Outer Join werden alle Zeilen der zweiten (rechten) Tabelle mit in die Ergebnistabelle übernommen.

Beispiel

Alle Mitgliedsnummern und Nachnamen werden angezeigt, falls Reservierungen vorliegen, werden die ISBN-Nummern aufgeführt.

SELECT ISBN, Mitglieder.Mitglieds_Nr, Nachname 
FROM Reservierung RIGHT JOIN Mitglieder 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr

Full Outer Join

Ein Full Outer Join übernimmt die Zeilen der linken und auch der rechten Tabelle ohne jeweilige Entsprechung mit in die Ergebnistabelle.

Beispiel

Alle Mitgliedsnummern, Nachnamen und ISBN-Nummern werden aufgeführt.

SELECT ISBN, Mitglieder.Mitglieds_Nr, Nachname 
FROM Reservierung FULL OUTER JOIN Mitglieder 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr

Mehr als zwei Basistabellen

Die Ausführungen zum Verbund können auf mehr als zwei Basistabellen über­tragen werden.

Beispiel

Alle ISBN-Nummern nicht arabisch-sprachiger Bücher werden angezeigt, falls Reservierungen vorliegen, werden entsprechende Mitgliedsnummern, Mitglieder und Sprache angezeigt.

SELECT Reservierung.ISBN, Mitglieder.Mitglieds_Nr, Nachname, Sprache 
FROM Reservierung LEFT JOIN Mitglieder 
ON Reservierung.Mitglieds_Nr = Mitglieder.Mitglieds_Nr
INNER JOIN Buch
ON Sprache = "arabic"

Last modified: Thursday, 2 May 2024, 11:06 AM