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

Podobne dokumenty