Fachkonzept - Outer Join
Nicht für alle Benutzer sind auch Benutzerbilder gespeichert. Als Folge davon findet z.B. der Benutzer-Datensatz mit der PNR=1535 keinen Join-Partner in der Bildtabelle - er wird daher auch nicht angezeigt.
Bei einem Outer Join wird ein Datensatz auch
angezeigt, sofern er keinen Datensatz als Join-Partner findet. Die "fehlenden"
Attribute in der Ergebniszeile werden mit NULL
aufgefüllt.
Für SQL gibt es eine besondere Syntax, um einen solchen Outer Join anzugeben. Im Beispiel mit den Benutzerbildern sieht das so aus:
SELECT benutzer.Name, benutzer.Vorname, bild.Name
FROM benutzer LEFT OUTER JOIN bild ON benutzer.PNR = bild.PNR AND bild.Kategorie='Benutzerbild'
WHERE benutzer.Ort = 'Hermeskeil'
Beachte, dass die Join-Bedingung (und alle anderen Bedingungen auf der bild
-Tabelle)
direkt nach dem Schlüsselwort LEFT OUTER JOIN
notiert wird.
Im Beispiel wird jetzt die benutzer
-Tabelle komplett ausgegeben - auch wenn kein Join-Partner
in der bild
-Tabelle gefunden wird.
Anmerkung: Schreibe statt LEFT OUTER JOIN
einmal INNER JOIN
- dies ist eine
andere Möglichkeit einen "normalen" Join anzugeben.
Suche nach Partnern - ohne Join
Will man nur wissen, ob (oder ob nicht) ein Join-Partner vorhanden wäre, dann lässt sich dessen Existenz mit einem sog. Subselect ermitteln:
SELECT benutzer.Name, benutzer.Vorname
FROM benutzer
WHERE NOT EXISTS
( SELECT BildNr
FROM bild
WHERE bild.PNR = benutzer.PNR
AND bild.Kategorie='Benutzerbild'
)
AND benutzer.Ort = 'Hermeskeil'
Diese Subselects sind oft effizienter ausführbar als ein "echter" Join.