27.12.2012 Aufrufe

Formaler Datenbankentwurf - Informatixx

Formaler Datenbankentwurf - Informatixx

Formaler Datenbankentwurf - Informatixx

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

c Professor Dr. Georg Lausen, 2001: Vorlesung Datenbanken SQL: einfache Anfragen.8<br />

Anfragen mit mehreren Relationen<br />

explizite Spaltenreferenzierung, bzw. Tupelvariable/Korrelationsvariable/Alias<br />

Bestimme alle Städte eines Landes.<br />

SELECT DISTINCT City.name, Country.name<br />

FROM City, Country<br />

WHERE City.country = Country.code;<br />

c Professor Dr. Georg Lausen, 2001: Vorlesung Datenbanken SQL: einfache Anfragen.10<br />

zur Semantik:<br />

Der folgende Ausdruck zur Berechnung von R \ (S [ T ) liefert �, sofern T = �!<br />

SELECT R.A FROM R, S, T WHERE R.A = S.A OR R.A = T.A<br />

SQL-Anfrage:<br />

SELECT A 1�:::�An FROM R 1 AS t 1,...,Rm AS tm WHERE F<br />

äquivalenter Ausdruck der relationalen Algebra:<br />

[A 1�:::�A n]( [F ](r 1 ::: r m))<br />

2<br />

c Professor Dr. Georg Lausen, 2001: Vorlesung Datenbanken SQL: einfache Anfragen.9<br />

... unter Verwendung eines Alias für die betreffenden Relationen.<br />

SELECT DISTINCT S.name, L.name<br />

FROM City S, Country L<br />

WHERE S.country = L.code;<br />

... die Verwendung des Schlüsselwortes AS bei der Benennung eines Alias<br />

ist optional.<br />

SELECT DISTINCT S.name, L.name<br />

FROM City AS S, Country AS L<br />

WHERE S.country = L.code;<br />

Bestimme alle Paare von Ländern, die im selben Kontinent liegen (die Verwendung<br />

eines Alias ist notwendig).<br />

SELECT E1.country first, E2.country second<br />

FROM encompasses E1, encompasses E2<br />

WHERE E1.continent = E2.continent<br />

AND E1.country < E2.country;<br />

c Professor Dr. Georg Lausen, 2001: Vorlesung Datenbanken SQL: einfache Anfragen.11<br />

Algorithmus (nested-loop-Semantik):<br />

FOR each tuple t 1 in relation R 1 DO<br />

FOR each tuple t 2 in relation R 2 DO<br />

...<br />

FOR each tuple tn in relation Rn DO<br />

IF die WHERE-Klausel ist erfüllt nach Ersetzen der Attributnamen durch die<br />

entsprechenden Werte von t 1�:::�tn THEN<br />

werte die SELECT-Klausel bzgl. t 1�:::�tn aus und bilde das Antwort-Tupel.<br />

Kalkül-Semantik:<br />

Betrachte alle möglichen Zuweisungen von Tupeln aus den Relationen an die<br />

Tupelvariablen und für jede solche Zuweisung, bzgl. der die WHERE-Klausel<br />

erfüllt ist, bilde das Antwort-Tupel.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!