Język SQL jest ogólnie przyjętym standardem języków baz danych. Niezależnie od tego, jaka firma jest producentem SZBD, jak również do współpracy z jakim systemem operacyjnym SZBD został zaprojektowany, możemy być pewni, że zaimplementowana jest w nim obsługa języka SQL.
Polecenia języka SQL dzielą się na dwie grupy[1]:
- polecenia DDL, służące do definiowania danych
- polecenia DML, służące do modyfikowania danych.
Za pomocą języka DDL możemy utworzyć takie obiekty w bazie danych jak np. tabele. Polecenia języka DML służą do wstawiania, modyfikowania i usuwania danych z istniejących obiektów.
W rozdziale wykorzystamy tabele bazy danych Dziennik utworzone w rozdziałach 18 i 19.
Z reguły, do utworzenia zestawienia nie wykorzystujemy wszystkich informacji opisujących dany obiekt. Ilość atrybutów opisujących obiekt i przechowywanych w tabeli powodowałaby nieczytelność takiego zestawienia. Na przykład, jeżeli chcielibyśmy utworzyć listę wszystkich uczniów danej klasy, na podstawie której wydrukowalibyśmy zaproszenia na nasze urodziny, dane o imionach rodziców byłyby nam zupełnie niepotrzebne. Porównajmy dwie tabele: pierwsza obrazuje wynik "wyboru" wszystkich kolumn tabeli Uczeń, druga — ograniczenia liczby kolumn do interesujących nas w danym przypadku:
rys 20.1 Lista zaproszonych na nasze urodziny
ERU
Ewa
Rusek
K-ce 40-111, ul. Opiłki 2/1
Jan, Barbara
887-22-22
EST
Starska
K-ce 42-212, ul. Jana 1a
Jan, Brygida
215-02-21
JBA
Jaś
Badura
Bytom 33-333, ul.Pawła 2/12
Olek, Grażyna
501-50150112
KST
Krzyś
Strużyna
K-ce 41-011, ul. Piotra 11/1
Witold, Hanna
brak
MJA
Małgosia
Janoska
Gliwice 35-212, ul. Paśki 3b
Marcin, Magda
299-717-921
rys. 20.2 Poprawiona lista naszych gości
W drugim przypadku lista wygląda zdecydowanie lepiej. Efekt ten osiągnęliśmy poprzez selekcję pionową, czyli ograniczenie liczby kolumn, na podstawie których powstała nasza kwerenda do dwóch: kolumny Imię i kolumny Nazwisko.
Aby utworzyć opisywane w tym rozdziale zestawienia i raporty należy z dostępnych obiektów bazy danych wybrać obiekt Kwerendy, kliknąć przycisk Nowy (w rezultacie wywołamy kreatora kwerend), następnie z listy dostępnych możliwości wybrać Widok Projekt. Następnie należy przełączyć Widok Projekt na Widok SQL w sposób pokazany na rys. 20.3
rys. 20.3 Kwerenda przedstawiona w Widoku Projekt
Skoro potrafimy już przejść do tworzenia nowych kwerend w Widoku SQL, możemy spróbować wpisać poniższą instrukcję:
SELECT *
FROM Uczen;
Instrukcja SELECT powoduje pobranie przez SZBD danych z tabeli, której nazwa określona jest poprzez klauzulę FROM. Znak * jest specjalnym znakiem zastępującym nazwy wszystkich kolumn tabeli. Po wykonaniu instrukcji (przełączeniu Widoku SQL na Widok Arkusz danych) na ekranie zobaczymy te same dane, co na rys. 20.1
Aby ograniczyć liczbę kolumn do dwóch, wpiszmy:
SELECT Imię, Nazwisko
W efekcie otrzymamy listę przedstawioną na rys. 20.2 Teraz możemy zapisać naszą nową kwerendę w bazie danych.
Kolejność podawania nazw kolumn jako parametrów polecenia SELECT nie jest obojętna. Jako pierwsze będą zwracane wartości przechowywane w tej kolumnie, której nazwę podaliśmy jako pierwszy parametr.
Mamy już listę naszych przyszłych gości, ale kolejność nazwisk jest dość przypadkowa[2]. Zmodyfikujmy naszą listę tak, aby lista uczniów była uszeregowana alfabetycznie wg. nazwisk uczniów. W tym celu (w Widoku SQL naszej kwerendy) dodajmy do instrukcji SELECT dodatkowy element:
FROM Uczen
order by Nazwisko;
Sprawdzenie efektu tej modyfikacji pozostawiamy Czytelnikowi.
Załóżmy taką sytuację: jako nauczyciel matematyki w klasie 2a chcemy skontaktować się z rodzicami Jasia Badury. Niestety Jasia od kilku tygodni nie ma w szkole i nie możemy poprosić go o numer telefonu rodziców. Na szczęście informacja o numerze telefonu kontaktowego przechowywana jest w naszej bazie danych. Pozostaje jedynie znaleźć w tabeli Uczeń wiersz w którym zapisane są dane Jasia Badury. Załóżmy dodatkowo, że klasa 2a jest klasą liczną, zapisanych do niej jest 49 uczniów. Nawet po ograniczeniu kolumn do imienia, nazwiska i numeru telefonu otrzymalibyśmy długą listą, w 97% zawierającą nie interesujące nas w danej chwili dane. Zamiast samemu wyszukiwać w liście numeru telefonu do rodziców Jasia możemy wykorzystać do tego SZBD. Utwórzmy nową kwerendę i w Widoku SQL wpiszmy następujące polecenie:
WHERE [ID ucznia]='JBA';
Nazwę kolumny ID ucznia umieściliśmy w nawiasie kwadratowym, ponieważ zawiera ona spację. Pominięcie nawiasów zakończyłoby się błędem — SZBD nie potrafiłby jednoznacznie ocenić, którą kolumnę chcemy wykorzystać jako parametr w klauzuli WHERE.
Wartość testu logicznego umieściliśmy w apostrofach. W przeciwnym razie SZBD uznałby, że JBA jest nazwą parametru, a nie jego wartością.
W rezultacie kwerenda zwróci wszystkie przechowywane w kolumnie Uczeń dane opisujące Jasia Badurę[3]. Nas jednak interesuje wyłącznie numer telefonu. Połączmy selekcję pionową z poziomą w następującym poleceniu:
SELECT Imię, Nazwisko, [telefon kontaktowy]
W rezultacie SZBD zwróci następujące informację:
Rozważmy kolejny problem: Dyrektor chciałby wiedzieć, ile ocen niedostatecznych wystawiliśmy na koniec semestru w klasie 2a[4]. Zadanie sprowadza się do wybrania z tabeli Ocena tych wierszy, które w kolumnie Ocena przechowują wartość 2, w kolumnie ID przedmiotu wartość "MATMA", a w kolumnie zdobyta za wartość semestr. Rozwiązaniem zadania jest instrukcje:
SELECT Ocena
FROM Ocena
WHERE Ocena=2 AND [ID przedmiotu]='MATMA' AND [Zdobyta za]='semestr';
Na koniec jeszcze jeden przykład. Tym razem chcielibyśmy sprawdzić, które szafki były okradzione w ciągu ostatnich 3 miesięcy. Zadanie sprowadza się do wybrania z tabeli Szatnia tych wierszy dla których data ostatniej kradzieży, przechowywana w kolumnie Data kradzieży należy do zakresu <data dzisiejsza, data dzisiejsza - 91[5]>. Rozwiązaniem zadania jest poniższe zapytanie skierowane do SZBD:
SELECT [Data kradzieży], [Nr szafki], Uwaga
FROM Szatnia
WHERE (Date()-[Data kradzieży])<91;
W efekcie uzyskamy wynik podobny do przedstawionego na rys 20.4
Rys. 20.4 Lista szafek okradzionych w ciągu ostatnich trzech miesięcy
Data kradzieży
Nr szafki
Uwaga
2001-02-23
1
Wyjątkowy bałagan
2001-02-26
10
!!!
2001-02-02
12
coś tam zdechło
Funkcja Date()zwraca aktualną datę systemową.
Zadanie można rozwiązać korzystając z innych, wbudowanych w SZBD funkcji daty i czasu. Takie zmodyfikow...
b.senni