Język SQL stanowi najbardziej popularny mechanizm definiowania poleceń zapytań i modyfikacji w relacyjnych systemach baz danych. Słowo SQL jest skrótem angielskim od „Structured Qucry I .anguage”, tj. ,.język zapytań strukturalnych”. Podstawowy rdzeń języka SQL jest implementacją algebry relacji, ale zawarte są w nim również elementy daleko odbiegające od tego. co można odnaleźć w algebrze relacji, na przykład możliwości agregowania danych (np. sumy i podliczanie), a także możliwość modyfikowania bazy danych.
Istnieje wiele różnych dialektów języka SQL. Najważniejsze z nich są dwa standardy: ANS1 (American National Standard Institute) $QL oraz zmodyfikowany w 1992 r. standard o nazwie SQL-92, czyli SQL2. W trakcie ustaleń znajduje się kolejna rozszerzona wersja tych standardów o nazwie SQL3, która poza elementami SQL2 zawiera wiele nowości, takich jak reku-rcncja, wyzwalacze i obiekty. A poza tym istnieją wersje języka $QL implementowane przez producentów oprogramowania systemowego baz. danych. Są one zgodne ze standardem ANSI, a w wielu miejscach również ze standardem SQL2. ale każdy z nich zawiera wiele własnych koncepcji modyfikujących ten drugi standard, a czasami tc koncepcje są zgodne z bieżącym stanem znajdującego się na etapie inkubacji standardu SQL3.
Bieżący rozdział i następne dwa posłużą do omówienia zapytań języka $QL. W tym rozdziale skupimy uwagę na interfejsie zapytań generycznych w SQL. Będziemy bowiem rozpatrywać język SQL jako niezależny język zapytań, który dostarcza możliwości interaktywnego zadawania zapytań do bazy danych oraz określania żądań modyfikowania danych. Wyniki zapytań są wówczas wyświetlane na terminalu. W zasadzie w bieżącym i następnych dw'óch rozdziałach nie będziemy wykraczać poza standard SQL2, przy czym uwypuklimy te fragmenty, które są honorowane w prawie wszystkich komercyjnych systemach baz danych, a także w pierwszym standardzie ANSI. W niektórych przypadkach, tam gdzie rozwiązanie z SQL2 nie jest wystarczająco dobre, omówimy wersje proponowane w powstającym standardzie SQL3.
W bieżącym i następnych dwóch rozdziałach zamierzamy raczej określić zasadniczy sens języka $QL, czyli dostarczyć wiedzy na temat samego języka, a nie sposobu posługiwania się jakąś jego wersją. Dlatego omówimy tylko najbardziej rozpowszechnione elementy języka. W bibliografii można znaleźć pozycje, w których znajduje się więcej szczegółów dotyczących języ ka oraz jego dialektów.
Najprostsza postać zapytań w SQL służy do wybierania krotek pewnej relacji, które spełniają określony w zapytaniu warunek. Taki typ zapylania stanow i odpowiednik operatora selekcji w algebrze relacji. Takie najprostsze zapytanie, jak zresztą prawie wszystkie zapytania w tym języku, konstruuje się za pomocą trzech charakterystycznych dla SQL słów kluczowych: SELECT, EROM i WHERl.
Film(tytuł, rok, długość, czyKolor, nazwaStudia, producentC#)
GwiazdyW(tytułFilnu, rokFilmu, nazwiskoGwiazdy)
GwiazdaFilmowa(nazwisko, adres, płeć, datatJrodzenia) FilmDyr (na2wi sko, adres, cert#, cer.aSieci)
Studio(nazwa, adres, prozC#)
RYSUNEK 5.1
Przykładowy schemat bazy danych, powtórzenie PRZYKŁAD 5.1
W tym przykładzie, a także w kilku następnych, będziemy posługiwać się schematem bazy danych wprowadzonym w podrozdziale 3.9. Jego opis został powtórzony na rys. 5.1.W podrozdziale 5.7 dowiemy się, w jaki sposób opisywać szczegóły schematu w języku SQL, natomiast teraz chwilowo przyjmiemy założenie, że wszystkie relacje i dziedziny opisane w podrozdziale 3.9 mają swoje odpowiedniki w strukturach, które są dostępne z SQL.
Pierwsze zapytanie będzie dotyczyć relacji Filr i zapytamy o wszystkie filmy wyprodukowane w studiu Disneya w roku 1990. Relacja Film ma następujący schemat:
Fi lm (-tytuł, rok, długość, czyKcior, nazwaStudia, pro-ducentć#}
Zapytanie w SQL przyjmuje następującą postać:
SELEC? *
FROM Film
WHERE nazwaStudia = 'Disney' AND rok = 1990;