Kleines Nachschlagewerk Informatik
Verbundabfragen
Worum geht es?
Bisher wurden Abfragen nur an eine Tabelle der Datenbank gerichtet. Richtig interessant wird es jedoch, wenn Daten aus mehreren Tabellen kombiniert werden. Man spricht von JOINs.
Struktur
Eine einfache Abfrage folgt der Struktur

      SELECT Spalte1, Spalte2, ... FROM Tabelle
            
Möchte man die Daten aus verschiedenen Tabellen einbeziehen, muss man dies auch bei SELECT angeben:

      SELECT Tabelle1.Spalte, Tabelle2.Spalte, ... FROM Tabelle1, Tabelle2
            
Wesentlich ist allerdings eine Bedingung, welche die Daten aus beiden Tabellen miteinander in Verbindung bringt, was z.B. ein Vergleich sein kann:

      SELECT  Tabelle1.Spalte, Tabelle2.Spalte, ... FROM Tabelle1, Tabelle2
          WHERE Tabelle1.Spalte = Tabelle2.Spalte
            
Durch einen JOIN entsteht also eine neue (virtuelle) Tabelle.

Beispiel: Bekannt ist die Relation Mitarbeiter mit Namen etc. Eine weitere Relation wurde zu einem Projekte angelegt. Die Projektleiter sind dort über ihre ID (Personalnummer) erfasst.

Mitarbeiter( ID , Vorname, Nachname, Gehalt)

Projekt( ID , LeiterID, Name)

Möchte man wissen, wer welches Projekt leitet, schreibt man:

      SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname, Projekte.Name
          FROM Mitarbeiter, Projekte
          WHERE Projekte.LeiterID = Mitarbeiter.ID
            
Gibt es Projektleiter, die zu wenig verdienen?

      SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname, Mitarbeiter.Gehalt
          FROM Mitarbeiter, Projekte
          WHERE Projekte.LeiterID = Mitarbeiter.ID and Mitarbeiter.Gehalt < 3000
            
Doppel-Join
Joins können auch mit mehr als zwei Tabellen erstellt werden.

Zusätzlich zu den Relationen Mitarbeiter und Projekte der vorherigen Box gibt es die Relation

Betrugsversuche( Vorfall-Nr , MitarbeiterID, Datum, Beschreibung)

Möchte man wissen, ob ein Mitarbeiter, der sich schon mal was zu Schulden hat kommen lassen, versehentlich als Projektleiter eingestellt wurde, schreibt man:

      SELECT Mitarbeiter.Nachname, Mitarbeiter.Vorname,
                  Betrugsversuche.Beschreibung
          FROM Mitarbeiter, Projekte, Betrugsversuche
          WHERE Projekte.LeiterID = Mitarbeiter.ID and
                      Projekte.LeiterID = Betrugsversuche.MitarbeiterID