Databases Reference
In-Depth Information
Eine Grundregel der Optimierung sollte sein, dass das Ergebnis
der Berechnung mit und ohne Optimierung gleich sein muss.
Abteilung 1 Mitarbeiter Abteilung 2
MiNr Leiter MiNr Name Chef MiNr Leiter
1
Erna
401
Udo
1
2
Edna
402
Ute
3
Abb. 7-3: Tabellen für kritisches Anfrageergebnis
Ein größeres Problem mit einer leeren Tabelle kann man aber
auch in einem komplexeren und realitätsnäheren Beispiel be-
obachten. Gegeben seien die Tabellen aus Abb. 7-3, in der Mit-
arbeiter einen Vorgesetzten aus verschiedenen Abteilungen ha-
ben können. Dabei sind hier nur die für das Beispiel relevanten
Tabellen angegeben. Mit einiger Erfahrung sollte man die nicht
optimale Gestaltung der Tabellen erkennen. Trotzdem kann ei-
ne solche Situation mit der Aufteilung inhaltlich zusammenge-
höriger Tabellen in einer über längere Zeit entwickelten und
ergänzten Datenbank auftreten. Die Tabelle Abteilung 2 hat im
Beispiel keine Einträge. Mit der folgenden Anfrage möchte man
die Namen aller Mitarbeiter herausfinden, deren Chef in der
Abteilung 1 oder in der Abteilung 2 arbeitet.
SELECT Mitarbeiter.Name
FROM Mitarbeiter, Abteilung1, Abteilung2
WHERE Mitarbeiter.Chef=Abteilung1.MiNr
OR Mitarbeiter.Chef=Abteilung2.MiNr
Das wohl befürchtete, aber wahrscheinlich nicht gewünschte
Ergebnis ist:
WHERE-
Bedingungen
mit OR und lee-
re Tabellen
Es wurden keine Zeilen ausgewählt
Die folgende Anfrage, die eigentlich ein Teilergebnis der ersten
Anfrage bezogen auf die Abteilung 1 liefert, bringt das erwarte-
te Ergebnis.
SELECT Mitarbeiter.Name
FROM Mitarbeiter, Abteilung1
WHERE Mitarbeiter.Chef=Abteilung1.MiNr
Das Ergebnis der Anfrage ist:
NAME
-----
Udo
Man erkennt daran, dass man vor der Erstellung von Anfragen
prüfen muss, ob eine der beteiligten Tabellen leer ist. In diesem
168
Search WWH ::




Custom Search