R-20.doc

(285 KB) Pobierz
Szablon dla tlumaczy

Rozdział 20

Język SQL

 

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.

Selekcja pionowa (projekcja)

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

Ewa

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

 

Ewa

Rusek

Ewa

Starska

Jaś

Badura

Krzyś

Strużyna

Małgosia

Janoska

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

FROM Uczen;

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:

SELECT Imię, Nazwisko

FROM Uczen

order by Nazwisko;

Sprawdzenie efektu tej modyfikacji pozostawiamy Czytelnikowi.

Selekcja pozioma (selekcja)

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:

 

SELECT *

FROM Uczen

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]

FROM Uczen

WHERE [ID ucznia]='JBA';

W rezultacie SZBD zwróci następujące informację:

Jaś

Badura

501-50150112

 

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...

Zgłoś jeśli naruszono regulamin