Formaler Datenbankentwurf - Informatixx
Formaler Datenbankentwurf - Informatixx
Formaler Datenbankentwurf - Informatixx
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.