Wykład 2. Geneza języka SQL, struktura i typy danych.

W wykładzie 2 przedstawiamy genezę i krótką historie jeżyka SQL, omawiamy strukturę języka. Przedstawiamy podstawowe uwagi dotyczące składni języka.

Język SQL – geneza.

Naturalną konsekwencją opublikowania koncepcji relacyjnego modelu danych (Edgar C. Codd, Relational Model Of Data for Large Shared Data Banks, 1970) były intensywne prace nad „językami relacyjnymi”, które miały umożliwić implementacje założeń teoretycznych do funkcjonalnych aplikacji. Najbardziej zaawansowane prace prowadzono w IBM, (co wynikało m. in. z faktu, że koncepcja modelu relacyjnego danych powstała w laboratorium IBM w San Jose). W 1974 zespół kierowany przez Donalda Chamberlin’a zaprezentował język Structured English Query Language, zwany SEQUEL. Pierwsza prototypowa implementacja stworzona w IBM powstała w latach 1974 – 75 i nosiła nazwę SEQUEL-XRM. W wyniku doświadczeń z tym systemem, opracowano w IBM kolejną wersję języka SEQUEL/2 i w roku 1977 uruchomiono znacznie bardziej zaawansowany SYSTEM R, implementujący znaczną część języka SEQEL/2. Z nazwy tej zresztą dość szybko zrezygnowano z przyczyn formalnych (nazwa była zastrzeżona przez brytyjskiego producenta samolotów, firmę De Haviland) na rzecz nazwy SQL (wymawianej es-kju-el), która w praktyce przestała być skrótem, stając się niezależną nazwą języka. SQL w roku. Dialekt języka stworzony w IBM stał się podstawą dla zatwierdzonego w 1986 roku przez American National Standards Institute (ANSI). W 1987 roku standard ANSI został zatwierdzony przez International Organization for Standarisation (ISO), jako standard światowy. Od tego czasu język doczekał się kilku kolejnych standardów oraz wielu implementacji, w różnym stopniu realizujących zapisy standardu. Można powiedzieć, że każda implementacja posługuje się własnym dialektem języka, zachowując zgodność ze standardem w podstawowych konstrukcjach, różniąc się w szczegółach.

W dalszej części wykładu, oraz w przytaczanych przykładach opierać się będziemy głównie na implementacji firmy Microsoft zrealizowanej w MS SQL Server 2008 R2 (dla uproszczenia nazywany MS SQL), dla porównania przywołując w niektórych przypadkach implementację firmy ORACLE 11g (w skrócie ORACLE). Jeżeli różnice pomiędzy tymi implementacjami nie będą sygnalizowane w treści wykładu, należy rozumieć, że nie istnieją, lub są nieistotne z punktu widzenia prezentowanego tu materiału.

SQL – struktura języka

Zgodnie z nazwą, przyjęło się mówić, że SQL to język ZAPYTAŃ kierowanych do bazy danych. Nie jest to do końca prawdziwe stwierdzenie, gdyż poza zapytaniami, korzystając ze składni SQL kierujemy do bazy także POLECENIA. W tym wykładzie wykorzystywane będą oba te pojęcia i traktowane, jako jednoznaczne.

Zapytania - polecenia można zaliczyć do jednego z trzech głównych podzbiorów:

W wykładach z przedmiotu KBD (Komunikacja z Bazami Danych) będziemy operować na dwóch pierwszych zbiorach, pozostawiając zbiór trzeci do rozważań na przedmiocie Administracja Bazami Danych.
W skład podzbioru języka SQL DML wchodzą polecenia rozpoczynające się od słów:

SELECT – wszystkie polecenia służące do odczytania danych z bazy

INSERT – polecenia wstawienia (dopisania) do bazy nowych danych

UPDATE – polecenia zamiany wartości danych już w bazie zapisanych

DELETE – polecenia usunięcia z bazy danych w niej zapisanych

W skład podzbioru języka SQL DDL wchodzą polecenia rozpoczynające się od słów:

CREATE – polecenie utworzenia nowego obiektu bazy danych (tabeli, widoku, indeksu itd.)

DROP – polecenie usunięcia (skasowania) istniejącego obiektu bazy danych

ALTER – polecenie zmiany struktury istniejącego obiektu bazy danych

Na koniec jedna istotna uwaga – język SQL nie jest językiem programowania. Używając „czystego” SQL nie da się zadeklarować zmiennej, wykonać instrukcji warunkowej czy instrukcji pętli, zapisać procedury. Natomiast polecenia języka SQL mogą zostać użyte w środowiskach programistycznych posługujących się rzeczywistymi językami programowania. Rozwiązanie takie zostało przewidziane, standard języka opisuje możliwe sposoby jego realizacji. W ramach przedmiotu KBD nie będą omawiane te rozwiązania, natomiast w jego dalszej części zostanie szczegółowa przedstawiona jedna z implementacji jednego z możliwych rozwiązań, jakim jest język Transact SQL użyty w środowisku MS SQL Server. Zostaną też zasygnalizowane podobieństwa i różnice pomiędzy T-SQL, a PL/SQL zaimplementowanym w środowisku ORACLE.

Kilka uwag dotyczących składni.

Przyjęło się pisać słowa kluczowe zapytań wielkimi literami, aczkolwiek standard tego nie wymaga (nie wymagają tego też podstawowe dialekty języka). Jednak dla przejrzystości w wykładach będziemy się trzymali tej zasady. Standard nie przewiduje także odróżniania wielkich i małych liter (case sensitive) w nazwach obiektów baz danych. Natomiast implementacje języka pozwalają wymusić rozróżnianie wielkich i małych liter w danych zapisywanych w bazie. Ta właściwość jest dostępna dla administratorów baz danych. Ustawieniem standardowym dla baz ORACLE jest rozróżnianie małych i wielkich liter (case sensitive), natomiast dla MS SQL Server nierozróżnianie (case insensitive). Nieuwzględnienie tych ustawień może prowadzić do błędów przy odczytywaniu danych z bazy.

Standard języka przewiduje kończenie każdego polecenia znakiem ; (średnika). Jednak MS SQL Server tego nie wymaga (aczkolwiek dopuszcza). Sugestią autora wykładu jest bezwzględne przestrzeganie tej zasady nawet wtedy, gdy nie jest wymagana, z uwagi na czytelność zapisu, oraz możliwość wystąpienia błędu np. w następujących po sobie poleceniach wewnątrz procedur.

Dane tekstowe zawsze muszą zostać ujęte w pojedyncze cudzysłowy. Dotyczy to także dat.
Format daty może być zapisywany według różnych standardów – obowiązujący standard jest zdefiniowany na poziomie serwera lub bazy danych i w niektórych przypadkach (ORACLE) może zostać zmieniony na potrzeby sesji użytkownika. Tak zmieniony standard obowiązuje tylko do wygaśnięcia sesji.

Zapis wszystkich poleceń języka SQL może być w dowolnym miejscu przenoszony do następnego wiersza bez konieczności stosowania jakiegokolwiek znaku kontynuacji.

Znakami komentarza (oznaczenia treści, która ma być ominięta przez interpreter lub kompilator kodu) są:

Przykład 2.1.

--Ten wiersz jest „zakomentowany” i nie będzie podlegał kompilacji

/* A teraz „zakomentowne” zostały dwa wiersze, one również zostaną pominięte przez kompilator i interpreter */

Wiersze zakomentowane zwykle wyróżniane są w środowiskach programistycznych kolorem (w MS Management Studio - zielonym)..