Wstp (Structured( Query Language) strukturalny jzyk zapyta Podstawowe cechy jzyka : - zapytania wyszukiwanie danych w bazie danych, - operowanie danymi wstawianie, modyfikacja, usuwanie danych z bazy danych, - definiowanie struktury danych dodawanie nowych tabel, perspektyw i indeksów, - sterowanie danymi ochrona danych, - standardowe narzdzie dostp do danych w ró&norodnych 'rodowiskach. Zak*ada si, &e informacje przechowywane s+ w relacyjnej bazie danych w postaci zbioru tabel. Ka&da tabela zawiera kolumny (atrybuty( atrybuty) ) oraz wiersze (rekordy( rekordy). 2
Wstp Ka&da tabela w modelu relacyjnym posiada nastpuj+ce w*asno'ci: krotki (wiersze) s+ unikalne, atrybuty (kolumny) s+ unikalne, kolejno'c krotek nie ma znaczenia, kolejno'c atrybutów nie ma znaczenia, warto'ci atrybutów s+ atomowe. Tabela mo&e reprezentowa/: zbiór encji wraz z atrybutami, zbiór powi+za pomidzy encjami wraz z ich atrybutami, zbiór encji wraz z atrybutami i ich powi+zania z innymi encjami. 3
Wstp Podstawowe operacje relacyjne: selekcja, projekcja, produkt, po*+czenie, unia, przecicie, ró&nica. 4
Sk*adnia: SELECT [predykat][funkcja[ predykat][funkcja]{ ]{ kolumna [ AS alias ] [,...] { tabela.* } * } FROM wyra(enie_tabelowe [IN...] [ WHERE...] [ GROUP BY... ] [{ UNION INTERSECT EXCEPT} [ALL] [CORRESPONDING [BY (kolumna,...)]] [ HAVING... ] [ ORDER BY...] 5
Predykaty: All,, DISTINCT,DISTINCTROW, TOP. Domy'lnie przyjmuje si predykat ALL.. W -92 mo&liwy jest tylko jeden predykat DISTINCT. Predykaty stosuje si w celu ograniczenia liczby zwracanych rekordów. Predykat ALL okre'la, &e wszystkie wiersze, które spe*niaj+ warunki tego rozkazu powinny zosta/ pokazane. Przyjmowany jest domy'lnie. W Ms Access po ALL wymagany jest tak&e metaznak *. Poza tym predykat ten stosuje si w podzapytaniu. Za jego pomoc+ pobiera si tylko te warto'ci g*ównego zapytania, które spe*niaj+ porównanie ze wszystkimi rekordami pobieranymi przez podzapytania. SELECT ALL FROM wyra(enie_tabelowe 6
Predykat DISTINCT okre'la, &e wiersze powtarzaj+ce si powinny zosta/ usunite przed zwróceniem ich na zewn+trz. Dwa wiersze traktuje si jako równe je'li wszystkie warto'ci dla ka&dej z kolumn zwracanych rozkazem SELECT s+ sobie równe. SELECT DISTINCT FROM wyra(enie_tabelowe Predykat DISTINCTROW powoduje, &e pomijane s+ dane powtarzaj+ce si na podstawie ca*ych rekordów, a nie jedynie wybranych kolumn. Predykat DISTINCTROW musi by/ stosowany w zapytaniach opartych na kilku tabelach, ale nie mog+ by/ wybierane kolumny ze wszystkich tabel. SELECT DISTINCTROW FROM wyra(enie_tabelowe Predykat TOP powoduje, &e zwracane s+ rekordy zawieraj+ce si w podanym zakresie liczbowym lub procentowym. SELECT TOP n [PERCENT] FROM wyra(enie_tabelowe [ORDER BY...] 7
Funkcje: MIN, MAX, SUM, COUNT, AVG. Funkcja MIN zwraca minimaln+ warto'/ wyra&enia. SELECT MIN(wyra(enie) FROM wyra(enie_tabelowe Funkcja MAX zwraca maksymalna warto'/ wyra&enia. SELECT MAX(wyra(enie) FROM wyra(enie_tabelowe Funkcja SUM zwraca sum zbioru warto'ci. SELECT SUM(wyra(enie) FROM wyra(enie_tabelowe 8
Funkcja COUNT zwraca liczb rekordów, w których wyra&enie nie ma warto'ci NULL.. Je&eli jednak u&yty zostanie metaznak *, to funkcja Count obliczy ca*kowit+ liczb rekordów, w tym i zawieraj+cych warto'ci puste. SELECT COUNT(Nazwisko) AS [StanZatrudnienia] FROM Pracownicy Funkcja AVG zwraca warto'/ 'redni+ wyra&enia ignoruj+c warto'ci puste. SELECT AVG(zarobki) AS [:redniap;aca] FROM pracownicy Pozosta*e funkcje agregacji: StDev, StdDev, StDevP, Var, Variance, VarP. 9
* - oznacza, &e wszystkie kolumny ze wszystkich wymienionych tabel powinny zosta/ pobrane. tabela.* - oznacza, &e wszystkie kolumny z podanej tabeli powinny zosta/ pokazane. p kolumna - nazwa kolumny z danymi, które maj+ by/ pobrane. wyra(enie_tabelowe - nazwa tabeli lub tabel zawieraj+cych pobierane dane. alias - nazwa, która zostanie u&yta jako nag*ówki kolumn w miejsce nazw kolumn z tabeli. 10
UNION INTERSECT EXCEPT [ALL] - operatory u&ywane przy *+czeniu wyników z dwóch zapyta. Operator UNION powoduje i& do wynikowej tabeli zostanie w*+czony ka&dy wiersz z ka°o zapytania, je'li wiersze si powtarzaj+ w*+czona zostanie tylko jedna ich kopia. UNION ALL powoduje, i& tak&e powtarzaj+ce si wiersze zostan+ w*+czone do wynikowej tabeli. EXCEPT powoduje i& wszystkie wiersze z drugiego zapytania zostan+ wyeliminowane z wyniku, a duplikaty pojawi+ si tylko raz. EXCEPT ALL spowoduje, &e od ilo'ci powtarzaj+cych si wierszy z wyniku zapytania 1 zostanie odjta ilo'/ powtarzaj+cych si w zapytaniu 2 i taki wiersz pojawi si na wyj'ciu tyle razy ile wynosi ró&nica. INTERSECT powoduje i& ka&dy wiersz pojawiaj+cy si na wyj'ciu zapytania 1 i zapytania 2 jest tylko raz wynikiem. INTERSECT ALL spowoduje i& powtarzaj+ce wiersze pojawi+ si na wyj'ciu tyle razy, r co w wyniku 1 lub 2 - w zale&no'ci od tego która liczba jest mniejsza. 11
CORRESPONDING BY (kolumna,...) - powoduje ograniczenie *+czenia wyników z zapyta do wymienionych kolumn. U&ycie samego s*owa CORRESPONDING z pominiciem nazw kolumn oznacza wybranie wszystkich kolumn o tych samych nazwach i typach danych w istniej+cych w tabelach. FROM - okre'la Eród*owe tabele wykorzystywane w zapytaniu. Mog+ to by/ tak&e widoki. Je'li wymienimy wicej ni& jedn+ tabel to nast+pi operacja ich z*+czenia. Istnieje kilka rodzajów z*+cze. Klauzula FROM jest obowi+zkowa. SELECT lista_kolumn FROM wyra(enie_tabelowe [IN zewn<trzna_baza] lista_kolumn - nazwy pobieranych pól, którym mog+ towarzyszy/ aliasy, funkcje agregacji, predykaty wyboru (ALL, DISTINCT, DISTINCTROW lub TOP). wyra(enie_tabelowe - wyra&enie okre'laj+ce tabel lub tabele, z których maj+ by/ pobrane dane. W celu pobrania danych z kilku tabel stosuje si wbudowane operatory z*+czenia, np.: CROSS JOIN - z*+czenie krzy&owe, w wyniku znajd+ si wszystkie kombinacje wierszy z obu tabel, INNER JOIN - z*+czenie wewntrzne, w wyniku znajd+ si wiersze odpowiadaj+ce sobie z obu tabel UNION JOIN - w wyniku znajd+ si wiersze nie pasuj+ce do siebie. 12
IN - W MS Access klauzula ta okre'la tabele w zewntrznej bazie danych. Umo&liwiana ona po*+czenie tylko z jedn+ zewntrzn+ baz+ danych. Uwaga: Sowo IN w wystpuje take jako predykat. [SELECT INSERT] INTO przeznaczenie IN { >cie(ka [">cie(ka " "typ"] } SELECT lista_kolumn FROM wyra(enie_tabelowe IN { >cie(ka [">cie(ka " "typ"] } przeznaczenie - nazwa tabeli zewntrznej, do której maj+ by/ wstawione dane. wyra(enie_tabelowe - wyra&enie okre'laj+ce tabel lub tabele, z których maj+ by/ pobrane dane. >cie(ka - pe*na 'cie&ka do katalogu lub pliku zawieraj+cego tabele. typ - nazwa typu bazy danych u&ytej do utworzenia tabeli, o ile jest to baza danych inna ni& Microsoftu (na przyk*ad dbase III, dbase IV, Paradox 3.x lub Paradox 4.x). lista_kolumn - nazwy pól z danymi, które maj+ by/ pobrane. 13
WHERE - okre'la te rekordy z tabel wymienionych w klauzuli FROM, które spe*niaj+ podane kryteria. W przypadku braku klauzuli WHERE zwracane s+ wszystkie wiersze tabeli. Klauzula ta nie jest obowi+zkowa, jednak je'li wystpuje, musi by/ umieszczona po klauzuli FROM. SELECT lista_kolumn FROM wyra(enie_tabelowe WHERE predykat lista_kolumn - nazwy pobieranych pól, którym mog+ towarzyszy/ aliasy, funkcje agregacji, predykaty wyboru (ALL, DISTINCT, DISTINCTROW lub TOP) albo inne opcje instrukcji SELECT. wyra(enie_tabelowe - wyra&enie okre'laj+ce tabel lub tabele, z których maj+ by/ pobrane dane. predykat - predykat okre'laj+cy kryteria jakie musz+ spe*nia/ rekordy, aby zosta*y zwrócone przez zapytanie. Mo&na tu zastosowa/ operatory: IN, BETWEEN, LIKE etc. 14
IN - sprawdza, czy warto'/ wyra&enia jest równa dowolnej warto'ci z podanej listy. Najcz'ciej stosuje si go po klauzuli WHERE. Uwaga: Sowo IN w wystpuje take jako klauzula oraz predykat. Sk*adnia: wyra(enie [NOT] IN (warto>a1, warto>a2,...) wyra(enie - wyra&enie zawieraj+ce dane do sprawdzenia. warto>a1, warto>a2 - jedna lub kilka warto'ci, z którymi porównywane jest wyra&enie. NOT operator logiczny przeczenia. SELECT * FROM Studenci WHERE MiejsceZamieszkania IN ('Rzeszów','Kraków') 15
BETWEEN - sprawdza, czy warto'/ wyra&enia jest zawarta w okre'lonym przedziale warto'ci. Gdy warto'/ wyra&enia mie'ci si w tym przedziale zwrócona zostanie warto'/ TRUE, w przeciwnym razie, zwraca warto'/ FALSE. Je'li która' z porównywanej warto'ci jest NULL zwrócona zostania warto'/ UNKNOW. Mo&na te& u&y/ operatora logicznego NOT, aby sprawdza warunek przeciwny. Stosuje si go przede wszystkim po klauzuli WHERE. Sk*adnia: wyra(enie [NOT] BETWEEN warto>a1 AND warto>a2 wyra(enie - wyra&enie zawieraj+ce dane do sprawdzenia. warto>a1, warto>a2 - jedna lub kilka warto'ci, z którymi porównywane jest wyra&enie. SELECT * FROM studenci WHERE DataObrony BETWEEN #02-04-03# AND #09-09-03# 16
LIKE - sprawdza, czy wyra&enie znakowe jest identyczne z danym wzorcem. Stosuje si go przede wszystkim po klauzuli WHERE. Sk*adnia: wyra(enie LIKE wzorzec wyra(enie - wyra&enie zawieraj+ce dane do sprawdzenia wzorzec - ci+g znaków. Mo&na stosowa/ metaznaki SELECT * FROM studenci WHERE Nazwisko LIKE '[C-D]*' 17
GROUP BY - grupuje rekordy o tych samych warto'ciach wskazanych na li'cie kolumn przy instrukcji SELECT. Klauzula ta nie jest obowi+zkowa. Bardzo czsto *+czy si j+ z funkcjami agregacji oraz z klauzul+ HAVING, która pozwala przefiltrowa/ rekordy po ich zgrupowaniu. Sk*adnia: SELECT lista_kolumn FROM wyra(enie_tabelowe GROUP BY pola_grupowania [ HAVING...] SELECT Tytu;, Count(Tytu;) AS Ilo>A FROM Pracownicy WHERE Miejsce_Ur = Bytom GROUP BY Tytu; 18
HAVING - pozwala okre'li/, które ze zgrupowanych rekordów maj+ by/ wy'wietlone. Po zgrupowaniu rekordów klauzul+ GROUP BY pokazywane s+ te rekordy, które spe*niaj+ kryteria tej klauzuli. Sk*adnia: SELECT lista_pól FROM wyra(enie_tabelowe WHERE kryteria GROUP BY pola_grupowania HAVING kryteria_grupowania kryteria_grupowania - kryteria okre'laj+ce, które ze zgrupowanych rekordów maj+ zosta/ pokazane. lista_pól - nazwy pól z danymi, które maj+ by/ pobrane. pola_grupowania - nazwy pól u&ytych do zgrupowania rekordów. Kolejno'/ tych nazw okre'la ich znaczenie. SELECT Tytu;, Count(Tytu;) AS Total FROM Pracownicy WHERE Region = Bytom GROUP BY Tytu; HAVING Count(Tytu;) > 1 19
ORDER BY - sortuje rosn+co lub malej+co rekordy wed*ug jednej lub kilku kolumn. Klauzula ta nie jest obowi+zkowa, ale czsto u&ywana w celu wy'wietlenia danych w okre'lonym porz+dku. Sk*adnia: SELECT lista_pól FROM wyra(enie_tabelowe ORDER BY kolumna [ASC DESC] [,kolumna2] [ASC DESC] [,...] kolumna1, kolumna2 - nazwy kolumn wed;ug których b<dq sortowane rekordy ASC - oznacza &e rekordy maj+ by/ sortowane rosn+co. DESC - oznacza &e rekordy maj+ by/ sortowane malej+co. lista_pól - nazwy pól z danymi, które maj+ by/ pobrane. wyra(enie_tabelowe - nazwa tabeli lub tabel zawieraj+cych pobierane dane. SELECT nazwisko, imie FROM studenci ORDER BY nazwisko DESC 20
AS - stosuje si w celu u&ycia innej nazwy kolumny ni& wynika to z wyra&enia j+ generuj+cego. W efekcie powstaj+ aliasy. Klauzuli tej u&ywa si zwykle przy funkcjach agregacji, gdy powstaje element o powtarzaj+cej si nazwie. Uwaga: AS wystpuje take w jako sowo kluczowe w instrukcjach: CONNECT, CREATE DOMAIN, CREATE VIEW. Sk*adnia: SELECT kolumna1 [ AS alias1 ], kolumna2 [AS alias2] [,...]] FROM wyra(enie_tabelowe alias1, alias2 - nazwy, które zostan+ u&yte jako nag*ówki kolumn w miejsce nazw kolumn z tabeli wa tabeli lub tabel zawieraj+cych pobierane dane. SELECT Count(*) AS [Liczba zamówier] FROM Zamowienia 21
Selekcja: SELECT * FROM PRACOWNICY WHERE zarobki > 2000 SELECT * FROM Tabela_A WHERE Numer > 1 22
Projekcja: SELECT nazwisko, imie,, zarobki FROM PRACOWNICY SELECT Numer FROM Tabela_A 23
Selekcja + projekcja: SELECT nazwisko, imie,, zarobki FROM PRACOWNICY WHERE zarobki > 2000 SELECT Numer, Nazwa FROM Tabela_A WHERE NAZWA = "A" 24
Produkt: SELECT * FROM PRACOWNICY, URLOPY SELECT * FROM PRACOWNICY, URLOPY, HISTORIA_ZATRUDNIENIA SELECT * FROM Tabela_A, Tabela_B; 25
Po*+czenie: SELECT nazwisko, imie, data_pocz_urlopu FROM PRACOWNICY, URLOPY WHERE PRACOWNICY.symbol = URLOPY.symbol AND PRACOWNICY.wydzial = ADM SELECT Numer, Nazwa, Ilosc FROM Tabela_A, Tabela_B WHERE Tabela_A.Numer = Tabela_B.Index 26
Unia: SELECT nazwisko, imie,, zarobki FROM PRACOWNICY UNION SELECT nazwisko, imie,, zarobki FROM PRACOWNICY_ARCHIWUM SELECT Numer, Nazwa FROM Tabela_A UNION SELECT Numer, Nazwa FROM Tabela_A_ARCH 27
Przecicie: SELECT nazwisko, imie,, zarobki FROM PRACOWNICY INTERSECT SELECT nazwisko, imie,, zarobki FROM PRACOWNICY_ARCHIWUM Ró&nica: SELECT nazwisko, imie,, zarobki FROM PRACOWNICY MINUS SELECT nazwisko, imie,, zarobki FROM PRACOWNICY_ARCHIWUM 28
Podzapytania: SELECT nazwisko, imie,, zarobki FROM PRACOWNICY WHERE zarobki = (SELECT min(zarobki) FROM PRACOWNICY) Bazy danych SELECT nazwisko, imie,, zarobki FROM PRACOWNICY WHERE zarobki IN (SELECT min(zarobki) FROM PRACOWNICY GROUP BY wydzial) 29
Podzapytania: SELECT wydzial, AVG(zarobki) FROM PRACOWNICY GROUP BY wydzial HAVING AVG(zarobki) ) > (SELECT AVG(zarobki) FROM PRACOWNICY WHERE wydzial = ADM ) Bazy danych 30
Podzapytania: SELECT nazwisko, imie,, zarobki, wydzial FROM PRACOWNICY P WHERE zarobki > (SELECT AVG(zarobki) FROM PRACOWNICY WHERE wydzial = P.wydzial) 31
Definicje danych Standardowe typy danych uywane w jzyku : INTEGER: liczba ca*kowita ze znakiem (4 bajty). SMALLINT: ma*a liczba ca*kowita ze znakiem (2 bajty). DECIMAL (p[,q]): liczba sta*oprzecinkowa ze znakiem; precyzja p okre'la liczb cyfr, z których bdzie sk*ada*a si liczba, a skala q ilo'/ cyfr po przecinku. Je'li pominito q domy'lnie przyjmowane jest 0. FLOAT: liczba zmiennoprzecinkowa ze znakiem (8 bajtów). CHAR(n): *acuch znakowy o sta*ej d*ugo'ci n. VARCHAR(n): *acuch znakowy o zmiennej d*ugo'ci, maksymalnie n znaków. 32
Definicje danych CREATE TABLE - tworzy tabele. Sk*adnia: CREATE TABLE nazwa_tabeli (nazwa_atrybutu_1 typ_atrybutu_1 [, nazwa_atrybutu_2 typ_atrybutu_2 [,...]]) nazwa_tabeli identyfikator tworzonej tabeli. nazwa_atrybutu identyfikator atrybutu. typ_atrybutu typ atrybutu. CREATE TABLE CZESCI (Numer INTEGER, Nazwa VARCHAR(20), Cena DECIMAL(4, 2)) 33
Definicje danych CREATE INDEX - tworzy indeks do tabeli. Indeksy przyspieszaj+ dostp do relacji. Je'li relacja R posiada indeks na atrybucie A, wtedy pobieramy wszystkie krotki t maj+ce t(a) = a w czasie zale&nym od liczby tych krotek, a nie od rozmiaru relacji R. Sk*adnia: CREATE INDEX nazwa_indeksu ON nazwa_tabeli ( nazwa_atrybutu ) nazwa_indeksu identyfikator tworzonego indeksu. nazwa_tabeli identyfikator indeksowanej tabeli. nazwa_atrybutu identyfikator atrybutu. CREATE INDEX IND_NAZWA ON DOSTAWCA (NAZWA) 34
Definicje danych CREATE VIEW - tworzy widok. Widok jest wirtualn+ tabel+, która fizycznie nie istnieje w bazie danych, ale dla u&ytkownika jest widoczna jak zwyk*a tabela. Gdy mówi si o tabeli bazowej, chodzi o kopi ka°o wiersza tabeli przechowywan+ w fizycznym zbiorze. Widoki nie przechowuj+ w*asnych, charakterystycznych, niepowtarzalnych danych. W rzeczywisto'ci system przechowuje definicje widoków (np. zasady dostpu do istniej+cych tabel bazowych w kolejno'ci tworzenia widoków) w zbiorach systemowych. Sk*adnia: CREATE VIEW nazwa_widoku AS wyra(enie_select nazwa_widoku nazwa tworzonego widoku. Wyra(enie_select wyra&enie definiuj+ce widok. CREATE VIEW Zam_hurt AS SELECT K.Nazwa, Z.Liczba FROM KONTRAHENT K, ZAMOWIENIA Z WHERE K.ID_KONT = Z.ID_KONT AND Z.Liczba > 10 35
Definicje danych DROP TABLE, DROP INDEX, DROP VIEW - usuwa odpowiednio tabel, indeks do tabeli, widok. Sk*adnia: DROP TABLE nazwa_tabeli DROP INDEX nazwa_indeksu DROP VIEW nazwa_indeksu Przyk*ady: DROP TABLE Dostawcy DROP INDEX Nazwa_Dostawcy DROP VIEW Zam_hurt 36
INSERT INTO dodanie krotki do tabeli. Bazy danych Manipulowanie danymi Sk*adnia: INSERT INTO nazwa_tabeli (nazwa_atrybutu_1 [, nazwa_atrybutu_2 [,...]]) VALUES (warto>a_atrybutu_1 [, warto>a_atrybutu_2 [,...]]) INSERT INTO DOSTAWCA (Numer, Nazwa, Miasto) VALUES (1, Hurtownia ABC', 'Opole') 37
UPDATE zmiana warto'ci w tabeli. Bazy danych Manipulowanie danymi Sk*adnia: UPDATE nazwa_tabeli SET nazwa_atrybutu_1 = warto>a_1 [,... [, nazwa_atrybutu_k = warto>a_k]] WHERE warunek UPDATE Czesci SET Cena = 550 WHERE Nazwa = 'Monitor 15' 38
Manipulowanie danymi DELETE FROM usuwa krotki z tabeli. Sk*adnia: DELETE FROM nazwa_tabeli WHERE warunek DELETE FROM Dostawca WHERE Nazwa = 'Hurtownia ABC' 39
Manipulowanie danymi ALTER TABLE rozkaz s*u&+cy do zmieniania tabeli. Wykonuje nastpuj+ce operacje: dodaje kolumny i warunki, modyfikuje definicje kolumn jak typy i warunki, usuwa warunki, modyfikuje przysz*y sposób alokacji przestrzeni, zapisuje, &e operacja BACKUP zosta*a wykonana dla tej tabeli. Sk*adnia: ALTER TABLE nazwa_tabeli [ADD ( kolumna_1 [, {kolumna_1]...) ] [MODIFY (kolumna_1 [,kolumna_2]...)] [DROP CONSTRAINT ograniczanie]... [BACKUP] ALTER TABLE pracownicy MODIFY (placa NUMBER(9, 2)) 40