1
1
284
5. Jlj7.YK BAZ DANYCH SQL
Zapytanie to ma charakterystyczną dla większości zapytań w SQL postać scl ect-from-where.
• Klauzula FROM służy do określenia relacji., których dotyczy zapytanie. W naszym przykładzie jest to relacja Film.
• W klauzuli WHERF. formułuje się warunek, który' odpowiada warunkowi wyboru w algebrze relacji i który określa ograniczenia, jakie maja. spełniać krotki, aby zostać wybrane w danym zapylaniu. W naszym przykładzie musi być spełniony warunek, żeby film był wyprodukowany w studiu Disneya w roku 1990. Jeśli krotka spełnia te ograniczenia, to zostaje zaliczona do odpowiedzi na zapytanie, pozostałe krotki zostają odrzucone.
• W klauzuli SELECT zostają określone nazwy atrybutów', których wartości z krotek spełniających warunek zapytania są dołączane do odpowiedzi. Gdy w klauzuli SELECT występuje *, wówczas krotkę umieszcza się w' odpowiedzi. Dotyczy to właśnie naszego przykładu. A więc wr wyniku zapytania powstaje relacja złożona ze wszystkich krotek wybranych według warunku WHERE.
Zapytanie można interpretować w ten sposób, że rozważa się osobno poszczególne krotki z relacji opisanej w klauzuli FROM. Każda krotka jest sprawdzana, czy spełnia warunek zawarty w klauzuli WHERE. A mówiąc dokładniej, w miejsce atrybutów występujących w warunku klauzuli where zostają podstawione odpowiednie składowe rozpatrywanej krotki. Następnie wylicza się wartość tak utworzonego warunku i, jeśli jest nią prawda, to te składowa rozpatrywanej krotki, które wymieniono w klauzuli SELECT tworzą krotkę, którą dołącza się do rozwiązania. A zatem w wyniku przykładowego zapytania o filmy, które zostały' wyprodukowane w studiu Disneya w roku 1990, zostanie zawarta między innymi krotka opisująca film Pretty W oman.
Klasyfikacja tej krotki do wyniku zapytania przebiega w następujący sposób: gdy procesor SQL napotyka krotkę relacji Film:
tytuł |
rok |
długość |
czy Kolor nazwaStudia |
i o |
Pretty Woman |
1990 |
119 |
prawda Disney |
19 9 9 |
(gdzie 999 przyjęto do oznaczenia pewnego, być może nieistniejącego, certyfikatu producenta), to zamiast atrybutu nazwaStućia w warunku klauzuli WHERE zostaje podstawiona wartość 'Disney', a zamiast atrybutu rok - wartość 1990, ponieważ takie są składowe tych atrybutów- w krotce Pretty Womcm. Wówczas klauzula WHERE przyjmuje następującą postać:
Ten warunek jest oczywiście spełniony, czyli krotka Pretty Woman pomyślnie przeszła test zawarty w klauzuli WHERE i w konsekwencji stała się częścią wyniku zapytania.
□
Z wybranych krotek można eliminować składowe, które nie są potrzebne w wyniku zapytania, tzn. można relację uzyskaną jako wynik zapytania rzutować na pewne atrybuty. Znak gwiazdki, wpisany jako parametr klauzuli SELECT, oznacza dowolny atrybut relacji wymienionych w klauzuli FROM. Wynik zapytania jest rzutowany na wymienione atry buty*.
PRZYKŁAD 5.2
Tym razem utworzymy zapytanie, które różni się od zapytania z przykładu 5.1 tym, że w wyniku chcemy otrzymać wartości atrybutów tytuł i długość. Postać zapytania jest wówczas następująca:
SELECT tytuł, długość FROM Film
WHERE nazwaStudia = 'Disney' AND rok = 1990;
W wyniku powstaje tabela zawierająca dw'ie kolumny o nagłówkach tytuł oraz rok. Do tabeli zostają wpisywane pary wartości, z których pierwsza oznacza tytuł, a druga czas trwania filmu wyprodukowanego w studiu Disneya wT 1990 roku. Schemat tak powstałej relacji i jedna z krotek odpowiedzi wyglądają następująco:
tytuł___długość
Pretty Woman 119
□
Czasami zdarza się, że teksty w nagłówkach kolumn mają się różnić od nazw atrybutów relacji, które zostały wymienione w klauzuli FROM. Wówczas po nazwie takiego atrybutu w klauzuli SELECT wpisuje się słowo kluczowe AS, a następnie synonim nazwy atrybutu; wr relacji wynikowej w nagłówku pojawi sic wówczas ten synonim. Słow-o kluczowa AS często jest pomijane, a w niektórych starszy ch w-ersjach SQL jest pomijane zawsze. To znaczy, można oddzielić synonim od nazwy atrybutu po prostu spacją, bez żadnego innego symbolu pomiędzy nimi.
‘ Słowo kluczowe select w SQL odpowiada raczej działaniu rzutu w algebrze relacji, podczas gdy działanie selekcji z algebry relacji jest'bliższe klauzuli WHERE z zapytań SQL.