i

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.

Veranschaulichung des Outer Join mit den Ausgangstabellen und der Ergebnistabelle. Für alle Datensätze in benutzer, die keinen Partner in bild finden, werden für diese Attribute NULL-Werte ergänzt.

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.

Suche

v
3.2.7.2
dev.inf-schule.de/datenbanksysteme/gbuch/outerjoin/konzept_outerjoin
dev.inf-schule.de/3.2.7.2
dev.inf-schule.de/@/page/TW6ACJks17VFSkd0

Rückmeldung geben