DQL - Join
Last updated
Was this helpful?
Last updated
Was this helpful?
Verknüpfung von zwei Tabellen kann, muss aber nicht über die Primär-/Fremdschlüssel-Beziehung erfolgen. Die meisten Joins sind EQUI JOINS. Darin werden zwei Tabellen über übereinstimmende Spalten verknüpft. Als Join-Operator wird ein = verwendet. Beispiel: Rechnungs- und Kundentabelle werden über die Kundennummer, die in beiden Tabellen enthalten ist, verknüpft.
Die seltene Sonderform eines Joins ist der NONEQUI JOIN. Bei Nonequi Joins gibt es keine direkt aufeinander referenzierenden Spalten. Als Join-Operator wird kein = verwendet, sondern meist kommt ein BETWEEN … AND … zum Einsatz.
Hier kannst du direkt im Browser SQL Statements ausprobieren. Probiere die Beispiele hier mit einem ⚡️-Symbol aus.
Angenommen, du hast die folgenden zwei Tabellen, welche je eine Spalte haben:
Beachte, dass die Einträge 1 und 2 nur bei A, 5 und 6 nur bei B vorhanden sind. 3 und 4 gibt es bei beiden. Folgende Tabelle erklärt, wie die Ausgabe aussehen würde, wenn diese zwei Tabellen mit den verschiedenen JOIN Arten verknüpft werden:
JOIN-Art
Bild
Resultierende Tabelle
INNER JOIN
a | b
-----+-----
3 | 3
4 | 4
LEFT OUTER JOIN
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
RIGHT OUTER JOIN
a | b
-----+-----
3 | 3
4 | 4
null | 5
null | 6
FULL OUTER JOIN
a | b
-----+-----
1 | null
2 | null
3 | 3
4 | 4
null | 6
null | 5
JOIN
-Bedingung in eigener Klausel
WHERE
-Klausel wird reingehalten
JOIN
-Typ widerspiegelt sich in JOIN-Ausdruck
Erstelle ein SQL-Statement, welches mittels INNER JOIN
die Tabellen Orders
und Customers
über die CustomerID
verknüpft. Gib dabei mindestens OrderID
, CustomerName
und OrderDate
aus.
Gib Produktname, Preis und den Namen des Herstellers aus von allen Produkten, die teurer als 100$ sind.
Es ist auch möglich, zwei Tabellen über eine einfache WHERE-Klausel zu verbinden. Dies ist aber weniger performant. Es wird vor allem bei ORACLE eingesetzt, da vor Version 9i nur diese Möglichkeit bestand.
Weitere Bedingungen werden mit AND ergänzt Tabellennamen müssen bei Namensgleichheit von Spalten angegeben werden. Tabellennamen sollten vor allen Spaltennamen stehen.
Löse die Aufgaben aus INNER JOIN mittels eines einfachen JOIN über WHERE-Klausel.
Wie du in den letzten zwei Beispielen sicher bemerkt hast, muss man so ziemlich viel schreiben. Um das etwas abzukürzen, kann man den Tabellen einen Alias geben, welcher dann in dieser Abfrage verwendet werden kann.
Dadurch kann man einfacher und schneller SQL-Statements schreiben, die übersichtlicher sind und dabei passieren auch noch weniger Schreibfehler.
Passe die vorigen ⚡️Ausprobieren Beispiele an und verwende Tabellen-Aliasse.
Syntaxmässig sind OUTER JOINs gleich wie INNER JOINs. Einfach, dass Statt INNER
da LEFT OUTER
, RIGHT OUTER
oder FULL OUTER
steht.
Passe die vorigen ⚡️Ausprobieren Beispiele an und verwende die verschiedenen OUTER JOIN
-Arten.
Liste alle Angestellten (Vorname und Nachname) auf und dazu die Namen aller Kunden, für welche die Angestellten schon einmal eine Bestellung bearbeitet haben.
CROSS JOIN
Beim CROSS JOIN
handelt es sich um ein Kreuzprodukt (kartesisches Produkt)
Es werden alle möglichen Kombinationen gebildet (jeder mit jedem)
In der Regel ungewollt!
Wird z.B. zum Generieren von Testdaten verwendet
SELF JOIN
(rekursiver JOIN
)
JOIN
einer Tabelle mit sich selbst
Dient zur Abbildung von Hierarchien
Dieselbe Tabelle zweimal mit unterschiedlichem Alias verwenden
Zeige mittels rekursivem JOIN
alle Mitarbeitenden der Northwind-Datenbank an (ID, Vorname, Nachname) und zu jedem den Namen des Vorgesetzten (ReportsTo)
Finde den CEO (die Person, welche keinen weiteren Vorgesetzten hat).
Überlege dir eine Aufgabe für eine Abfrage in der Northwind Datenbank.
Gebe die Aufgabe (noch ungelöst) morgen deinem Instruktor ab.
Die Aufgaben werden dann willkürlich zum lösen an die Klasse verteilt.
Öffne diese Beispiel-Datenbank in einem neuen Fenster: