pdf do druku
Transkrypt
pdf do druku
1 Organizacyjne Kwestie organizacyjne • Kontakt: – mail: [email protected] – strona: http://icis.pcz.pl/~olga – konsultacje: na stronie (po wcześniejszym umówieniu drogą mailową) • Przedmiot kończy się egzaminem Plan przedmiotu • Repetytorium SQL • PL/SQL, dynamiczny SQL • Obiektowość w bazach danych • SQL3 • Bazy danych przestrzennych • Model semistrukturalny, Xpath, Xquery • XML w SQL • Wstrzyknięcia SQL Literatura • C. J. Date, Wprowadzenie do systemów baz danych, WNT - W-wa, (seria: Klasyka Informatyki), 2000 • J. D. Ullman, Systemy baz danych, WNT - W-wa, 1998 • J. D. Ullman, J. Widom, Podstawowy wykład z systemów baz danych, WNT, W-wa, 2000 (seria: Klasyka Informatyki) • H. Garcia-Molina, J. D. Ullman, J. Widom, Implementacja systemów baz danych, WNT, 2003 (seria: Klasyka Informatyki) • P. Beynon-Davies, Systemy baz danych (wyd. 3 zmienione i rozszerzone), WNT W-wa, 2003 • M. McLaughlin, Oracle Database 11g, Programowanie w języku PL/SQL, Helion 2009 • J. Price, Oracle Database 11g i SQL, Programowanie, Helion 2009 • D. Tow, SQL optymalizacja, Helion, 2004 • M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003 • J. Gennick, SQL leksykon kieszonkowy, Helion 2004 • Lausen George, Vossen Gottfried - Obiektowe bazy danych. Modele danych i języki, WNT, Warszawa, 2000 1 • Harrington Jan L. - Obiektowe bazy danych, Mikom, Warszawa, 2001 • T. W. Ling, M. L. Lee, G. Dobbie - Semistructured Database Design Springer-Verlag GmbH 2005. Pożyteczne strony • http://www.ploug.org.pl/ • http://www.oracle.com/technology/documentation/index.html • http://www.odbms.org/ • http://www.morganslibrary.org/library.html • http://troels.arvin.dk/db/rdbms/ 2 Wprowadzenie do języka SQL Język SQL Trochę historii: • SQL - Structured Query Language • stworzony na początku lat 70 ubiegłego wieku w IBM przez Donalda Messerly’ego, Donalda Chamberlina oraz Raymonda Boyce’a pod nazwą SEQUEL • pierwszy SZBD - System R utworzony przez IBM w 1973 r. wykorzystujący SEQUEL • pierwszy komercyjny SZBD stworzony przez Relational Software (obecnie Oracle) w 1979 r. dla amerykańskiej marynarki wojennej, CIA i kilku agencji rządowych; użycie SQL’a • od 1986 SQL jest oficjalnym standardem (ANSI), od 1987 (ISO). Cechy SQL Cechy języka SQL: • język deklaratywny • język interpretowany • podjęzyk danych • dostęp do danych z poziomu relacji • zbliżony konstrukcją do języka naturalnego • wykorzystuje logikę trójwartościową • wykorzystuje algebrę relacyjną • nie jest do końca zgodny z modelem relacyjnym 2 Możliwości SQL Możliwości języka SQL: • wyszukiwanie danych • wstawianie, usuwanie i modyfikacja danych • tworzenie baz danych • tworzenie, modyfikowanie i usuwanie obiektów relacyjnych • zarządzanie transakcjami • zarządzanie bazą danych Formy SQL • SQL interakcyjny (autonomiczny) • Statyczny kod SQL (Static SQL) – Osadzony SQL (Embedded SQL) – Język modułów • Dynamiczny kod SQL (Dynamic SQL) Składowe SQL • DML (Data Manipulation Language) do manipulacji danymi zawierający polecenia SELECT, UPDATE, INSERT, DELETE itp; • DDL (Data Definition Language) do definiowania struktur dla danych (CREATE, DROP, ALTER itp.); • DCL (Data Control Language) - do zarządzania bazą danych (GRANT, REVOKE, COMMIT, ROLLBACK itp.). Wady SQL • standard nie jest przestrzegany przez różnych dostawców • zbyt łatwe uzyskanie wyniku iloczynu kartezjańskiego • czasem brak konsekwencji w składni wynikająca z pozostawienia starych form • zbliżenie SQL’a do języka mówionego spowodowało większą złożoność składni • standard nie określa zachowań bazy danych w wielu sytuacjach (np.: indeksowanie, składowanie) 3 3 Podstawowe elementy języka Polecenie SQL Składniki polecenia (instrukcji) SQL • klauzule, niektóre opcjonalne • wyrażenia • predykaty określające warunki • średnik kończący polecenie • wielkość liter w składni jest ignorowana (w wartościach pól jest rozróżniana) Polecenie SQL Podstawowe typy danych SQL ANSI • CHARACTER(n), CHAR(n) - ciąg znaków o stałej długości określonej przez rozmiar • CHARACTER VARYING(n), CHAR VARYING(n) - ciąg znaków o zmiennej długości, nie przekraczającej podanego rozmiaru • NUMERIC(p,s), DECIMAL(p,s) - liczby o ustalonej precyzji p i skali s • INTEGER, INT, SMALLINT - liczby całkowite • FLOAT(b), DOUBLE PRECISION, REAL - liczby zmiennoprzecinkowe • DATE - data w formacie: YYYY-MM-DD • TIME - czas w formacie: HH:MM:SS.p • TIMESTAMP - data wraz z czasem - znacznik czasu w formacie: YYYY-MM-DD HH:MM:SS.p • INTERVAL - przedział czasu • BLOB - dane binarne • CLOB - dane znakowe • XML - dane w języku XML 4 Aliasy typów danych SQL ANSI Oracle DB2 MySQL PostgrSQL CHARACTER(n) CHAR(n) CHARACTER VARYING(n) CHAR VARYING(n) NUMERIC(p,s) DECIMAL(p,s) INTEGER INT, SMALLINT FLOAT(b) DOUBLE PRECISION REAL DATE TIME TIMESTAMP INTERVAL BLOB CLOB XML CHAR(n) CHARACTER(n) CHAR(n) CHAR(n) MS SQL CHAR(n) VARCHAR2(n) VARCHAR(n) VARCHAR(n) VARCHAR(n) VARCHAR(n) NUMBER(p,s) DECIMAL(p,s) DECIMAL(p,s) NUMERIC(p,s) DECIMAL(p,s) NUMBER(38) INT, INTEGER INT, INTEGER INTEGER NUMBER(p,s) INTEGER SMALLINT FLOAT(b) FLOAT(b) NUMERIC(p,s) FLOAT(b) DATE DATE TIMESTAMP INTERVAL BLOB CLOB XMLTYPE DATE TIME TIMESTAMP BLOB CLOB XML DATE TIME TIMESTAMP +BLOB TEXT +- DATE TIME TIMESTAMP INTERVAL BYTEA TEXT XML DATETIME DATETIME DATETIME VARBINARY(n) TEXT +- Literały • literały tekstowe znajdują się w apostrofach: ’tekst’ • daty, przedziały i znaczniki czasowe zapisywane jak literały tekstowe w apostrofach; wymagają zastosowania formatu YYYY-MM-DD HH:MM:SS.p, np. ’1998-12-19 17:23:34.45’ • literały liczbowe: 12, 45e-2 (można stosować notację naukową) Przedziały czasu • wyróżniamy dwa typy przedziałów czasowych: miesiące do lat oraz sekundy do dni • przykłady: INTERVAL ’3-5’ YEAR TO MONTH - przedział 3 lat i 5 miesięcy INTERVAL ’5’ YEAR - przedział 5 lat INTERVAL ’5 10:12’ DAY TO MINUTE - przedział 5 dni 10 godzin i 12 minut • przedziały maja szczególne zastosowanie w tzw. arytmetyce czasu Arytmetyka czasu Typ DATE/TIMESTAMP DATE/TIMESTAMP INTERVAL TIMESTAMP DATE Operator +++ +- Typ NUMERIC INTERVAL DATE/TIMESTAMP DATE/TIMESTAMP DATE INTERVAL INTERVAL NUMERIC +*/ * INTERVAL NUMERIC INTERVAL Typ wyniku DATE DATE/TIMESTAMP DATE/TIMESTAMP INTERVAL INTERVAL (w Oracle NUMBER - liczba dni) INTERVAL INTERVAL INTERVAL Operatory • operatory arytmetyczne (+, -,*,/) • operator przypisania = • operatory porównania ( =, <>, <, <=, >, >=, LIKE, NOT LIKE) 5 • operator zawarcia w przedziale BETWEEN • operator zawarcia w zbiorze IN • operatory konkatenacji w standardzie: || (zachowany w Oracle, DB2 i PostgreSQL, zaś w MySQL funkcja Concat, w MS SQL operator +) • operatory logiczne (ALL, AND, ANY, EXISTS, NOT, OR ) • operatory zbiorowe (UNION, INTERSECT, EXCEPT (MINUS w Oracle)) • operatory unarne (+, -) Hierarchia operatorów • ( ) • +, - (opeartory unarne) • *, / • +, • =, >, <, >=, <=, <> • NOT • AND • ALL, ANY, BETWEEN, IN, LIKE, OR, SOME • = (przypisanie) Wyrażenia • atrybuty (nazwisko, placa, data_zatrudnienia, itp.) • pseudokolumny (np. CURRVAL, NEXTVAL, LEVEL, ROWID, ROWNUM) • stałe liczbowe (20, 16, 24.289, itp.) • stałe łańcuchowe (’Kowalski’, ’Dyrektor’, itp.) • działania arytmetyczne (placa+dod_funkcyjny, placa*12, 5/6, itp.) • konkatenacja łańcuchów (imie||’ ’||nazwisko, itp.) • funkcje • relacje 6 4 DML - zapytania Konwencje typograficzne • DUŻE LITERY - słowa kluczowe SQL • małe litery - elementy definiowane przez użytkownika • znaki [] - oznaczenie elementów opcjonalnych • znaki {} - oznaczenie grupy elementów opcjonalnych, z których jeden jest obowiązkowy • znak | - znak oddzielający elementy opcjonalne Składnia zapytania SELECT [DISTINCT] lista_wyrazen FROM lista_relacji [WHERE warunki] [GROUP BY kryteria [HAVING warunki]] [ORDER BY kryteria [DESC]]; • klauzule SELECT oraz FROM są obowiązkowe • kolejność poszczególnych klauzul nie może być zmieniona Klauzula SELECT klauzula SELECT określa jakie kolumny znajdą się w relacji wynikowej (określa atrybuty rzutu); słowo kluczowe DISTINCT usuwa z wyniku zapytania powtórzenia; operator * oznacza wszystkie atrybuty relacji wejściowych. Istnieje możliwość stosowania aliasów (przezwisk) dla wyrażeń: SELECT imiona||’ ’||nazwisko Dane FROM studenci; SELECT imiona||’ ’||nazwisko FROM studenci; AS Dane SELECT imiona||’ ’||nazwisko FROM studenci; AS "Dane osobowe" Klauzula FROM i WHERE klauzula FROM określa relacje wejściowe, z których będą pobierane dane; nazwom tabel można nadać aliasy. klauzula WHERE określa warunki jakie muszą być spełnione przez wiersze relacji wynikowej (realizacja restrykcji). SELECT imiona, nazwisko FROM studenci WHERE rok = 2 AND (gr_dziekan = 1 OR gr_dziekan = 2); 7 Klauzula GROUP BY klauzula GROUP BY umożliwia podzielenie relacji na podzbiory - agregację. Pojedynczy podzbiór/grupę stanowią wiersze, dla których kryterium grupowania ma identyczną wartość. Na liście wyrażeń klauzuli SELECT mogą wówczas stanąć jedynie te wyrażenia, które są przedmiotem działania klauzuli GROUP BY, oraz argumenty funkcji agregujących. SELECT rok, Count(nazwisko) FROM studenci GROUP BY rok; SELECT rok,gr_dziekan, Count(nazwisko) FROM studenci GROUP BY rok, gr_dziekan; Klauzula HAVING klauzula HAVING określa warunki, które muszą być spełnione przez podzbiór by został uwzględniony w relacji wynikowej; (warunki zawarte w klazuli WHERE tyczą się relacji przed agregacją, zaś w HAVING po agregacji). SELECT rok, Count(nazwisko) FROM studenci GROUP BY rok HAVING Count(nazwisko) > 100; SELECT rok,gr_dziekan, Count(nazwisko) FROM studenci GROUP BY rok, gr_dziekan HAVING Count(nazwisko) > 20; Klauzula ORDER BY klauzula ORDER BY umożliwia posortowanie danych wynikowych według zadanego kryterium, którym może być atrybut relacji wejściowych, alias, albo numer na liście wyrażeń klauzuli SELECT. Odwrotny porządek sortowanie uzyskujemy poprzez dodanie słowa kluczowego DESC. SELECT imiona, nazwisko, data_urodzenia AS urodziny FROM studenci ORDER BY nazwisko, 1 DESC, urodziny; Operatory zbiorowe UNION, INTERSECT, EXCEPT/MINUS używane są do przeprowadzania operacji sumy, przecięcia lub różnicy na dwóch lub więcej kompatybilnych relacjach będących wynikami zapytań. SELECT stanowisko FROM pracownicy WHERE id_dzialu=20 INTERSECT SELECT stanowisko FROM pracownicy WHERE id_dzialu=30; 8 Złączenia Złączenia tabel w języku SQL uzyskuje się poprzez wstawienie więcej niż jednej relacji w klazuli FROM oraz polączenie ich odpowiednim operatorem. Notacja w standardzie ANSI SQL FROM tabela1 [AS alias] {CROSS JOIN | { [NATURAL] [typ_laczenia] JOIN tabela2 [AS alias] { ON warunek1 [{AND|OR} warunek2] [...] ] | USING (atrybut1 [,...]) } } Zdefiniowano następujące typy złączeń: • iloczyn kartezjański • złączenia naturalne • θ-złączenia • złaczenia zewnętrzne • samozłączenia Iloczyn kartezjański Iloczyn kartezjański daje w wyniku relację składajacą się ze wszystkich możliwych kombinacji krotek obu łączonych relacji. SELECT * FROM pracownicy CROSS JOIN dzialy; Złączenie naturalne Złączenie naturalne daje w wyniku iloczyn kartezjański łączonych relacji ograniczony do tych krotek, dla których atrybuty o tych samych nazwach i typach w obu relacjach miały równe wartości. SELECT * FROM pracownicy NATURAL JOIN dzialy; Złączenie warunkowe θ-złączenie daje w wyniku iloczyn kartezjański łączonych relacji ograniczony do tych krotek, dla których został spełniony warunek θ. SELECT * FROM pracownicy p [INNER] JOIN dzialy d ON (p.id_dzialu = d.id_dzialu); SELECT * FROM pracownicy p [INNER] JOIN dzialy d USING (id_dzialu); 9 Złączenie zewnętrzne Złączenie zewnętrzne rozszerza rezultat złączenia wewnętrznego o te wiersze jednej lub obu tabel, dla których nie odnaleziono odpowiedników w drugiej tabeli. Wiersze stanowiące rozszerzenie są wypełnione wartością NULL. Złączenia zewnętrzne dzielą się na: • lewostronne • prawostronne • pełne SELECT * FROM pracownicy p {LEFT|RIGHT|FULL} [OUTER] JOIN dzialy d ON (p.id_dzialu = d.id_dzialu); Samozłączenie Samozłączenie złączenie tabeli samej ze sobą. SELECT p.nazwisko, s.nazwisko FROM pracownicy p JOIN pracownicy s ON (p.kierownik = s.nr_akt); Podzapytania Podzapytanie to zapytanie zagnieżdżone w innym zapytaniu, może być zagnieżdżone w klauzulach: SELECT, FROM, WHERE oraz HAVING. Podzapytania są ograniczane nawiasami okrągłymi. Zapytania można zagnieżdżać wielokrotnie. Istnieją dwa typy podzapytań: • podzapytanie proste - wykonywane w pierwszej kolejności, jako wynik pośredni trafiają do zapytania zewnętrznego. SELECT nazwisko FROM pracownicy WHERE placa = (SELECT Min(placa) FROM pracownicy); • podzapytanie skorelowane - wykonywane dla każdego wiersza z zapytania zewnętrznego. SELECT nazwisko, rok FROM studenci s WHERE data_urodzenia = (SELECT Max(data_urodzenia) FROM studenci WHERE rok = s.rok); 10 5 Przetwarzanie transakcyjne Transakcja Transakcja jest sekwencją logicznie powiązanych operacji na bazie danych, która przeprowadza bazę danych z jednego stanu spójnego w inny stan spójny. Typy operacji na bazie danych obejmują: odczyt i zapis danych oraz zakończenie połączone z akceptacją (zatwierdzeniem) lub wycofaniem transakcji. Przykład BEGIN TRANSACTION; INSERT INTO zamowienia (nr_zam, l_sztuk, id_czesci) VALUES (1234, 1000, zab235); UPDATE stany_magazynu SET l_sztuk = l_sztuk - 1000 WHERE id_czesci LIKE ’zab235’; COMMIT; 5.1 Cechy transakcji Własności ACID • Atomicity - atomowość - zbiór operacji wchodzących w skład transakcji jest niepodzielny, to znaczy albo zostaną wykonane wszystkie operacje transakcji albo żadna. • Consistency - spójność - transakcja przeprowadza bazę danych z jednego stanu spójnego do innego stanu spójnego. W trakcie wykonywania transakcji baza danych może być przejściowo niespójna. Transakcja nie może naruszać ograniczeń integralnościowych. • Isolation - izolacja - transakcje są od siebie logicznie odseparowane. Transakcje oddziałują na siebie poprzez dane. Mimo współbieżnego wykonywania, transakcje widzą stan bazy danych tak, jak gdyby były wykonywane w sposób sekwencyjny. • Durability - trwałość - wyniki zatwierdzonych transakcji nie mogą zostać utracone w wyniku wystąpienia awarii systemu. Zatwierdzone dane w bazie danych, w przypadku awarii, muszą być odtwarzalne. 5.2 Rozpoczęcie i zakończenie Rozpoczęcie transakcji Niejawnie: • Wprowadzenie pierwszej poprawnej instrukcji w sesji użytkownika. • Zakończenie poprzedniej transakcji. Jawnie: • w niektórych systemach bazodanowych wydanie polecenia START TRANSACTION 11 Zakończenie transakcji Jawnie: • wydanie polecenia COMMIT - zatwierdzenie zmian, • wydanie polecenia ROLLBACK - wycofanie zmian. Niejawnie: • wylogowanie - zatwierdzenie zmian, • wydanie polecenia DDL lub DCL - zatwierdzenie zmian, • awaria systemu - wycofanie zmian. Zatwierdzenie transakcji Skutki zatwierdzenia transakcji: • zwolnienie blokad, • usunięcie punktów bezpieczeństwa, • sprawdzenie odroczonych ograniczeń integralnościowych, • trwały zapis zmian, • widoczność zmian dla innych transakcji. Wycofanie transakcji Skutki wycofania transakcji: • zwolnienie blokad, • anulowanie zmian - stan bazy sprzed transakcji. 5.3 Punkty bezpieczeństwa Punkty bezpieczeństwa • Tworzenie punktu bezpieczeństwa: SAVEPOINT nazwa_punktu; • Usuwanie punktu bezpieczeństwa: RELEASE SAVEPOINT nazwa_punktu; • Wycofanie do punktu bezpieczeństwa: ROLLBACK TO SAVEPOINT nazwa_punktu; 12 Punkty bezpieczeństwa - przykład UPDATE pracownicy SET placa = placa + 500 WHERE nr_akt = 8901; SAVEPOINT s1; UPDATE pracownicy SET dod_funkcyjny = 1.1*dod_funkcyjny WHERE nr_akt = 8902; SAVEPOINT s2; DELETE FROM pracownicy WHERE nr_akt = 9120; ROLLBACK TO SAVEPOINT s1; ROLLBACK; Punkty bezpieczeństwa - przykład DELETE FROM pracownicy WHERE nr_akt = 9120; SAVEPOINT s1; ALTER TABLE pracownicy RENAME COLUMN dod_funkcyjny TO placa_dod; 6 Źródła Źródła W wykładzie wykorzystano materiały: • M. Lentner, Oracle 9i Kompletny podręcznik użytkownika, PJWSTK - W-wa, 2003 • J. Gennick, SQL leksykon kieszonkowy, Helion 2004 • http://sqlnut.atw.hu/ 13