Top Up Home HTML2PDF SQL - Verbund

Informationen aus mehreren Tabellen - Berichte

Kartesisches Produkt

Kartesisches Produkt auf Tabellen

SELECT * FROM mitarbeiter CROSS JOIN orgeinheit; 18 x 7 = 126 Datensätze

Filterung auf kartesischem Produkt

SELECT *
FROM mitarbeiter CROSS JOIN orgeinheit
WHERE mitarbeiter.oeid=orgeinheit.oeid;

Verbund (Inner Join)

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;

Effekte des Verbunds

Interaktiv ausführen

SELECT * FROM R JOIN S ON B=D;

Verbund von 3 Tabellen

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

Reflexiver Verbund

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

Leitung und Nicht-Leitung

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

Äußerer Verbund (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;

Leitung und Nicht-Leitung - Outer Join

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

Leitung und Nicht-Leitung - Filterung nach Nullwerten

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

Leitung und Nicht-Leitung - Mengenoperationen

SELECT name
FROM mitarbeiter
MINUS
SELECT name
FROM mitarbeiter
     JOIN orgeinheit ON leitung=mid;

Verbund Playlist, Stueck

SELECT ...

Verbund Playlist, Genre, Stueck

SELECT ...

Genre ohne Stücke

SELECT ...

Projektkosten pro Mitarbeiter

Kostenansatz:

  • 40 Stunden pro Woche
  • Projekt dauert genau ein Jahr
  • Nur Arbeitskosten, keine Materialkosten
  • Nur Gehalt betrachten, nicht Bonus
SELECT ...

Wer verdient mehr als sein/ihr Boss

SELECT ...