5. JĘZYK BAZ DANYCH SQL
zmienną krotkową i kropką. A więc zmienna krotkowa jest inną nazwą relacji R i można w razie potrzeby korzystać z niej tak samo jak z nazwy relacji.
PRZYKŁAD 5.12
W przykładzie 5.11 utworzyliśmy zapytanie o pary producent i aktor, którzy mają ten sam adres. Teraz chcemy uzyskać informacje o tych aktorach mających len sam adres. Struktura zapytania jest w tym przypadku taka sama jak poprzednio, różnica polega jedynie na tym, że teraz obie krotki tworzące parę będą dobierane z tej samej relacji Gwiazda, a nie jak poprzednio jedna z relacji Gwiazda, a druga z relacji Film. Do odróżniania odwołań do relacji Gwiazda skorzystamy ze zmiennych kratkowych jako synonimów nazwy gwiazda i wówczas zapytanie przybiera następująca postać:
SELECT Gwiazda1.nazwisko, Gwiazda2.nazwisko
FROK Gwiazda AS Gwiazdal, Gwiazda AS Gwiazda2
WHERE Gwiazdal.adres=Gwiazda2.adres
AND Gwiazdal.nazwisko < Gwiazda?..nazwisko
W klauzuli EROM występują dwie zmienne kratkowe Gwiazdal i Gwiazda2, które są synonimami relacji Gwiazda. Zmienne kratkowe występują w klauzuli select, poprzedzając składowe atrybutu nazwisko dwóch krotek. Te same synonimy występują także w klauzuli WHERE, po to by można było stwierdzić, że składowe adresu w dwóch rożnych krotkach relacji Gwiazda są takie same.
To, że są rozpatrywane tylko dwie różne kratki, jest zapewnione dzięki drugiemu warunkowi w klauzuli WHERE, tj. Gwiazdal .nazwisko < Gwiazda? .nazwisko, który oznacza, że nazwisko pierwszej gwiazdy poprzedza alfabetycznie nazwisko drugiej gwiazdy. Gdyby nie ten warunek, mogłoby się zdarzyć, ze zmienne kratkowe z relacji Gwiazdal i Gwiazda? wskazywałyby tę samą krotkę. Warunek WHERE byłby wówczas spełniony, bo adresy byłyby oczywiście równe, a do wyniku zostałaby dołączona para złożona z dwukrotnego wystąpienia nazwiska tej samej gwiazdy*. Drugi warunek narzuca także ograniczenie, aby para mająca wspólny adres w wyniku zapytania występowała tylko jeden raz. w porządku alfabetycznym. Gdybyśmy w tym warunku użyli znaku nierówności < > zamiast operatora porównania, to jedna i ta sama para zostałaby zaliczona do wyniku dw ukrotnie, na przykład:
Gwiazdal. nazwisko |
Gwiazda2. nazwisko |
Alec Baldwin Kim Basinger |
Kim Basinger Alec Baldwin |
* Ten sam problem pojawia się w sytuacjach takich, jak opisana w przykładzie 5.11, gdy gwiazda jest jednocześnie producentem. Podobnie również unika się takiej sytuacji, stawiając warunek, aby nazwiska w tworzonej krotce były różne.
□
Istnieje wiele sposobów interpretowania wyrażeń zapisywanych w formie select-from-where. Wszystkie tc sposoby interpretacji są sobie równoważne w tym sensie, że zawsze na te same zapytania, bez względu na sposób interpretacji, otrzymuje się ten sam wynik, przy założeniu, że zapytania operują na tych samych danych. Poniżej opiszemy różne sposoby interpretowania zapytań.
Dotychczas przy omawianiu sposobu wykonywania zapytań korzystaliśmy z semantyki zmiennych krotkowych. Przypomnijmy, że taką zmienną stanowi synonim nazwy relacji, a zakres tej zmiennej stanowią krotki relacji. Sama nazwa relacji także może być traktowana jako zmienna krotkowa, a jej zakresem jest właśnie dana relacja. Jeśli w zapytaniu występuje wiele zmiennych krotkowych, to można sobie wyobrazić pętle zagnieżdżone, po jednej dla poszczególnych zmiennych krotkowych. Dla każdego przypisania krotek do zmiennych krotkowych jest rozstrzygany warunek zawarty w klauzuli WHERE. Jeśli jest on spełniony, to z wartości atrybutów wymienionych w klauzuli SELECT jest tworzona krotka, którą dołącza się do wyniku. Wartości atrybutów' są określone dzięki bieżącemu przypisaniu krotek do zmiennych krotkowych. Na rysunku 5.2 przedstawiono algorytm tak rozumianego wykonania zapytania.
LET zmienne krotkowe z klauzuli przebiegają relacje Rl/ R2, .../ Rn;
FOR każda krotka tl z relacji Ri DO
FOR każda krotka t2 z relacji R2 DO
FOR każda krotka tn z relacji Rn CO
TF po zastąpieniu referoncjr atrybutów wartościami tl, t2, ..., tn klauzula where jest spełniona THEN
należy policzyć wartości atrybutów z klauzuli z odpowiednimi wartościami tl, t2, ..., tn i dopisać tak utworzona krotkę do wyniku.
RYSUNEK 5.2
Przetwarzanie prostego zapytania SQL
Definicja równoważna nie uwzględnia równoległego wykonywania pętli iterowanych po zmiennych krotkowy ch. Zamiast tego są rozważane równoległe przypisania wartości krotek z relacji do poszczególnych zmiennych