Databases Reference
In-Depth Information
GNR
----------
1
2
3
Da jeder Eintrag mit jedem kombiniert wird, kann die Teilbe-
dingung T1.Tname < T2.Tname nicht weggelassen werden.
Im berechneten Kreuzprodukt wird jede Zeile auch mit sich
selbst kombiniert, so dass ohne die Teilbedingung eine Zeile
mit den Einträgen (1, Laber) und (1, Laber) auch zu einer Aus-
gabe geführt hätte, ohne dass ein zweiter Eintrag für die
Gehegenummer 1 existiert.
Bei der Auswertung der SQL-Anfrage wird das Kreuzprodukt
der beteiligten Tabellen berechnet. Ist jetzt eine der Tabellen
leer, so hat dies den Effekt, dass auch das gesamte Kreuzpro-
dukt leer ist, da es keine Kombinationsmöglichkeiten mit dieser
Tabelle gibt. Daraus folgt unmittelbar, dass es auch keine Er-
gebniszeilen geben kann. Dieser eigentlich logische Zusam-
menhang hat aber für die Praxis und für theoretische Betrach-
tungen eine besondere Bedeutung. Das durch das beschriebene
Verfahren erhaltene Ergebnis entspricht nicht immer den lo-
gisch berechneten. Dies kann durch ein recht einfaches Beispiel
deutlich gemacht werden. Dazu wird eine kleine inhaltlich
sinnlose Tabelle ohne eingetragene Zeilen definiert:
CREATE TABLE LeererUnsinn(
X VARCHAR(4)
);
Diese Tabelle wird jetzt in einer Anfrage genutzt, in der sie
nicht weiter berücksichtigt wird.
Überlegungen
zu Kreuzpro-
duktberechnung
en
unerwartete lee-
re Ergebnisse
SELECT Tier.Tname
FROM Tier,LeererUnsinn
Durch die Bildung des Kreuzprodukts erhält man ein Ergebnis
der folgenden Art:
Es wurden keine Zeilen ausgewählt
Das obige Beispiel ist eher einfach geraten. Man kann sich über-
legen, dass das Datenbank-Managementsystem bei einer inter-
nen Optimierung der Anfrage vor der Ausführung erkennt,
dass die leere Tabelle überflüssig ist und deshalb ignoriert
wird. Aus einem formalen Gesichtspunkt muss man sich hier
aber die Frage stellen, ob man diese Optimierung erlauben soll.
167
Search WWH ::




Custom Search