32
BAZY DANYCH - WYKŁADY POJĘCIA PODSTAWOWE Dane: - to fakty - to reprezentacja o określonej treści i strukturze, nadająca się do przechowywania, przesyłania oraz wykonania działań logicznych i matematycznych - to typy proste (bazowe; liczby, teksty, daty) i złożone (masowe; kolekcje, relacje, wielozbiory) oraz abstrakcyjne typy danych Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych w oparciu o pewien model danych, na których można wykonywać określone operacje (aspekt składniowy i operacyjny) - reprezentuje pewien fragment świata rzeczywistego (aspekt semantyczny) - jest projektowana, tworzona i utrzymywana z punktu widzenia przydatności dla określonych zastosowań (aspekt pragmatyczny) Model danych – pojęcie niezbyt jednoznaczne, którego znaczenie jest wypadkową takich cech: - metajęzyk (pojęcia, terminologia) do mówienia o danych, systemach baz danych i przetwarzaniu - sposób rozumienia organizacji danych - języki opisu i przetwarzania danych: diagramy struktur danych, języki zapytań - ogólne założenia dotyczące architektury systemu bazy danych - ograniczenia ideologiczne lub teorie matematyczne dotyczące struktur danych i dostępu do danych Model danych – jako architektura systemu baz danych obejmuje: - definicję danych - operowanie danymi - integralność danych - można wyróżnić trzy główne typy: o proste modele danych (system plików) o klasyczne (hierarchiczne, sieciowe, relacyjne) o semantyczne (częściowo obiektowe) Baza danych – w zależności od przyjętego punktu widzenia, może być traktowana co najmniej jako: - model świata rzeczywistego - zasób systemu informacyjnego - element składowy systemu - uniwersum interpretacji języka danych - zbiór struktur danych Własności baz danych: - abstrakcja danych - niezależność - integralność - współdzielenie - integracja - trwałość - bezpieczeństwo 1

BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Embed Size (px)

Citation preview

Page 1: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

BAZY DANYCH - WYKŁADY

POJĘCIA PODSTAWOWE

Dane:- to fakty- to reprezentacja o określonej treści i strukturze, nadająca się do przechowywania,

przesyłania oraz wykonania działań logicznych i matematycznych- to typy proste (bazowe; liczby, teksty, daty) i złożone (masowe; kolekcje, relacje,

wielozbiory) oraz abstrakcyjne typy danych

Baza danych:- jest logicznie spójnym zestawem danych i metadanych zbudowanych w oparciu o pewien

model danych, na których można wykonywać określone operacje (aspekt składniowy ioperacyjny)

- reprezentuje pewien fragment świata rzeczywistego (aspekt semantyczny)- jest projektowana, tworzona i utrzymywana z punktu widzenia przydatności dla

określonych zastosowań (aspekt pragmatyczny)

Model danych – pojęcie niezbyt jednoznaczne, którego znaczenie jest wypadkową takich cech:- metajęzyk (pojęcia, terminologia) do mówienia o danych, systemach baz danych i

przetwarzaniu- sposób rozumienia organizacji danych- języki opisu i przetwarzania danych: diagramy struktur danych, języki zapytań- ogólne założenia dotyczące architektury systemu bazy danych- ograniczenia ideologiczne lub teorie matematyczne dotyczące struktur danych i dostępu

do danych

Model danych – jako architektura systemu baz danych obejmuje:- definicję danych- operowanie danymi- integralność danych- można wyróżnić trzy główne typy:

o proste modele danych (system plików)o klasyczne (hierarchiczne, sieciowe, relacyjne)o semantyczne (częściowo obiektowe)

Baza danych – w zależności od przyjętego punktu widzenia, może być traktowana co najmniejjako:

- model świata rzeczywistego- zasób systemu informacyjnego- element składowy systemu- uniwersum interpretacji języka danych- zbiór struktur danych

Własności baz danych:- abstrakcja danych- niezależność- integralność- współdzielenie- integracja- trwałość- bezpieczeństwo

1

Page 2: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Zestaw narzędziInterfejs

Jądro systemuBAZA

DANYCH

System zarządzania bazą danych (database management system, DBMS) systemoprogramowania zawierający w szczególności następujące mechanizmy:

- środki do gromadzenia, utrzymywania i administrowania trwałymi i masowymi zasobamidanych

- środki zapewniające spójność i bezpieczeństwo danych- sprawny dostęp do danych (poprzez język zapytań)- środki programistyczne (API dla popularnych j. programowania)- jednoczesny dostęp do danych dla wielu użytkowników- środki pozwalające na odtwarzanie zawartości baz danych po awarii- środki optymalizujące pamięć i czas dostępu- współdziałanie w środowisku rozproszonych

Proces tworzenia bazy danych:- analiza wymagań dziedziny modelowej- modelowanie koncepcyjne- modelowanie logiczne- modelowanie fizyczne- implementacja modelu w ramach systemu baz danych

Model encja—związek – zaliczany do modeli pojęciowych; język wizualnych diagramów- encja – grupa obiektów o podobnych własnościach, którą można i warto wyróżnić w

modelowej rzeczywistości- związek – grupa powiązań między encjami- atrybut – cecha charakterystyczna encję lub związek- generalizacja/specjalizacja – zawieranie się grup obiektów- liczności – dla danej encji A, określenie minimalnej i maksymalnej liczby obiektów innej

encji

Rys. Przykładowy diagram encja—związek

2

Page 3: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

JĘZYK ZAPYTAŃ

- wysoki poziom konceptualizacji i abstrakcji- deklaracyjny- makroskopowy- naturalny- efektywny (optymalizowany)- uniwersalny- niezależny od dziedziny zastosowań- pozwalający na pracę w trybie interakcyjnym

Podstawowa składnia:

SELECT [DISTINCT] przecinkowa lista wyrażeńFROM przecinkowa lista tabel[WHERE warunek logiczny][GROUP BY kryterium grupowania[HAVING warunek logiczny]][ORDER BY kryterium porządkowania];

Operatory:- porównań - =, >, <, <=, >=, <> !=- logiczne – not, and, or- przynależności – [NOT] IN- zawierania – [NOT] BETWEEN- wzorca – [NOT] LIKE- testujący Null – IS [NOT] NULL

Relacja – to specyficzny rodzaj tablicy, która- określa pojedynczą jednostkę (entity) świata rzeczywistego- nie zawiera zduplikowanych wierszy tzn. zawsze istnieje klucz główny- kolumny i wiersze są nieuporządkowane

ZAPYTANIA

Centralną instrukcją języka SQL jest instrukcja służąca do wydobywania informacji z bazydanych. Jest nią instrukcja SELECT, określająca, z jakich relacji (tabel) w bazie danych mają byćsprawdzone dane, jakie warunki mają spełniać dane i w jakiej dokładnie postaci mają się pojawićprzed użytkownikiem.Instrukcja SELECT składa się z kilku części nazywanych klauzulami (frazami). Ogólna postać:

SELECT [DISTINCT] <nazwa atrybutu>./<wyrażenie> [[AS]<alias>],...FROM <nazwa relacji 1>, <nazwa relacji 2>,...[WHERE <nazwa warunku>][GROUP BY <wyrażenie>/<nazwa atrybutu>,...[HAVING <warunek logiczny>]][ORDER BY <wyrażenie>/<nazwa atrybutu> [ASC/DESC],...]

UWAGA!Powtarzające się krotki (wiersze) relacji nie są automatycznie eliminowane z wyników zapytań.Słowo DISTINCT oznacza eliminację powtarzających się wierszy.

W miejscu nazwy atrybutu możne wystąpić wyrażenie. Wyrażeniami na liście SELECT mogązostać nadane nazwy zastępcze, czyli aliasy. Alias może mieć postać prostego identyfikatora,

3

Page 4: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

czyli napisu złożonego z liter, cyfr i znaków podkreślenia albo ograniczonego identyfikatora,czyli dowolnego napisu ograniczonego podwójnym cudzysłowem np. „zarobki pracownika”.W szczególności w odpowiednikiem identyfikatora mogą występować spacje, które sąniedozwolone w prostym identyfikatorze.

Przykład:Uporządkować listę nazwisk pracowników wraz z identyfikatorami i okresem zatrudnienia wpełnych latach

SELECT numer, nazwiskoTRUNC (MONTHS_BETWEEN(SYSDATE, data_zatrudnienia)/12) AS zatrudnienieFROM pracownik ORDER BY zatrudnienie DESC;

Przy wypisywaniu rezultatów (wyników), jako tytuł kolumny są używane aliasy. Mogą onewystępować w klauzuli ORDER BY jak w powyższym przykładzie gdzie porządkujemy dane opracownikach wg stażu pracy.Onie klauzule SELECT i FROM są wymagane w każdym zapytaniu.

Zasady wykonania prostego zapytania:

1. Weź relację podaną w klauzuli FROM2. Jeśli występuje klauzula WHERE, do każdej krotki danej relacji zastosuj warunek

logiczny. Pozostaw krotki dające wartości TRUE (usuwając krotki False oraz Null)3. Do każdej pozostającej krotki oblicz wartości wyrażenia na liście SELECT4. Jeśli po słowie SELECT występuje DISTINCT usuń duplikaty wśród wynikowych

krotek5. Jeśli występuje klauzula ORDER BY, wykonaj porządkowanie zgodnie ze specyfikacją

UWAGA!Specjalna wartość Null – aby wskazać niepełne lub nieznane informację. Ta wartość różna odzera i spacji jest szczególnie użyteczna przy powiązaniu kluczy głównego i obcego. Pojęcie Nullnie jest jednak do końca akceptowane. Codd utrzymuje, że wprowadzenie wartości Null dosystemu relacyjnego zmienia konwencjonalną logikę dwuwartościową (True, False) na logikętrójwartościową (prawda, fałsz, nieznane). Oto tabelki definiujące operatory logiczne w sytuacjiwystępowania trzech wartości logicznych.

OR TRUE FALSE NULLTRUE TRUE TRUE TRUEFALSE TRUE FALSE NULLNULL TRUE NULL NULL

