308 5. JEŻYK BAZ DANYCH SQL T
W języku SQL istnieje szereg operatorów, które można zastosować do relacji R i otrzymać wynik będący wartością logiczną. Jako najbardziej typowy przykład rozpatrzmy pewną relację R, która pow staje w wyniku podzapy-tania select-from-where. Niektóre operator)': IN, ALL i ANY wymagają, aby została podana również pewna wartość skalarna s i aby w tym przypadku R byłą relacją jednoargumentową. Poniżej przedstawiamy definicje operatorów:
1. EXISTS R oznacza warunek, który jest spełniony wtedy i tylko wtedy, gdy relacja R nie jest pusta.
2. s IN R jest prawdą wtedy i tylko wtedy, gdy s jest równe pewnej wartości należącej do R. W tym przypadku R musi być relacją jednoargumentową. Istnieją jednak rozszerzenia operatorów TN oraz NOT IN na przypadki, gdy wr schemacie relacji R występuje więcej niż jeden atrybut, a .sjest krotką; będzie o tym mowa w p. 5.3.3.
3. s > ALL R jest prawdą wtedy i tylko wtedy, gdy s jest większe od wszystkich wartości jednoargumentowej relacji R. Operator > można zastąpić każdym z pięciu pozostałych arytmetycznych operatorów porównania, znaczenie będzie właściwe dla danego operatora. Na przykład s<> ALL R ma takie samo znaczenie jak 5 not in R.
4. s > ANY R jest prawdą wtedy i tylko wtedy, gdy s jest większe od co najmniej jednej wartości w jednoargumentowej relacji R. Podobnie jak poprzednio operator > można zastąpić każdym z pięciu pozostałych arytmetycznych operatorów porównania. Wynik porównania s = ANY R jest taki sam jak wynik porównania s TN R.
Z operatorów t;xiS?S, all oraz ANY można tworzyć operatory o znaczeniu przeciwnym (tzn. nic istnieje, nic wszystkie, żaden) przez poprzedzenie wyrażenia spójnikiem logicznym NOT, czyli tak jak to się robi w przypadku każdego wyrażenia logicznego. Wyrażenie NOT EXISTS R jest prawdziw-e wtedy i tylko wtedy, gdy R jest relacją pustą. Z kolei wyrażenie NOT s > ALL R jest praw'dziwre wtedy i tylko wtedy gdy s nie jest maksymalną w'artością w R, a NOT s > ANY R jest prawdziwe wtedy i tylko wtedy, gdy j jest minimalną wartością w' R. Wkrótce przedstawimy kilka przykładów użycia tych operatorów.
W języku SQL krotki są reprezentowane przez listy wrartości skalarnych ujęte w' nawiasy. Jako przykłady można wskazać (123/ ' foo') lub (nazwisko, adres, sieć). W pierwszym przykładzie składowe są wartościami stałymi, w drugim - nazwami atrybutów. Nic można na tej samej liście umieszczać wartości stałych oraz atrybutów.
Jeśli w krotce i liczba składowych jest taka sama jak liczba atrybutów w' relacji R, to porównywanie / i R w wyrażeniach, opisywanych w bieżącym rozdziale, ma rację bytu. Przykłady właściwie sformułowanych wyrażeń to t IN R lub t <> ANY R. To drugie porównanie oznacza, że w relacji R istnieje krotka, która jest różna od krotki t. Trzeba pamiętać o tym, że przy porównywaniu krotki z elementami relacji R składowe są łączone do pary zgodnie z kolejnością atrybutów określoną dla relacji R.
1) SELECT nazwisko
2) EROM FiimDyr
3) WHERE cert# IN
4) (SELECT producenrC*
7) (SELECT tytułFilmu, rokFilmu
8) FROM GwiazdyW
9) WHERE nazwiskoGwiazdy 'Harriscn Ford'
10) )
11) ~ );
RYSUNEK 5.5
Wyszukiwanie producentów filmów z Harrisonem Fordem
PRZYKŁAD 5.18
Na rysunku 5.5 przedstawiono zapytanie, którego wynik zawiera nazwiska producentów filmów z udziałem Harrisona Forda. Zapytanie dotyczy danych zapisanych w następujących trzech relacjach:
Film(tytuł, rok, długość, czyKolor, nazwaStudia, producentC#}
GwiazdyW(tytułFilmu, rokFilmu, nazwiskoGwiazdy)
FiimDyr(nazwisko, adres, cert#, cenaSieci)
Zapytanie jest złożone z zapytania „głównego”, podzapytania zapytania głównego i trzeciego zapytania zagnieżdżonego w podzapytaniu.
Analizę rozpoczniemy od najbardziej zagnieżdżonego zapylania, a następnie będziemy rozpatrywać zapytania bardziej zewnętrzne. A więc o czym mówią wiersze od 7) do 9)? To zapytanie powoduje, że są przeglądane wszystkie krotki relacji GwiazdaW i do jego wyniku należą wszystkie krotki zawierające stałą ' Harrison Ford' jako składową atrybutu nazwiskoGwiazdy. Wynik obejmuje tylko wartości atrybutów' cytułFilmu i rok-Fiimu z wybranych krotek. Przypomnijmy, że te dwa atrybuty razem, a nie sam tytuł, stanowią klucz dla filmów', a więc, aby jednoznacznie określić, o który film chodzi, trzeba dysponować obiema wartościami. Wynikiem