SQL Join
Modellierungsspezialisten SQL Profis
Dann fragen wir mal ab! DRITTE NORMALFORM!
„Bei der Abfrage, können wir dann alles wieder zusammenfügen!“
Die Lösung: JOINS Mit Joins kann man zwei oder mehrere Tabellen verknüpfen
Willkommen im Versuchslabor Unser Ziel: Das Erforschen von JOINs
Erster Versuch Select Name, Straße, Hausnnummer, PLZ, email, Klassenbezeichnung, Zweig FROM Schüler, Klassen
Was passiert mit den Einträgen? Leider Nein! Jeder mit Jedem!
CROSS JOIN SELECT * FROM Tabelle1, Tabelle2
Was wir wollen: SELECT Name, Straße, Hausnummer, PLZ, Email, Klassenbezeichnung, Zweig FROM Klassen, Schüler WHERE Schüler.ID = Klassen.Zweig
INNER JOINS SELECT * FROM Tabelle1, Tabelle2 WHERE Tab1.id = Tab2.id FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.feld1 = Tabelle2.feld2
Kurzschreibweise für Tabellennamen SELECT * FROM Bestellungen as bes INNER JOIN Kunden as kun ON bes.KundenId = kun.ID WHERE bes.Preis > 40;
INNER JOIN SELECT * FROM Tabelle1 INNER JOIN Tabelle2 ON Tabelle1.feld1 = Tabelle2.feld2 Tabelle1 Ausgabe Tabelle2 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 2 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 4
LEFT JOIN SELECT * FROM Tabelle1 LEFT JOIN Tabelle2 ON Tabelle1.feld1 = Tabelle2.feld2 Tabelle1 Ausgabe Tabelle2 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 2 Datensatz 2 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 4
RIGHT JOIN SELECT * FROM Tabelle1 RIGHT JOIN Tabelle2 ON Tabelle1.feld1 = Tabelle2.feld2 Tabelle1 Ausgabe Tabelle2 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 2 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 4 Datensatz 4
Gibt es in ACCESS nicht! OUTER JOIN SELECT * FROM Tabelle1 OUTER JOIN Tabelle2 ON Tabelle1.feld1 = Tabelle2.feld2 Tabelle1 Ausgabe Tabelle2 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 1 Datensatz 2 Datensatz 2 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 3 Datensatz 4 Datensatz 4
Verschachtelung SELECT * FROM Tabelle1 INNER JOIN (Tabelle2 JOINs lassen sich beliebig oft verschachteln Tabelle1 Tabelle2 Tabelle3 Tabelle 4 Wert A Wert B Wert C Wert D Wert E Wert F Wert G SELECT * FROM Tabelle1 INNER JOIN (Tabelle2 INNER JOIN (Tabelle3 INNER JOIN (Tabelle4 […] ON Tabelle4.WertF = Tabelle3.WertE) ON Tabelle3.WertD = Tabelle2.WertC) ON Tabelle1.WertA = Tabelle2.WertB
Einschränkungen Zwei JOINs aus einer Tabelle sind schwierig. Wert C Wert A Wert B Wert D Zwei JOINs aus einer Tabelle sind schwierig. Entweder findet man einen Weg die Tabellen anders zu verknüpfen, oder man benutzt die Schreibweise mit WHERE.