AND TRUE FALSE NULLTRUE TRUE FALSE NULLFALSE FALSE FALSE FALSENULL NULL FALSE NULL

NOT TRUE FALSE NULLFALSE TRUE NULL

Przy prezentacji danych użyteczną operacją jest reprezentowanie wartości Null jako konkretnejwartości. W ORACLE używamy specjalną funkcję NVL(v1, v2), której wartością jest v2, jeśliv1 jest Null, w przeciwnym razie v1. Np.:

NVL (zarobki,0) NVL (stopień, ‘brak’)

4

Page 5: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Klauzula ORDER BYKlauzula ta może występować wyłącznie jako ostatnia klauzula polecenia SELECT. Domyślniestosuje się narastający porządek sortowania, co w [przypadku liczb oznacza, że mniejszepoprzedzają większe, w przypadku dat, że wcześniejsze poprzedzają późniejsze, natomiast wprzypadku łańcuchów znaków, że są one wyświetlane zgodnie z porządkiem alfabetycznym. Liczba atrybutów porządkowania jest jednak ograniczona liczbą atrybutów relacji. Atrybutywymieniamy kolejno w klauzuli ORDER BY oddzielając je przecinkami. Ich kolejność jestistotna: porządkowanie odbywa się, bowiem najpierw według wartości pierwszego atrybutu,następnie, jeśli wartości te są równe dla dwóch lub więcej krotek, według drugiego atrybutu, itd.Ponadto po każdym z atrybutów porządkowania można użyć słowa kluczowego DESC, którepowoduje odwrócenie domyślnego, narastającego porządku na malejący.Użycie atrybutu w klauzuli ORDER BY nie pociąga za sobą konieczności jego użycia w klauzuliSELECT.W klauzuli ORDER BY do wynikowych kolumn można odwołać się używając ich kolejnychnumerów 1,2,...

Funkcje statyczne (agregujące) związane z grupowaniem:

- AVG ([distinct] wyr_licz) – średnia arytmetyczna (wartość Null nie jest brana poduwagę)

- COUNT ([distinct] wyr|*) – zliczanie (ile jest wszystkich wierszy w tabeli)- MAX ([distinct] wyr) – wartość maksymalna- MIN ([distinct] wyr) – wartość minimalna- SUM ([distinct] wyr_licz) – suma arytmetyczna

Klauzula GROUP BYUmożliwia podział krotek relacji na grupy. Krotki tej samej grupy mają identyczną wartośćatrybutu grupowania, który wskazano w klauzuli. Po podziale do każdej z grup można stosowaćfunkcje agregujące. Klauzula GROUP BY może być stosowana rekurencyjnie, co oznacza, żemożna w niej wskazać wiele, atrybutów grupowania. W takim przypadku jest możliwewydzielenie podgrupy w ramach wcześniejszej wydzielonej grupy. Kolejność dzielenia relacji nagrupy i podgrupy odpowiada kolejności atrybutów grupowania.Przed grupowaniem krotek relacji jest możliwe wykonanie na niej projekcji lub selekcji.Projekcję realizujemy klasycznie – przez wskazanie atrybutów po słowie kluczowym SELECT.Podobnie jest z selekcją, którą realizujemy przez wskazanie warunku (warunków) w klauzuliWHERE.Stosowanie funkcji statycznych w klauzuli SELECT wyklucza możliwość wyprowadzeniawartości atrybutów pojedynczej krotki chyba, że nazwa atrybutu jest wymieniona w klauzuliGROUP BY. W konsekwencji każda nazwa atrybutu występująca na liście SELECT musi takżepojawić się w klauzuli GROUP BY, jeśli nie argumentem funkcji statycznych.W szczególności cała relacja (tablica) jest grupą podstawową.

Poprawne są zapytania postaci:

SELECT COUNT(*) AS „Liczba pracowników” FROM pracownik; SELECT SUM(płaca) AS „Kwota ogółem” FROM pracownik;

SELECT id_zesp, COUNT(*) FROM pracownik GROUP BY id_zesp;

SELECT etat COUNT(*), AVG(płaca) FROM pracownik WHERE etat!=’DYREKTOR’ GROUP BY etat;

5

Page 6: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

SELECT rok, max(data_urodzenia) FROM student GROUP BY rok;

SELECT to_char(data_urodzenia,’DAY’), COUNT(*) FROM student GROUP BY to_char(data_urodzenia,’DAY’);

SELECT imiona,COUNT(*) FROM student GROUP BY imiona ORDER BY 2;

SELECT gr_dziekan,COUNT(*) FROM student WHERE rok=3 and kierunek=’INFORMATYKA’ GROUP BY gr_dziekan;

Klauzula HAVINGPodobnie jak WHERE umożliwia selekcję informacji. Służy do usuwania z wyniku zapytanianieistotnych grup i na zazwyczaj związek z zastosowaniem wartości funkcji statycznych.

* SELECT id_zesp,COUNT(*) FROM pracownik GROUP BY id_zesp HAVING AVG(płaca)>1200;

* SELECT p.id_zesp, nazwisko, nazwa FROM pracownik p, zespół z WHERE p.id_zesp=z.id_zesp OTHER BY nazwa, nazwisko;

Można dokonać złączenia relacji z nią samą

* SELECT p.nazwisko, p.data_zatrudnienia, k.nazwisko, k.data_zatrudnienia FROM pracownik k, pracownik p WHERE p.szef=k.numer and p.data_zatrudnienia<k.data_zatrudnienia;

UWAGA!Pojedyncze polecenie SELECT może służyć do połączenia więcej niż dwóch relacji, którezgodnie z ogólnym formatem realizacji połączenia, wskazujemy w klauzuli FROM.Pamiętać należy, że w celu połączenia n relacji jest konieczne określenie, co najmniej n-1warunków połączenia.Najbardziej naturalnym rodzajem złączenia jest związek klucz głównyklucz obcy. Jednak wogólności warunek złączenia dwóch lub więcej relacji może być zupełnie dowolny.

* SELECT nazwisko, adres, nazwa FROM pracownik p, zespół z WHERE p.id_zesp=z.od_zesp and płaca>1500;

* SELECT nazwisko, adres FROM pracownik p, zespół z WHERE adres LIKE ‘Armii Krajowej%’ and p.id_zesp=z.od_zesp ORDER BY nazwisko;

Składnia języka SQL ma odzwierciedlenie w algebrze relacyjnej

Algebra relacyjna – jest zbiorem kilku operatorów. Każdy operator bierze jedną lub więcejrelacji jako argument i produkuje jedną relację jako wynik. Trzema głównymi operatoramialgebry relacji są selekcja (ograniczenia), rzut (projekcja), złączanie.

Selekcja – jest operatorem, który bierze jedną relację jako swój argument i produkuje w wynikujedną relację. Składnia operatora selekcji jest następująca:

RESTRICT <nazwa relacji (tabeli)> [WHERE <warunek>] ==> <relacja wynikowa>

6

Page 7: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Rzut operatora rzutu bierze jedną relację jako swój argument i produkuje jedną relacjęwynikową. Rzut jest pionowym ograniczeniem. Składnia operatora jest następująca:

PROJECT <nazwa relacji (tabeli)> [<lista kolumn>] ==> <relacja wynikowa>

Złączenia (iloczyn kartezjański) są oparte na relacyjnym operatorze iloczynu kartezjańskiego,któremu bezpośrednio odpowiada właściwy operator teorii zbiorów. Brane są dwie relacje jakoargumenty i produkowana jedna relacja wynikowa złożona ze wszystkich możliwych kombinacjiwierszy (krotek) z wejściowych tabeli. Iloczyn kartezjański jest w praktyce rzadko używanymoperatorem i w związku z jego możliwością generowania „eksplozji informacji”. Składniaoperatora jest następująca:

PRODUCT <relacja> WITH <relacja2> == <relacja wynikowa>

Równozłączenie jest iloczynem kartezjańskim, po którym jest wykonana selekcja. Mówiącdokładnie, łączymy dwie tabele, ale tylko dla wierszy, w których wartości w kolumnachzłączenia są takie same. Zakładamy, że klucz główny jednej relacji i klucz obcy drugiej relacjitworzą domyślnie kolumny złączenia. Składnia jest następująca:

EQUIJOIN <relacja1> WITH <relacja2> ==> <relacja wynikowa>

Złączenie naturalne można zauważyć, że ono nie usuwa powtórzeń kolumny złączenia.Operator złączenia naturalnego jest iloczynem kartezjańskim, po którym następuje selekcja (jakw równozłączeniu) oraz rzut, w którym nie bierze się pod uwagę powtórzeń kolumn złączenia.Złączenie naturalne jest na pewno najpowszechniej używanym w praktyce typem złączenia.Składnia jest następująca.

JOIN <relacja1> WITH <relacja2> ON <klucz> == <reacja wynikowa>

Złączenia zewnętrzne stosujemy, gdy chcemy zachować w wyniku wszystkie wiersze z obydwurelacji bez względu na to, czy mają odpowiadające sobie wiersze w drugiej relacji, czy nie(wartość NULL). Istnieją trzy typy złączeń zewnętrznych: lewostronne, prawostronne,obustronne. Lewostronne złączenie zewnętrzne zachowuje nie pasujące wiersze w tabeli będącejpierwszym argumentem operatora złączenia.

Suma jest operatorem, który bierze dwie zgodne relacje jako swoje argumenty i produkuje jednąrelacje wynikową. Przez zgodne relacje rozumiemy, że tabele mają tą strukturę – te samekolumny określone na tych samych dziedzinach.

<relacja1> UNION <relacja2> ==> <relacja wynikowa>

Przecięcie ma działanie przeciwne do sumy. Suma uwzględnia wszystkie wiersze z obu zbiorówlub relacji przecięcie natomiast uwzględnia w relacji wynikowej tylko wiersze wspólne dla obutabel.

<relacja1> INTERSECTION <relacja2> ==> <relacja wynikowa>

Różnica w większości argumentów algebry relacyjnej porządek określenia argumentów jestnieistotny

<relacja1> DIFFERENCE <relacja2> ==> <relacja wynikowa>

7

Page 8: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

ŁĄCZENIE RELACJI

W przypadku, gdy relacja zapytania wymaga dostępu do więcej niż jednej relacji istniejemożliwość połączenia tych relacji z opcjonalnym wykonaniem na nich innych operacji algebryrelacji (np. projekcji).Relacje mogą być łączone poziomo lub pionowo. Poziome łączenie relacji polega na utworzeniurelacji wynikowej, której krotki są wynikiem konkatenacji wybranych krotek relacji źródłowych.Najprostszym sposobem poziomego połączenia relacji jest zastosowanie operatora produktukartezjańskiego.

SELECT * FROM pracownik, zespół;

W praktyce takie połączenie relacji jest wykonywane rzadko ze względu na duży rozmiarwynikowej tabeli (eksplozja informacji). Znacznie częściej jest stosowane tzw. złącze (ang.JOIN). W tym przypadku krotki jednej relacji są łączone z krotkami innej relacji tylko wtedy,gdy wartości korespondujących atrybutów tych krotek spełniają

SELECT nazwisko adres FROM pracownik p, zespół z WHERE adres like ‘Armii Krajowej %’ AND p.id_zesp=z.id_zesp ORDER BY nazwisko;

Złączenia zewnętrzne rozszerza rezultat prostego złączenia (nazwanego wewnętrznym) o tekrotki a jednej relacji, dla których w trakcie złączenia nie znaleziono odpowiadającym im krotekw drugiej relacji. Warunek złączenia podaje się w postaci:

atrybut1 = atrybut2lub

atrybut1 (+)= atrybut2

Przykłady:* Wypisz wszystkich pracowników podając dla każdego z nich nazwę zespołu, w którym

pracuje:

SELECT numer, nazwisko, nazwa FROM pracownik p, zespół z WHERE p.id_zesp=z.id_zesp (+);

Otrzymujemy informacje o pracownikach ich działach również, gdy pracownik nie maprzyporządkowanego zespołu podawana jest wartość NULL reprezentowana na wydrukuprzez pusty ciąg znaków.

* Wypisz nazwy zespołów, które nie zatrudniają pracowników:

SELECT z.id_zesp, nazwa FROM pracownik p, zespół z WHERE p.id_zesp(+)=z.id_zesp AND p.numer IS NULL;

* Wypisz wszystkie zespoły wraz z sumarycznym wynagrodzeniem(miesięcznie)

SELECT z.id_zesp, nazwa,NUL(SUM(płaca_pod)) FROM pracownik p, zespół z WHERE p.id_zesp(+)=z.id_zesp GROUP BY z.id_zesp,nazwa;

8

Page 9: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

* Wypisz pracowników i ich przełożonych (szefów) także tych, którzy nie mają przełożonych:

SELECT p.numer, p.nazwisko, p.szef,k.nazwisko FROM pracownik p, pracownik k WHERE p.szef=k.szef(+) ORDER BY k.nazwisko;

PIONOWE ŁĄCZENIE RELACJI

W pionowym łączeniu relacji stosujemy jeden spośród operatorów zbiorowych: suma, przekrój,różnica. Operatory te działają na wynikach, co najmniej dwóch operacji selekcji a zatemzapytanie składa się z dwóch lub więcej poleceń SELECT. Składnia zapytania wykorzystującegooperatory zbiorowe może być postaci:

SELECT <lista atrybutów/wyrażeń> FROM <nazwa relacji1> [WHERE <warunek logiczny>]

operatorSELECT <lista atrybutów/wyrażeń> FROM <nazwa relacji1> [WHERE <warunek logiczny2>] [ORDER BY 1,...,n];

gdzie operator przyjmuje jedną z wartości UNION, UNION ALL, INTERSECT, MINUS

UWAGI: * zastosowanie operatora UNION powoduje wyeliminowanie z wyniku zapytania krotek o

takich samych wartościach atrybutów wyznaczonych przez połączenie tym operatoremzapytania

* natomiast UNION ALL spowoduje, że w wyniku zapytania pojawią się wszystkie krotki* w łączonych operatorami zbiorowymi klauzulach SELECT musi występować ta sama

liczba atrybutów oraz typy odpowiadających sobie atrybutów (tj. atrybutów SELECTróżnych klauzul muszą być równe, zgodne)

* w wyniku zapytania pojawiają się nazwy atrybutów wyłącznie z pierwszej klauzuliSELECT

* połączone operatorami zbiorowymi polecenia SELECT są wykonywane w kolejności ichwystępowania (od góry do dołu)

* jeżeli istnieje potrzeba użycia klauzuli ORDER BY bo musi ona występować jako ostatniaklauzula zapytania

* w klauzuli ORDER BY nie stosujemy nazw atrybutów, lecz ich numery porządkowe

Przykłady: SELECT nazwisko || ‘*’ FROM pracownik

WHERE id_zesp=10UNIONSELECT nazwisko FROM pracownikWHERE id_zesp<>10ORDER BY 1;

9

Page 10: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

SELECT etat FROM pracownikWHERE id_zesp=30UNIONSELECT etat FROM pracownikWHERE id_zesp=10;

SELECT nazwisko, płaca_pod, ‘Powyżej’ PŁACA FROM pracownikWHERE płaca_pod>1500UNIONSELECT nazwisko, płaca_pod, ‘1500’ PŁACA FROM pracownikWHERE płaca_pod=1500UNIONSELECT nazwisko, płaca_pod, ‘Poniżej’ PŁACA FROM pracownikpłaca_pod<1500ORDER BY 2;

SELECT id_zesp FROM zespółMINUSSELECT id_zesp FROM pracownik;

SELECT z.id_zesp, z.nazwa FROM zespół z, pracownik pWHERE p.id_zesp(+)=z.id_zespMINUSSELECT z.id_zesp, z.nazwa FROM zespół z, pracownik pWHERE p.id_zesp=z.id_zesp;

PODZAPYTANIA ZAGNIEŻDŻONE

Wewnątrz klauzuli WHERE, HAVING a także FROM mogą występować podzapytania, mającetaką samą postać jak zapytania, ale ujęte w nawiasyOgólna postać zagnieżdżenia zapytań w klauzuli WHERE:

SELECT <lista atrybutów/wyrażeń> FROM <nazwa relacji1> WHERE <nazwa atrybutu/lista atrybutów><OPERATOR>(SELECT <lista atrybutów/wyrażeń> FROM <nazwa relacji2> WHERE <nazwa atrybutu/lista atrybutów> <OPERATOR> (SELECT <lista atrybutów/wyrażeń> FROM <nazwa relacji3> [...]))

Mamy doczynienia z zapytaniem zewnętrznym i podzapytaniem - zapytaniem wewnętrznym.W podstawowym trybie zagnieżdżenia (niekorelowanym) podpytanie jest wykonywane jakopierwsze jednokrotnie a jego wyniki są przekazywane do zapytania zewnętrznego.

Przykłady: SELECT * FROM pracownik

WHERE płaca_pod (SELECT MIN(płaca_pod) FROM pracownik);

10

Page 11: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

SELECT nazwisko etat FROM pracownikWHERE etat=(SELECT etat FROM pracownikWHERE nazwisko=’KOLSKI’);Wyszukuje pracowników zatrudnioych na tym etacie co KOLSKI

W przypadku gdy podzapytanie wyznacza dokładnie jedną krotkę stosujemy tradycyjne operatory=,<,>,... gdy podzapytanie wyznacza więcej niż jedną krotkę stosujemy operator IN znanywcześniej a także nowe operatory ANY, ALL wraz z operatorami porównania.

Operator ANY powoduje porównanie pojedynczej wartości (umieszczonej po jego lewejstronie) z każdą wartością wyznaczaną przez podzapytanie. Warunek selekcji zapytaniazewnętrznego jest spełniony, jeżeli lista wartości wyznaczonych przez podzapytanie zawiera,choć jeden element spełniający ten warunek.

Operator ALL powoduje porównanie pojedynczej wartości z każdą wartością wyznaczonąprzez podzapytanie. Warunek selekcji zapytania zewnętrznego jest spełniony, jeżeli wszystkiewartości listy spełniają ten warunek.

Przykłady:Podzapytania zwracające wiele krotek. Odnalezienie kolegów z danej grupy:

SELECT nazwisko, rok, gr_dziekan FROM student WHERE (rok,gr_dziekan) IN (SELECT rok, gr_dziekan FROM student WHERE nazwisko LIKE upper(‘&wzorzec.nazw’)AND imiona LIKE upper(‘&wzorzec_im’));

Wyliczamy min płace podstawowe w ramach grup (zespołów)SELECT * FROM pracownik WHERE (płaca_pod, id_zesp) IN (SELECT MIN(płaca_pod), id_zesp FROM pracownik GROUP BY id_zesp);

Wybieramy płace_pod bez powtórzeń i porównane – dowiadujemy się nazw. Pracownikaktóry ma płace w zespole 10

SELECT nazwisko, płaca_pod, id_zesp FROM pracownik WHERE płaca_pod>ANY (SELECT DISTINCT płaca_pod FROM pracownik WHERE id_zesp=10);

SELECT nazwisko, płaca_pod, id_zesp FROM pracownikWHERE płaca_pod>ALL (SELECT DISTINCT płaca_pod FROM pracownik WHERE id_zesp=30);

SELECT nazwisko, płaca_pod FROM pracownikWHERE płaca_pod>ALL (SELECT płaca_pod FROM pracownik p, zespół z WHERE nazwa=’ADMINISTRACJA’ AND p.id_zesp=z.id_zesp) ORDER BY nazwisko;

11

Page 12: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Klauzula HAVING z zagnieżdżonymi zapytaniami SELECT etat, AVG (płaca_pod) FROM pracownik

HAVING AVG (płaca_pod)> (SELECT AVG(płaca_pod) FROM pracownik WHERE etat=’DYREKTOR’ GROUP BY etat);

SELECT etat, AVG (płaca_pod) FROM pracownik HAVING AVG (płaca_pod) (SELECT MIN(AVG(płaca_pod)) FROM pracownik GROUP BY etat) GROUP BY etat;

SELECT id_zesp, nazwa FROM zespół WHERE id_zesp= (SELECT id_zesp FROM pracownik GROUP BY id_zesp HAVING SUM(płaca_pod)= (SELECT MAX(SUM(płaca_pod))

FROM pracownik GROUP BY id_zesp));

SELECT mimiona, rok, count(*) FROM student WHERE rok=&&liczba GROUP BY imiona,rok HAVING count(*)= (SELECT max(count(*)) FROM student WHERE rok=&&liczba GROUP BY imiona,rok);

&& - zmienna globalna

SELECT a.id_zesp „Zespół”, TRUNC (100*a.liczba_płac/b.liczba_płac,1) AS „% Pracowników”, TRUNC (100*a.suma_wyn/b.liczba_wyn,1) AS „% Wynagrodzenia”FROM (SELECT id_zesp, count(*) AS Licdzba_prac, SUM(płaca_pod) AS suma_wyn FROM pracownik GROUP BY id_zesp) a, (SELECT count(*) AS liczba_płac, SUM(płaca_pod) AS suma_wyn FROM pracownik) b;

ZAPYTANIA SKORELOWANE

Zwykłe zapytanie jest wykonywane raz, na samym początku, a do jego wyników odwołuje sięzapytanie zewnętrzne. W przypadku zapytania skorelowanego podzapytanie jest wykonywanedla każdego wiersza z zapytania zewnętrznego.Jedynym elementem składowym różniącym zapytane skorelowane od nieskorelowanych jestkonieczność zastosowania aliasów relacji, na których operuje zapytanie zewnętrzne i odwołaniasię do nich w podzapytaniu.

12

Page 13: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Przykłady: Otrzymamy nazwisko, płace podstawową, etat gdzie płaca_pod jest większa od średniej

arytmetycznej w ramach tego samego etatuSELECT nazwisko, płaca_pod, etat FROM pracownik p WHERE praca_pod > (SELECT AVG (płaca_pod) FROM pracownik

WHERE etat=p.etet); Nazwiska, które się powtarzają

SELECT nazwisko FROM pracownik p WHERE 1<(SELECT COUNT (*) FROM pracownik

WHERE nazwisko=p.nazwisko);

Otrzymamy nazwiska i płace, którego płaca jest największa i druga w kolejnościSELECT nazwisko, płaca_pod FROM pracownik p WHERE 1<(SELECT COUNT (DISTINCT płaca_pod) FROM pracownik

WHERE płaca_pod>p.płaca_pod);

SELECT nazwisko, id_zesp FROM pracownik p WHERE EXISTS (SELECT mumer FROM pracownik

WHERE pracownik.szef=p.numer);

SELECT numer, nazwisko, etat FROM pracownik p WHERE NOT EXISTS (SELECT numer FROM pracownik WHERE etat=p.etat AND numer!=p.numer);

SELECT nazwisko, id_zesp FROM zespół z WHERE NOT EXISTS (SELECT 1 FROM pracownik p WHERE p.id_zesp=z.id_zesp);

NIEKTÓRE SPOTYKANE TYPY DANYCH

znakowe typy danych – character lub char (typ o stałej długości); variable character lubvarchar (typ o zmiennej długości)

całkowitoliczbowe typy danych – numer, integer, int, smallint, tinyint dziesiętne typy danych – decimal, numeric, real, double, double precision, float, smallfloat datowy I czasowy typ danych – służą do przechowywania daty, czasu oraz kombinacji daty

i czasu; (niekiedy jest dostępny typ przedział czasu); date, time, datetime, interval binarne typy danych – służą do przechowywania kodu, obrazów: text, blob, longblob pseudoatrybuty – rowid (fizyczny adres wiersza w tabeli), rownum (ilość zwracanych

wierszy z zapytania)

JĘZYK DEFINIOWANIA DANYCH

TWORZENIE RELACJI

Polecenie CREATE TABLE o następującym formacie ogólnym:

CREATE TABLE <nazwa relacji> (<nazwa atrybutu 1><typ atrybutu 1>(<rozmiar>) [DEFAULT <wartość domyśłna>]

13

Page 14: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

[[CONSTRAINT <nazwa ograniczenia 1>] <ograniczenie atrybutu 1>], ..., <nazwa atrybutu k><typ atrybutu k>(<rozmiar>) [DEFAULT <wartość domyśłna>] [[CONSTRAINT <nazwa ograniczenia k>] <ograniczenie atrybutu k>], ... [[CONSTRAINT <nazwa ograniczenia>] <ograniczenie relacji>]);

W języku SQL wyróżniamy następujące typy atrybutów:

NUMBER – liczby zapisane za pomocą cyfr (0-9), opcjonalnego znaku (+,-) oraz opcjonalnejkropki dziesiętnej. Rozmiar liczby nie może być większy od 38 cyfr.

NUMBER (r) – j.w., z zastrzeżeniem, że rozmiar liczby nie może być większy od r znaków

NUMBER (r,n) – j.w., dodatkowo n określa liczbę cyfr po przecinku. Jeśli n jest liczbą ujemną,wówczas wartość atrybutu jest zaokrąglona do n miejsc po przecinku

CHAR (r) – łańcuchy znakowe, składające się z dużych i małych liter, cyfr, znaków specjalnych(+,-,%,$,&, etc.) r może przyjmować wartości całkowite od 1 do 255

VARCHAR2 (r) – łańcuchy znakowe, składające się z dużych i małych liter, cyfr, znakówspecjalnych, r oznacza maksymalną długość łańcucha i może przyjmować wartościcałkowite od 1 do 2000. Ten typ danych umożliwia przechowywanie łańcuchówznakowych z zmiennej długości. Oznacza to, że wartości tego atrybutu zajmują w baziedanych tyle miejsca, ile faktycznie wynosi ich długość.

VARCHAR (r) – podobnie jak VARCHAR2. Zaleca się stosowanie VARCHAR2 dla atrybutówo zmiennej długości, ponieważ w kolejnych wersjach ORACLE semantyka tego typumoże się zmienić.

DATE – data z przedziału od 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e.

LONG – tak jak char, przy czym maksymalna długość łańcucha wynosi 2 GB. Wykorzystanieatrybutów tego typu w poleceniach SQL podlega pewnym ograniczeniom

LONG RAW – tak jak LONG, ale wykonywany do przechowywania danych dowolnego typu (tj.nie tylko znaków) np. dźwięków, obrazów.

Opcjonalnie po typie atrybutu podajemy ograniczenie integralnościowe atrybutu:

NULL – umożliwia nadawanie atrybutowi wartości pustych

NOT NULL –uniemożliwia nadawanie atrybutowi wartości pustych

UNQUE – definiuje atrybut, który pełni rolę klucza unikalnego relacji. Wartość takzdefiniowanego atrybutu jest unikalna dla wszystkich krotek relacji

PRIMARY KEY – definiuje atrybut, który pełni rolę klucza podstawowego relacji

Jeżeli dla atrybutu zdefiniować UNIQUE, to nie można dla tego atrybutu zdefiniowaćrównocześnie ograniczenia PRIMARY KEY i odwrotnie. Zdefiniowanie ograniczenia UNIQUElub PRIMARY KEY uniemożliwia nadanie atrybutowi wartości pustych

REFERENCES – określa tzw. ograniczenie referencyjne tj. referencję do klucza podstawowegolub unikalnego innej relacji. Ograniczenie to jest wykorzystywane do definiowania tzw.klucza obcego relacji. Atrybut będący kluczem obcym nie może przyjmować wartości,których nie przyjmuje odpowiedni mu klucz.

14

Page 15: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

ON DELETE CASCADE – ograniczenie to definiuje się dla klucza obcego. Działanie tegoograniczenia jest następujące: jeśli zostanie usunięta krotka z relacji z kluczempodstawowym, to automatycznie są usuwane te krotki z relacji z kluczem obcym, dlaktórych wartości klucza obcego jest równa wartości klucza podstawowego usuwanejkrotki.

CHECK – określa warunek, który musi być spełniony przez wszystkie wartości atrybutu. Wdefinicji tego ograniczenia można wykorzystać operatory =,>,<,!=, IS NOT NULL, LIKEBETWEEN, ..AND..IN oraz operatory logiczne AND, OR, NOT

Opcjonalnie jako ostatni element definicji relacji określa się ograniczenia integralnościowerelacji. Różnią się one od ograniczeń atrybutów tym, że mogą odwoływać się do więcej niżjednego atrybutu relacji. Można zdefiniować następujące ograniczenia tego typu: UNIQUE,PRIMARY KEY, REFERENCE, ON DELETE CASCADE, CHECK ich znaczenie jest takiesamo jak znaczenie odpowiadających im ograniczeń integralonościowych atrybutu. Dodatkowodla relacji istnieje ograniczenie FOREIGN KEY, umożliwiające zdefiniowanie klucza obcegorelacji złożonego z wielu sygn?Każdemu z ograniczeń można opcjonalnie przypisać nazwę poprzedzając ją słowem kluczowymCONSTRAINT. Jeśli nazwa nie zostanie jawnie nadana ograniczeniu, to SLBD określi ją dlaniego domyślnie nazwę SYS_cn gdzie n oznacza numer ograniczenia.

Przykłady: CREATE TABLE dydaktycy (id_dydakt NUMBER(2)

CONSTRAINT id_dydakt_pk PRIMARY KEY,nazwisko VARCHAR (15) NOT NULL,tytuł VARCHAR2 (10) NOT NULL);

Tabela składająca się z 3 kolumn, pierwsza kolumna typu liczb, druga i trzecia typu tekst.Pierwszy atrybut to klucz główny (wartości nie mogą być puste), nazwisko i tytuł niemogą być puste.

CREATE TABLE przedmioty (id_przedm NUMBER(2)CONSTRAINT id_przedm_pk PRIMARY KEY,

nazwa VARCHAR2 (15) NOT NULL);

CREATE TABLE zajęcia (id_zajęć NUMBER (2)CONSTRAINT id_zajęc_pk PRIMARY KEY,

Rodzaj_zaj VARCHAR2 (15)CONSTRAINT rodzaj_zaj_chk CHECK

(rodzaj_zaj [‘WYKŁAD’, ’LABORATORIUM’, ’PROJEKT’]),id_dydakt NUMBER (2) NOT NULLid_przedm NUMBER (2) NOT NULL,FOREIGN KEY (id_dydakt +)REFERENCES dydaktycy (id_dydakt)ON DELETE CASCADE,FOREIGN KEY (id_przedm)REFERENCES przedmiot (id_przedm));

4 kolumny: 1 – identyfikator zajęć (klucz główny), 2 – rodzaj zajęć typu tekst 15 znakówjeszcze określony CONSTRAINT i warunek CHECK dotyczy rodzaju zajęć IN(przynależy) do zbioru wartości (wykład, lab, projekt) wpisując nie przyjmie innegotekstu, 3 – klucz obcy z tabeli dydaktycy, 4 – klucz obcy z tabeli przedmiot (identyfikator

15

Page 16: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

przedmiotu) Na końcu określamy, że są to klucze obce i warunek, że jeśli usuwamy zpierwszej tabeli automatycznie usuwane są odnośniki z drugiej tabeli. Przy tworzeniunajpierw musi zaistnieć tabela, do której będą odniesienia.

CREATE TABLE działy (id_działu NUMBER (3) PRIMARY KEY,nazwa_działu VARCHAR2 (20) NOT NULLUNIQUEMiejsce VARCHAR2 (50));

Jawnie nie ma żadnych kontrastów, są ograniczenia. Nazwa działy nie może być pusta inie może się powtarzać.

CREATE TABLE pracownicy (Id_pracownika NUMBER (10) PRIMARY KEY,Nazwisko VARCHAR2 (20) NOT NULL,Stanowisko VARCHAR2 (9),Kierownik NUMBER (6) REFERENCES pracownicy,Data_zatrudnienia DATE,Zarobki NUMBER (8,2),Premia NUMBER (8,2),Id_działu NUMBER (3) PEFERENCES działy,CHECK (premia<zarobki));

Jeśli wartość zależy od dwóch pół to musi być umieszczona po zdefiniowaniu obu tabel.Tabela ta połączona jest sama ze sobą

CREATE TABLE zaszeregowanie (Grupa NUMBER (2) PRIMARY KEY,Dolne NUMBER (8,2) NOT NULL,Górne NUMBER (8,2) NOT NULL,CHECK (dolne<górne));

WYPEŁNIENIE TABEL

W celu utworzenia relacji i jednoczesnego wypełnienia jej danymi zawartymi w innych jużistniejących relacjach, udostępniono alternatywny format polecenia CREATE TABLE.

CREATE TABLE <nazwa relacji> [(<nazwa atrybutu 1>[DEFAULT <wartość domyślna>] [NULL/NOT NULL]...)] AS SELECT <klauzula select>

Opcjonalny fragment polecenia umożliwia nadanie nazw atrybutom nowej relacji. W przypadkujego pominięcia przyjmowane są nazwy zgodne z nazwami zawartymi w klauzuli SELECT.

CREATE TABLE lista_płac (Id_pracownika NOT NULL nazwisko NOT NULL,Pensje DEFAULT 750 NOT NULL)

AS SELECT id_pracownika, nazwisko, zarobki+pensja FROM pracownik;

16

Page 17: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Automatycznie zostanie utworzona tabela o 3 atryn. o danych nazwach i wypełnionadanymi.

PRZYKŁADY POZWALAJĄCE ZMIENIĆ SCHEMAT TABELI

AKTUALIZACJA SCHEMATU RELACJI

1. Dodanie nowego atrybutu:

ALTER TABLE <nazwa relacji> ADD (<nazwa atrybutu> <typ atrybutu> (<rozmiar>) [DEFAULT <wartość domyślna>] [[CONSTRAINT <nazwa ograniczenia>] <ograniczenie atrybutu>]);

2. Zmodyfikowanie istniejącego atrybutu:

ALTER TABLE <nazwa relacji> MODIFY (<nazwa atrybutu> <typ atrybutu> (<rozmiar>) [DEFAULT <wartość domyślna>] [NULL / NOT NULL]);

3. Dodanie ograniczenia integralnego:

ALTER TABLE <nazwa relacji> ADD [CONSTRAINT <nazwa ograniczenia>] <ograniczenie relacji>;

4. Kasowanie kolumn:

ALERT TABLE <nazwa relacji> DROP <nazwa kolumny>

Przykłady ALERT TABLE moja DROP (k1);

ALERT TABLE moja DROP COLUMN k1;

ALERT TABLE pracownik ADD (tytuł_naukowy VARCHAR2(10));

ALERT TABLE pracownik MODIFY (tytuł_naukowy VARCHAR2 (15)

DEFAULT ‘mgr inż.’ NOT NULL);

ALERT TABLE pracownikADD (CONSTRAINT etat_chk CHECK (etat IN(‘DYREKTOR’, ’PROFESOR’, ’ADIUNKT’, ’STAŻYSTA’, ’SEKRETARKA’)));

ALERT TABLE pracownik ADD (CONSTRAINT prac_fk FOREIGN KEY (Id_działu) REFERENCES dział (id_działu));

17

Page 18: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Możliwe jest czasowe wyłączenie lub uaktywnianie ograniczenia integralnościowego stosującklauzulę DISABLE lub ENABLE

ALERT TABLE <nazwa relacji> DISABLE/ ENABLE <rodzaj ograniczenia> /CONSTRAINT <nazwa ograniczenia> [CASCADE];

- gdzie rodzaj ograniczenia przyjmuje jedną z trzech wartości: INIQUE, PRIMARYKEY, ALL TIGGERS

- opcjonalne słowo CASCADE powoduje odpowiednio wyłączenie lub uaktualnieniewszystkich pozostałych ograniczeń, których działanie zależy od wyłączonego lubuaktywnionego ograniczenia

- ALL TIGGERS powoduje czasowe wyłączenie lub uaktywnienie wszystkichwyzwalaczy zdefiniowanych dla relacji

Ograniczenie integralnościowe może również zostać usunięte z bazy danych

ALERT TABLE <nazwa relacji> DROP <rodzaj ograniczenia>/ CONSTRAINT <nazwa ograniczenia> [CASCADE];

- gdzie rodzaj ograniczenia przyjmuje jedną z dwóch wartości PRIMARY KEY, UNIQUE- opcjonalne słowo CASCADE umożliwia usunięcie wszystkich pozostałych ograniczeń,

których działanie zależy od usuwanego ograniczenia

Przykłądy ALERT TABLE zajęcia DISABLE CONSTRAINT rodzaj_zaj_chk;

ALERT TABLE zajęcia DISABLE PRIMARY KEY;

ALERT TABLE pracownik DROP CONSTRAINT etst_chk;

ALERT TABLE zajęcia DROP PRIMARY KEY;

Uwagi!Modyfikacja schematu relacji jest jednak bardzo ograniczona. Nie dopuszcza się zmianyatrybutu, który wcześniej został zadeklarowany jako atrybut mogący przyjmować wartości pustetj. atrybut z ograniczeniem (NULL), na atrybut nie pusty (NOT NULL), jeśli w relacji istnieje, conajmniej jedna krotka o pustej wartości tego atrybutu. Ponadto, bardzo ograniczone jestzmniejszenie rozmiaru atrybutu (a dokładniej rozmiaru jego typu), które jest dopuszczalnejedynie w przypadku, gdy wszystkie krotki zawarte w relacji o modyfikowanym schemacieprzyjmują wartości tego atrybutu.

PolecenieDESCRIBE <nazwa relacji>;

Zmiana nazwy relacji:RENAME <strata nazwa relacji> TO <nowa nazwa relacji>

Usuwanie relacji:DROP TABLE <nazwa relacji> [CASCADE CONTRAINT];

18

Page 19: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

- gdzie CASCADE CONSTRAINT jest opcjonalną klauzulą umożliwiającą usunięcieograniczeń integralnościowych w innych relacjach, które w swojej definicji wykorzystująatrybuty kluczowe i unikalne usuwanej relacji

- usunąć relację może wyłącznie jej właściciel, tzn. użytkownik który ją utworzył- operacje usuwania relacji w ogólności może doprowadzić do błędów w sesjach

użytkowników odwołujących się do niej w późniejszym czasie, w sposób bezpośredni lubprzez bazujące na niej perspektywy

AKTUALIZACJA ZAWARTOŚCI RELACJI TABELI

DML – język poleceń manipulowania danymi

Dopisywanie nowych krotekWstawiane krotki mogą być wynikiem zapytania SELECT, a więc w ogólności mogą pochodzićz innych relacji. Postać polecenia będzie miała postać:

INSERT INTO <nazwa relacji> [(lista atrybutów)] SELECT <lista atrybutów> FROM ...;

Dopisanie jednej krotki to postać:

INSERT INTO <nazwa relacji> [(lista atrybutów)] VALUES (wartość 1, wartość 2...);

Opcjonalna lista atrybutów jest zbędna w przypadku wprowadzenia wszystkich atrybutów danejrelacji.

Modyfikowanie istniejących krotek:

UPDATE <nazwa relacji> [alias] SET <nazwa atrybutu 1> [, nazwa atrybutu 2] = {wyrażenie podzapytanie} [WHERE <warunek logiczny>];

Usuwanie krotek z relacji:

DELETE FROM <nazwa relacji> [WHERE <warunek ligiczny>];

Przykłady: INSERT INTO zajęcia

VALUES (5,’LABORATORIUM’,10,12);

INSERT INTO pracownikSELECT * FROM pracownik@ baza.zgoda.bytom.pl;

UPDATE pracownik SETpłaca_pod = (SELECT płaca_pod FROM dodatki d

WHERE d.numer=pracownik.numer)WHERE numer IN (SELECT numer FROM dodatki);

UPDATE pracownik SET

19

Page 20: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

płaca_pod = (SELECT avg(płaca_pod) FROM pracownikWHERE numer IN (SELECT numer FROM pracownik

WHERE płaca_pod= (SELECT min(płaca_pod) FROM pracownik)));

UPDATE pracownik a SET(a.płaca_pod, a.płaca_dod)= (SELECT avg(płaca_pod)*1.2 max(nvl(płaca_dod,0)) FROM pracownik WHERE id_zesp=a.id.zesp)WHERE a.pracuje_od>’89/12/31’;

DELETE FROM pracownik WHERE stanowisko IS NULL;

Dostęp do perspektywy odbywa się zgodnie z ogólnymi zasadami dostępu do relacji wa więc:- za pomocą polecenia SELECT, w którego klauzuli FROM użyto nazwę perspektywy- poleceń INSERT UPDATE DELETE jeżeli perspektywa umożliwia modyfikowanie

zawartości relacji na których bazuje

W zależności od sposobu zdefiniowania perspektywy zwykle wyróżnia się perspektywy proste izłożone. Perspektywa prosta charakteryzuje się tym, że udostępnia dane z pojedynczej relacji, aw jej definicji nie stosuje się operacji na zbiorach funkcji ani też grupowania krotek.Ogólny format jest postaci:

CREATE [OR REPLACE] VIEW <nazwa perspektywy> [(lista atrybutów)] AS SELECT … [WITH CHECK OPTION];

- opcjolnalna klauzula OR REPLACE zastępuje istniejącą perspektywę nową definicją- dla wyrażeń wykorzystanych w poleceniu SELECT (np. sum(płaca_pod), nvl

(płaca_dod,0)) należy określić aliasy lub nazwy odpowiadających im atrybutówperspektywy.

Usunięcie perspektywyDROP VIEW <nazwa perspektywy>

Przykłady: CREATE VIEW asystenci

AS SELECT numer, nazwisko FROM pracownik WHERE etat=’ASYSTENT’;

CREATE VIEW klientkiAS SELECT * FROM klient WHERE płeć=’kobieta’;

CREAT VIEW stat_zespół (nazwa, płaca_min, płaca_max, płaca_przec)AS SELECT nazwa MIN(płaca_pod), MAX(płaca_pod), AVG(płaca_pod) FROM pracownik, zespół WHERE pracownik.id_zesp=zsespół.id_zesp GROUP BY nazwa;

CREAT VIEW ed

20

Page 21: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

ASSELECT numer, nazwisko, p.id_zesp, adres FROM pracownik p, zespół z WHERE p.id_zesp=z.id_zesp;

Możliwe są zmiany (INSERT, DELETE, UPDATE) w odniesieniu do tabeli pracownik, ale niew odniesieniu do tabeli zespół

CREATE OR REPLACE VIEW adiunkciASSELECT numer, nazwisko, etat FROM pracownik WHERE etat=’ADIUNKT’ WITH CHECK OPTION;

CREATE VIEW szefowieAS SELECT nazwisko, nazwa FROM pracownik p, zespół z WHERE numer IN (SELECT DISTINCT szef FROM pracownik ) AND p.id_zesp=z.id_zesp;

CREATE VIEW pr_urlop_bezpASSELECT * FROM pracownik WHERE płaca_pod=0 OR płaca_pod IS NULL WITH CHECK OPTION:

LICZNIKI SEKWENCJE

W systemie Oracle jest specjalna sekwencja – sekwencja (przechowywana jako obiekt w baziedanych), która służy do generowania jednoznacznych wartości dla kluczy głównych i unikalnych.Składnia jest postaci:

CREATE SEQUENCE [nazwa użytkownika] <nazwa licznika> [INCREMENT BY <liczba>] [START WITH <wartość początkowa>] [CYCLE/NO CYCLE];

- nazwa użytkownika jest opcjonalnym parametrem określającym użytkownika któryutworzył licznik

- INCREMENT BY jest opcjonalnym parametrem określającym wartość, o jaką będziezwiększany licznik po każdym odczycie. Liczba może być ujemna

- START WITH jest opcjonalnym parametrem określającym początkową wartośćlicznika

- CYCLE/NO CYCLE jest opcjonalnym parametrem określającym czy po osiągnięciuwartości maksymalnej licznik rozpocznie zliczanie od wartości początkowej (cycle) czyteż nie; domyślnie jest przyjmowana opcja no cycle.

Sekwencji używa się ze składnią:<nazwa sekwencji>.NEXTVAL – generowanie kolejnej wartości<nazwa sekwencji>.CURRVAL – ostatnio wygenerowana wartość

Przykłady:

21

Page 22: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

CREATE SEQUENCE prac_seq INCREMENT BY 10 START WITH 1000;

INSERT INTO pracownik VALVES (prac_seq.NEXTVAL,’stec’, ’RADCA PRAWNY’,NULL, ‘90/01/20’, 1200, 0, 10);

Instrukcja: DROP SEQUENCE <nazwa sekwencji>; usuwa sekwencje.

INDEKSY

Tworzenie indeksów:

CREATE [UNIQUE] INDEX <nazwa indeksu> ON <nazwa relacji> (nazwa atrybutu 1 [nazwa atrybutu 2]...);

Po utworzeniu indeksu jest on stosowany w sposób automatyczny przez SZBD, każdorazowowtedy, gdy wymaga tego strategia optymalizacji realizacji zapytań. Oznacza to, że użytkowniknie musi być świadomy istnienia indeksu, jak również wykorzystania indeksu przy realizacji jegookreślonych poleceń.

Uwaga!- indeksy zajmują miejsce w bazie danych- kiedy wprowadzamy, modyfikujemy lub usuwamy dane z indeksowanej SZBD musi

aktualizować indeksy może to spowalniać przeprowadzaną operację- w praktyce nie ma sensu zakładania indeksów na małych relacjach gdyż nie powoduje to

odczuwalnej poprawy efektywności- dobrą zasadą jest tworzenie indeksów dla kluczy obcych oraz na atrybutach często

stosowanych w klauzulach WHERE zapytań i na atrybutach połączeniowych relacji- indeksy zdecydowanie przyspieszają dostęp do danych

Przykłady: CREATE UNIQUE INDEX idn_zespół

ON pracownik (id_zesp);

CREATE UNIQUE INDEX idn_nazwisko ON pracownik (nazwisko);

Indeks można usunąć: DROP INDEX <nazwa indeksu>;

SŁOWNIK DANYCH

Słownik danych jest zbiorem informacji o obiektach bazy danych. Jest używany zarówno przezsystem zarządzania baz danych jak i przez użytkowników. Użytkownik ma uprawnienie tylko doodczytu informacji ze słownika danych.Słownik danych ma postać zbioru tabel i perspektyw. Oto przykładowe perspektywy słownikadanych Oracle:1. z przedrostkiem User – informacja o wszystkich obiektach, których dany użytkownik jest

właścicielem: User_Tables, User_Constraint, User_Sequences, User_Views, User_Indexes,User_Triggers, User_Sources, User_Objects

2. z przedrostkiem All – dotyczy wszystkich obiektów do których użytkownik ma uprawnienia

22

Page 23: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

3. z przedrostkiem Dba – informacja o obiektach dostępnych dla administratorów systemu

UŻYTKOWNICY I UPRAWNIENIA

Każdy, kto rozpoczyna pracę z bazą danych, Oracle musi być zdefiniowany poprzez podanieidentyfikatora i hasło, aby móc wykonywać określone czynności (operacje).Za zarządzanie użytkownikami ich uprawnieniami i zasobami odpowiedzialny jest administrator.Może on:

- tworzyć i usuwać użytkownika- definiować uprawnienia- ograniczać ilościowe zasoby użytkownika

Tworzenie użytkownika:

CREATE USER <nazwa użytkownika> IDENTIFIED BY <hasło użytkownika>;

Usuwanie użytkownika:

DROP USER <nazwa użytkownika>;

Uprawnienia w bazie danychW bazie danych Oracle istnieją dwa typy uprawnień:1. uprawnienia systemowe – prawo do wykonania określonej czynności lub wykonanie

pewnych czynności na określonym typie obiektów2. uprawniania obiektowe – prawo do wykonywania określonej czynności na konkretnym

obiekcie

Predefiniowane role to:CONNECT – możność połączenia do systemu OracleRESOURCE – możność tworzenia tabel, sekwencji, indeksów i innych obiektówDBA – możność powołania innych użytkowników, niepełna możność administrowania cudzymiobiektami

Transakcje – zdarzenia które powodują zmianę stanu są w terminologii baz danych nazywanetransakcjami.Użytkownik realizuje swoje transakcje albo poprzez polecenia języka SQL. Kierowaniebezpośrednio albo pośrednio przy użyciu wcześniej przygotowanych aplikacjibazodaniowych.

Przykłady:- przelew kwoty z konta na konto- system rezerwacji biletów lotniczych (połączenia)- wysyłkowa sprzedaż

Każda transakcja powinna mieć właściwości ACID = atonowość, spójność, izolacyjność itrwałość.

INTEGRALNOŚĆ

23

Page 24: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Ogólnym celem integralności jest zapewnienie, aby baza danych była dokładnymodzwierciedleniem świata rzeczywistego, który reprezentuje.W środowiskach z wieloma użytkownikami zapewnienie integralności jest również sprawąfizycznego wymiaru systemu baz danych. Jądro systemu SZBD zajmuje się problemami sprzętu ioprogramowania a także rozdziałem zasobów między wielu użytkowników.Zarządzanie transakcjami dotyczy współbieżności dostępu do bazy danych i zapewnieniespójności bazy danych.

WSPÓŁBIEŻNOŚĆ

Jeśli do bazy danych ma jednocześnie dostęp wielu użytkowników lub aplikacji mówi się, iż ichtransakcje są wykonywane współbieżnie.Transakcje współbieżne mogą być przeprowadzane na jeden z dwóch sposobów: szeregowo lubrównolegle.

Serializowane transakcje

BLOKADY

Blokady (zamki):- do odczytu- do zapisu- wspólne

Blokady mogą być stosowane w różnym stopniu szczegółowości:- na poziomie tabeli- stron- rekordów- pól w rekordach

ZAKLESZCZANIE

Jest stanem w którym dwie lub więcej transakcji blokuje sobie wzajemnie zasoby. Oznacza to żeżadna z transakcji nie może kontynuować pracy.

POZIOMY IZOLACJI

Efekty:- fantom- niepowtarzalny odczyt- brudny odczyt

TRANSAKCJE W ORACLE

W Oracle 8 transakcja jest logiczną jednostką działania składająca się z jednej lub wielu poleceńSQL. Każda transakcja rozpoczyna się w momencie wprowadzania pierwszej poprawkiinstrukcji SQL:Kiesy transakcja rozpoczyna się system przypisuje jej segment wycofania. W segmencie tymzapisane są dane pochodzące z momentu poprzedzającego ich zmianę przez transakcje. Dziękitym informacjom transakcje może zostać wycofana a dane znajdujące się w bazie danych przedrozpoczęciem transakcji odtworzone. Zakończenie transakcji następuje w wyniku:

- wydania polecenia COMMIT lub ROLLBACK- wykonania jednej z instrukcji CREATE, DROP, ALERT- zakończenia sesji użytkownika z serwerem- anormalnego zerwania sesji użytkownika

24

Page 25: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

Możliwe jest również dzielenie dłuższych transakcji na mniejsze poprzez deklarowanieznaczników pośrednich

SAVEPOINT znacznik;

Umożliwia to wycofanie w razie błędów jedynie fragmentu transakcji i ponownie próby jegowykonania bez powtórzenia całej transakcji od początku. Częściowe cofnięcie transakcji doznacznika nie zamyka transakcji.

ROLLBACK TO SAVEPOINT znacznik;

Użytkownik może ustalić zmienne środowiskowe AUTOCOMIS.

Oracle automatycznie włącza i wyłącza różne typy blokad zależnie od sytuacji i nie wymaga przytym żadnych akcji ze stron użytkownika.

Jawne usuwanie blokady przez użytkownika jest możliwe za pomocą połączeń:- LOCK TABLE- SELECT ... FOR UPDATE

INSTRUKCJE STERUJĄCE W PL/SQLJęzyk PL/SQL posiada większość typowych instrukcji sterujących.

IF <warunek logiczny> THEN <blok instrukcji> END IF;

IF <warunek logiczny> THEN <blok instrukcji> ELSE <blok instrukcji> END IF;

IF <warunek logiczny> THEN <blok instrukcji> ELSE IF <warunek logiczny> THEN <blok instrukcji> END IF;

LOOP <blok instrukcji (w tym EXIT lub EXIT WHEN <warunek logiczny>)>END LOOP;

FOR <zmienna> IN <wartość 1> ... <wartość 2> LOOP <blok instrukcji> END LOOP;

WHILE <warunek logiczny> LOOP <blok instrukcji> END LOOP;

[DECLARE <deklaracje obiektów PL/SQL, zmienne, stałe, wyjątki procedury funkcje>]BEGIN

25

Page 26: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

<ciąg instrukcji do wykonania>[EXCEPTION <obsługa wyjątków>]END;

- deklaracje i obsługa wyjątków są opcjonalne- bloki mogą być zagnieżdżone- jedynymi instrukcjami języka SQL jakie mogą pojawić się w loku PL/SQL są instrukcje

SELECT, INSERT, UPDATE, DELETE, COMMIT i ROLLBACK.

DEKLARACJE ZMIENNYCH I STAŁYCH

Deklaracje zmiennych i stałych mają następującą postać:

identyfikator typ_danych [NOT NULL] [:=wyrażenie];identyfikator CONSTANT typ_danych [NOT NULL] [:=wyrażenie];

- opcjonalna część [:=wyrażenie] umożliwia inicjalizuje wartość zmiennej

Przykłady znak CHAR(1); wynagrodzenie NUMBER(7,2); pi CONSTANT NUMBER(1,5):=3,14159; nazwa VARCHAR2(10):=’Drukarka’; termin DATE:=Sysdate; stan_cywilny BOOLEAN:=False; liczba_dzieci BINARY_INTEGER:=0; brak_danych EXCEPTION; psoba pracownik.nazwisko% TYPE; pracownik_rekord pracownik% ROWTYPE;

Uwagi:- w PL/SQL są dostępne typy danych z języka SQL a ponadto typ BOOLEAN(logiczny) i

BINARY_INTEGER liczb całkowitych – należy od podtypów NUMBER i przez towymagający przy zapisie mniej pamięci

- nie należy nadawać tej samej nazwy w atrybutu w tabeli- oprócz zmiennych deklarowanych w bloku PL/SQL mogą występować jeszcze zmienne

z aplikacji korzystającej z bloku PL/SQL – poprzedza się je dwukropkiem (:zmienna)- mogą także występować zmienne podstawienia SQL*Plus (&zmienna)- typ zmiennej można zadeklarować używając pseudoatrybutu %TYPE określającego typ

podanego przed nim atrybutu relacji- zmienną typu rekordowego deklarujemy z użyciem pesudoatrybutu %ROWTYPE lub

przy użyciu złożonego typu danych RECORD

ZMIENNE SYSTEMOWE

Jest pewna liczba zmiennych zadeklarowanych przez system, z których można korzystać wkodzie PL/SQL (ale nie w SQL) ich wartości dotyczą ostatnio wykonanej instrukcji SQL:

- SQL% ROWCOUNT – liczba wierszy przetworzonych przez ostatnią instrukcję SQL- SQL% FOUND=TRUE – jeśli zastał znaleziony (przetworzony) przynajmniej jeden

wiersz- SQL% NOTFOUND=TRUE – jeśli żaden wiersz nie został przetworzony

26

Page 27: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

- SQLERRM – tekstowa informacja o błędzie- SQLCODE – kod błędu

Ostatnie dwie wymienione może uzyskać tylko w sekcji EXCEPTION.

PROCEDURY FUNKCJE I PAKIETY są to obiekty zapisywane w bazie danych tak jak inne obiekty.Szczególnym rodzajem procedury są wyzwalacze baz danych.

WYZWALACZE BAZ DANYCH

Wyzwalacze baz danych (database tiggers) są procedurami składowymi w bazach danych wpowiązaniu z jej konkretną relacją. Są one uruchamiane automatycznie w momencie wykonaniapolecenia SQL: INSERT, UPDATE, DELETE.Wyzwalacze baz danych służą głównie do oprogramowania więzów spójności i dooprogramowania stałych czynności, które powinny być wykonywane w każdej aplikacjikorzystającej z baz danych. Oto składnia wyzwalacza baz danych:

CREATE[OR REPLACE] TRIGGER <nazwa wyzwalacza> BEFORE/AFTER <specyfikacja instrukcji> ON <nazwa relacji> [FOR EACH ROW] <blok instrukcji PL/SQL>

- specyfikacja instrukcji przyjmuje jedną z operacji INSERT, UPDATE, DELETE lubkilka z nich połączonych operatorem OR

- w przypadku UPDATE podaje się dodatkowo nazwę aktualizowanego atrybutuużywając składni UPDATE OF <nazwa atrybutu>

- opcjonalna klauzula FOR EACH ROW spowoduje uruchomienie wyzwalacza dlakażdej krotki spełniającej warunek polecenia, brak tej klauzuli to wyzwalacz zostanieuruchomiony tylko raz

- aby odróżnić w wyzwalaczu wierszowych stare i nowe wartości w wierszu używa sięspecjalnych ograniczeń na wiersz przed zmianą i po zmianie;

:OLD.<nazwa atrybut> lub :NEW.<nazwa atrybutu>

Przykłady: CREATE OR REPLACE TRIGGER sprawdź_płace

BEFORE INSERT ON pracownik FOR EACH ROW BEGIN IF :NEW.płaca_pod<500 THEN RAISE_APPLICATION_ERROR (-20020,’Płaca podstawowa jest zbyt niska’); ENDIF;END;

CREATE TRIGGER sprawdzanie_wynagrodzenia BEFORE INSERT OR UPDATE OF płaca_pod, etat ON pracownik FOR EACH ROW DECLARE Min NUMBER Max NUMBER; BEGIN SELECT górne, dolne INTO Min, Max FROM etaty WHERE etat:=NEW.etat; IF :NEW.płaca_pod<Min OR :NEW.płaca_pod<Max THEN

27

Page 28: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

RAISE_APPLICATION_ERROR (-20500,’Wynagrodzenie’||:NEW.płaca_pod||’spoza zakresu’);

ENDIF;END;

Ciało wyzwalacza, który może być uruchomiony przez więcej niż jedno polecenie DML, możezawierać systemowe zmienne logiczne: inserting, deleting, updating świadczące o rodzajuinstrukcji, które uruchomiła dany wyzwalacz.

CREATE TRIGGER budżet_zespołu AFTER DELETE OR INSERT OR UPDATE OF

Wynagrodzenie, id_zesp ON pracownik FOR EACH ROW BEGIN IF deleting OR (updating AND :OLD.id_zesp<>:NEW.id_zesp) THEN UPDATE budżet

SET fundusz_płac=fundusz_płac-:OLD.wynagrodzenie WHERE nr.zesp=:OLD.id_zesp;

ENDIF; IF inserting OR (updating AND :OLD.id_zesp<>:NEW.id_zesp) THEN UPDATE budżet

SET fundusz_płac=fundusz_płac+:NEW.wynagrodzenie WHERE nr.zesp=:NEW.id_zesp;

ENDIF; IF updating AND (:OLD.id_zesp=:NEW.id_zesp) AND (:OLD.wynagrodzenie<>:NEW.wynagrodzenie) THEN UPDATE budżet

SET fundusz_płac=fundusz_płac-:OLD.wynagrodzenie +:NEW.wynagrodzenie WHERE nr.zesp=:OLD.id_zesp;

ENDIF;END;

CREATE OR REPLACE TRIGGER rejestrAFTER UPDATE OF etat, szef, płaca_pod, płaca_dod, id_zesp OR DELETE ON pracownik FOR EACH ROW BEGIN IF updating THEN INSERT INTO rejestr_prac values (:OLD.numer, :OLD.nazwisko, :OLD.etat,

:OLD.szef, :OLD.pracuje_od, :OLD.płaca_pod, :OLD.płaca_dod, :OLD.id_zesp,user, sysdate, ‘UPDATE’);

ELSIF deleting INSERT INTO rejestr_prac values (:OLD.numer, :OLD.nazwisko, :OLD.etat,

:OLD.szef, :OLD.pracuje_od, :OLD.płaca_pod, :OLD.płaca_dod, :OLD.id_zesp,user, sysdate, ‘DELETE’);

END IF;END;

Wyzwalacz może być włączony i wyłączony za pomocą instrukcji:

ALERT TRIGGER <nazwa wyzwalacza> ENABLE/DISABLE;

Wyzwalacz można usunąć

28

Page 29: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

DROP TRIGGER <nazwa wyzwalacz>;

Używając dotychczas wprowadzonych konstrukcji języka PL/SQL nie było możliweprzeglądanie kolejno wszystkich wierszy będących wynikiem zapytania. Do tego celu zostałpowołany obiekt o nazwie kursor, który stanowi bufor (obszar roboczy).Przed użyciem kursora należy go zadeklarować poleceniem postaci:

DECLARE CURSOR <nazwa kursora> IS SELECT… FROM… WHERE…;

Na zadeklarowanym kursorze można wykonywać operacje jego otwarcia, pobierania wartościoraz zamknięcia. Kursor otwieramy poleceniem OPEN, które powoduje przydzielenie niezbędnego obszarupamięci.Do pobierania krotki wskazywanej przez kursor stosuje się polecenie FETCH. Kursor, który niebędzie więcej wykorzystywany w programie, powinien zostać zamknięty poleceniem CLOSE.Z każdym kursorem są związane 4 atrybuty, w których jest przechowywana informacja oprzebiegu operacji wykonywanych przez kursor.kursor%found kursor%rowcountkursor%notfound kursor%isopen

Przykłady: BEGIN

DECLARECURSOR pracownik_kursor IS SELECT numer, płaca_pod, pracuje_od, pracownkik.id_zesp FROM pracownik, zespół WHERE pracownik.id_zesp=zespół.id_zesp AND nazwa=’BAZA DANYCH’; pracownik_dane pracownik_kursor%ROWTYPE;BEGINOPEN pracownik_kursor;LOOPFETCH pracownik_kursor INTO pracownik_dane;EXIT WHEN pracownik_kursor%NOTFOUND; IF pracownik_dane.pracuje_od<’80/01/01’ THEN UPDATE pracownik SET płaca_pod=płaca_pod*1.3 WHERE numer= pracownik_dane.numer; ELSIF pracownik_dane.pracuje_od>’80/12/31’ AND pracownik_dane.pracuje_od<’86/01/01’ THEN UPDATE pracownik SET płaca_pod=płaca_pod*1.2 WHERE numer= pracownik_dane.numer; ELSE UPDATE pracownik SET płaca_pod=płaca_pod*1.05 WHERE numer= pracownik_dane.numer; END IF:END LOOP;COMMIT;CLOSE pracownik_kursor;END;END;

29

Page 30: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

BEGINDECLARECURSOR pracownik_kursor (id-zespołu NUMBER) IS SELECT numer, nazwisko, płaca_pod FROM pracownik p

WHERE p.id_zesp=id_zespołu AND 3>

(SELECT COUNT(DISTINCT płaca-pod) FROM pracownik WHERE id_zesp=p.id_zesp AND płaca_pod<=p.płaca_pod;Pracownik_rekor pracownik_kursor %ROWTYPE;BEGINFOR pracownik_rekord IN pracownik_kursor (20)LOOPUPDATE pracownik SET płaca_pod=płaca_pod*1.05WHERE numer=pracownik-rekord.numer;END LOOP;COMMIT;END;END;

CREATE OR REPLACE FUNCTION podaj_stan_zespołu (liczba IN NUMBER) RETURN NUMBER IS wartość NUMBER;BEGINSELECT COUNT(*) INTO wartość FROM pracownikWHERE id_zesp=liczba;RETURN wartość;END;

CREATE OR REPLACE PROCEDURE nowy_pracownik (nazwisko_pracownik IN CHAR, nazwisko_szefa IN CHAR, nazwa_zespołu IN CHAR, etat IN CHAR DEFAULT ‘STAŻYSTA’ pensja IN NUMBER DEFAULT 900)IS nr_szefa NUMBER(6); nr_ZESPOŁU NUMBER(6);BEGINSELECT id_zesp INTO nr_zespołu FROM zespółWHERE nazwa=nazwa_zespołu;SELECT numer INTO nr_szefa FROM pracownikWHERE nazwisko=nazwisko_szefa AND id_zesp=nr_zespołu;INSERT INTO pracownik VALUES(seq_pracownik.NEXTVAL, nazwisko_pracownika, etat, nr_szefa, SYSDATE, pensja, NULL, nr_zespołu);EXCEPTIONWHEN NO_DATA_FOUND THEN

30

Page 31: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

RAISE_APPLICATION_ERROR(-20000,’Nie znaleziono takiego szefa lub zespołu’);END;

CREATE OR REPLACE PROCEDUREpodwyżka(nazw IN CHAR, podwyżka IN NUMBER)IS pensja_min NUMBER(8); pensja_max NUMBER(8); pensja NUMBER(8);zbyt_wysoka_pensja EXCEPTION;BEGIN SELECT płaca_min, płaca_max INTO pensja_min, pensja_max FROM pracownik WHERE nazwisko=nazw);IF ((pensja+podwyżka)BETWEEN pensja_min AND pensja_max) THENUPDATE pracownik SET płaca_pod=płaca_pod+podwyżkaWHERE nazwisko=nazw;ELSE RAISE zbyt_wyskoka_pensja;END IF;EXCEPTIONWHEN zbyt_wyskoka_pensjaTHEN DBMS_OUTPUT.PUT_LINE(‘Pensja jest większa niż pensja dozwolona’);NULL;END;

Obiektowe bazy danychCo to jest obiektowa baza danych?

- zbiór obiektów, ich stan, zachowanie się i związki występujące między nimi określonezgodnie z obiektowym modelem danych.

- Składy trwałych obiektów- Jest to system, który umożliwia zarządzanie bazą danych, zorientowany obiektowo- Jest to system, który dziedziczy wszystkie zasadnicze cechy technologii obiektowej i

baz danych.

Obiektowy model danychModel danych, w którym wykorzystano cechy obiektowości: pojęcia klas i obiektów klasy,enkapsulacja, mechanizm identyfikacji obiektów, dziedziczenie, przeciążenie funkcji.UML (Unified Modeling Language) Zunifikowany język do modelowania, zawierającypojęcia i notacje służące do obiektowej analizy, modelowania i projektowania. UML zostałopracowany przez człowych metodologów G. Boocha, I. Jackobsona, J. Rumbaugha. UMLjest lansowany jako standard notacyjny również jako fragment standardu OMO. W notacjiUML definiowane są następujące diagramy:

- diagramy przypadków użycia (use case)- diagramy klas (class diagrams). Są one odmianą dość klasycznych diagramów- diagramy odwzorowujące dynamiczne własności systemy (behavior)

- diagramy stanów- diagramy aktywności

- diagramy implementacyjne

OBMG (Object Database Management Group) jest organizacją skupiającą firmy obiektowebazy danych. ODMG tworzy standardy takich baz. Elementami tego standardu są ODL (ObjectDefinition Language) OQL (Object Query Language) oraz tzw. wiązania do 3 językówprogramowania C++, smalltalk, Java. Zadaniem wiązań jest udostępnienie bazy danych z

31

Page 32: BAZY DANYCH - WYKŁADY - Kolos Wikikolos.math.uni.lodz.pl/~archive/Bazy danych/SQL - wyklady.pdf · Baza danych: - jest logicznie spójnym zestawem danych i metadanych zbudowanych

poziomu danego języka programowania. To właśnie wiązania definiują DML (językmanipulowania danymi).

Hurtownie danych:(magazyn danych, data warhouse)

- jest scentralizowana bazą danych- jest oddzielona od baz operacyjnych- scala informację z wielu źródeł- jest zorientowana tematycznie- przechowuje dane historyczne- utrzymuje wielką ilość informacji- agreguje informację

W hurtowniach danych przechowuje się dane różnych rodzajów:- elementarne (kopie aktualnych danych źródłowych pozyskany z baz operacyjnych)- zmaterializowane agregaty(wyliczone wartości sum, średnich w różnych przekrojach)- metadane.

Cykl życia danych w hurtowniach to:- ładowanie i scalanie- agregacja- przesunięcie do danych historycznych- usuwanie(rzadko albo nigdy)

Wykorzystywanie hurtowni danychDane zgromadzone w hurtowniach i składnicach danych są zwykle wykorzystywane przezmenadżerów – użytkowników systemów wspomagania decyzji. Systemy takie wykonują różnegorodzaju analizy:

- przetwarzanie analityczne OLAP (On-line Analytical Processing)- eksploracja danych (datamining) czyli automatyczne pozyskiwanie wiedzy z baz

danych.

Analiza wielowymiarowa i dane wielowymiarowe.Struktura wielowymiarowa przedstawia elementarne komórki danych, tzn. w funkcji wieluniezależnych czynników zwanych wymiarami.Typowe wymiary to:

- czas (np. w dniach, miesiącach, latach)- produkt (np. typ i rodzaj)- jednostka organizacyjna (np. wydział, filia) lub terytorium (gmina, miasto)

Fakty są opisane atrybutami liczbowymi tzw. miarami. Najbardziej typowym faktem jestwielkość sprzedaży, której miarami są np. ilośc sprzedanego towaru i jego wartość.

32