SELECT * FROM mitarbeiter CROSS JOIN orgeinheit; 18 x 7 = 126 Datensätze
SELECT *
FROM mitarbeiter CROSS JOIN orgeinheit
WHERE mitarbeiter.oeid=orgeinheit.oeid;
SELECT
orgeinheit.bezeichnung AS orgeinheit,
mitarbeiter.mid, mitarbeiter.name AS mitarbeiter, mitarbeiter.eintrittsdatum, mitarbeiter.gehalt
FROM mitarbeiter
INNER JOIN orgeinheit ON orgeinheit.oeid=mitarbeiter.oeid;
Abkürzung für Tabellennamen:
mitarbeiter m
orgeinheit oe
inner join kann abgekürzt werden zu join
SELECT
oe.bezeichnung AS orgeinheit,
m.mid, m.name AS mitarbeiter, m.eintrittsdatum, m.gehalt
FROM mitarbeiter m
JOIN orgeinheit oe ON oe.oeid=m.oeid;
Interaktiv ausführen
SELECT * FROM R JOIN S ON B=D;
SELECT p.titel, m.name
FROM projekt p
JOIN maproj mp ON mp.pid=p.pid
JOIN mitarbeiter m ON m.mid=mp.mid;
Andere Reihenfolge der Tabellen
gleiches Ergebnis
SELECT p.titel, m.name
FROM mitarbeiter m
JOIN maproj mp ON mp.mid=m.mid
JOIN projekt p ON p.pid=mp.pid;
Verbund beliebig vieler Tabellen möglich
SELECT
ober.bezeichnung AS obereinheit,
unter.bezeichnung AS untereinheit
FROM orgeinheit ober
JOIN orgeinheit unter ON unter.obereinheit=ober.oeid;
Zweifache Verwendung derselben Tabelle:
unterschiedliche Aliasnamen notwendig
SELECT
m.name AS mitarbeiter,
oe.bezeichnung AS leitet
FROM mitarbeiter m
JOIN orgeinheit oe ON oe.leitung=m.mid;
Wie ermittelt man alle Personen ohne Leitungsfunktion?
Geht mit dem Inner Join nicht
Lösung: Outer Join
SELECT * FROM R INNER JOIN S ON B=D;
SELECT * FROM R LEFT OUTER JOIN S ON B=D;
SELECT * FROM R RIGHT OUTER JOIN S ON B=D;
SELECT * FROM R FULL OUTER JOIN S ON B=D;
SELECT
m.name AS mitarbeiter,
oe.bezeichnung AS leitet
FROM mitarbeiter m
LEFT JOIN orgeinheit oe ON oe.leitung=m.mid;
Alle Personen ohne Leitungsfunktion:
Haben Nullwerte in Spalte leitet
SELECT
m.name AS mitarbeiter,
oe.bezeichnung AS leitet
FROM mitarbeiter m LEFT JOIN orgeinheit oe ON oe.leitung=m.mid
WHERE oe.oeid IS NULL;
Allgemeines Vorgehen:
Filtern nicht verbundener Datensätze über Nulls bei Outer Joins
SELECT name
FROM mitarbeiter
MINUS
SELECT name
FROM mitarbeiter
JOIN orgeinheit ON leitung=mid;
SELECT ...
SELECT ...
SELECT ...
Kostenansatz:
SELECT ...
SELECT ...