UNION und kurze Einführung in äußere Verknüpfungen

Es kann Fälle geben bei denen es wünschenswert wäre das Resultat mehrerer Anfragen gemischt in einer Ergebnis-Liste zurückzubekommen. Dazu ist UNION gedacht. Gleich ein Beispiel bei dem alle KäuferID's sowie alle jene die einen Kaufwunsch geäußert haben ausgegeben werden:


\begin{code}
SELECT KÄUFERID
FROM ANTIQUITÄTEN
UNION
SELECT BESITZERID
FROM KAUFANWEISUNG;
\end{code}

Merke:die Anzahl und der Typ der Spalten der zwei Selects müssen genau übereinstimmen, weiterhin wird hier ein implicites DISTINCT angewandt, d.H. Duplikate werden vermieden.

Eine äußere Verknüpfungen wird benutzt wenn ein JOIN-Resultat mit Spalten zusammengeführt wird die nicht im ersten Resultat vorhanden waren. Speziell dieses ist nützlich wenn konstante Felder eingebunden werden. Schauen wir uns ein Beispiel an:


\begin{code}
SELECT BESITZERID, 'ist in beiden KAUFANWEISUNG und ANTIQUITÄTEN'...
...EN
WHERE KÄUFERID NOT IN
(SELECT BESITZERID
FROM KAUFANWEISUNG);
\end{code}

Die erste Anweisung führt eine Zusammenführung um eine Liste zu produzieren von den Besitzern die in beiden Tabellen auftauchen, wobei eine Zeichenkette angefügt wird. Die UNION-Anweisung führt diese Liste mit der nächsten Anfrage zusammen, welche alle die auflistet welche nur in Antiquitäten zu finden sind, wobei auch hier ein Text angefügt wird. Es gibt vielleicht eine einfachere Art diese Liste herzustellen, es ist allerdings schwierig den informellen angehängten Text zu generieren.

Dieses Konzept ist sinnvol in Situtationen in denen der primäre Schlüssel zu einem fremden Schlüssel in Verbindung gebracht wird, des aber keine Garantie dafür gibt, daß der fremd Schlüssel auch einen Wert zugewiesen bekommen hat (also den Wert NULL hat). Nehmen wir als Beispiel eine Tabelle in der als primärer Schlüssel Verkäufer eingetragen sind, in einer anderen Tabelle sind es Kunden, welche im gleichen Datensatz als fremden Schlüssel einen Verkäufer führen. Falls ein Verkäufer keinen Kunden hat, würde dessen Namen nicht in der Liste der Kunden auftauchen. Eine äußere Verknüpfung wird benutzt wenn alle Verkäufer aufgeführt werden sollen, zusammen mit deren Kunden, und dies ob der Verkäufer einen Kunden hat oder nicht.

Ein weiterer wichtiger Punkt bezüglich NULL in Bezug mit Verknüpfungen: die Reihenfolge der Tabellen in der FROM Klausel ist wichtig. Die Regel besagt, daß die zweite Tabelle der ersten angefügt wird. Die erste Spalte hat NULLen in der Spalte die der Verknüpfung unterliegt. Falls die zweite Tabelle dort auch NULLen hat wird dieser Datensatz von der zweiten Tabelle nicht Verknüpft und somit nicht mit den Daten aus der ersten Tabelle verknüpft. Dies ist ein weiterer Aspekt bei dem äußere Verknüpfungen vorgezogen werden.

Genug Anfragen? Dann gehen wir zu etwas anderem über...