You are on page 1of 194

Bazy danych

mgr inż. Piotr Kaczyński

Wydział Matematyczno-Przyrodniczy
Szkoła Nauk Ścisłych
Uniwersytet Kardynała Stefana Wyszyńskiego

Podstawy pracy z RDMBS Oracle

Piotr Kaczyński Bazy danych


Wprowadzenie
SQL*Plus
Język SQL

Część I

Proste operacje na bazie danych

Piotr Kaczyński Bazy danych


Wprowadzenie
SQL*Plus
Język SQL

Plan prezentacji

1 Wprowadzenie
Bazy danych
Baza Oracle
Podstawy Administracji

2 SQL*Plus
Łączenie z bazą
Wykonywanie poleceń

3 Język SQL
Polecenie wyboru SELECT
Wybór wierszy WHERE
Sortowanie ORDER BY

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Baza danych

System przechowujący i udostępniający dane


Kartoteka, notatnik itp
Pliki tekstowe na dysku
Pliki na dysku o specyficznym formacie
Pliki Excel
Skomplikowane systemy zarządzania danymi
Wymagania
Trwałość danych
Spójność danych
Wielodostęp

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

System zarządzania bazą danych

SZBD System Zarządzania Bazą Danych (DBMS)


SZRBD System Zarządzania Relacyjną Bazą Danych
(RDBMS)

„SZBD = Baza Danych”


Zalety
Zapewnia trwałość, spójność i wielodostęp
Umożliwia szybkie wyszukiwanie i dostęp do danych
Niegraniczona ilość danych
Optymalizacja
Wady
Rozwiązanie ciężkie
Wymaga instalacji i działania dodatkowego programu
Dane bez niego są bezużyteczne

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Architektura 2-warstwowa

Aplikacja korzysta z bazy danych bezpośrednio


Większa kontrola nad zapytaniami
Mniejsza optymalizacja
Mniejsze bezpieczeństwo

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Architektura 3-warstwowa

Aplikacja korzysta z serwera aplikacyjnego


Serwer aplikacyjny komunikuje się z bazą danych
Mniejsza kontrola komunikacji z bazą danych
Centralizacja dostępu
Wieksza optymalizacja
Większe bezpieczeństwo
Konieczny serwer aplikacyjny

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Podział baz danych

Strukturalny
Relacyjne
Obiektowe
Relacyjno-obiektowe
Funkcjonalny
OLTP On Line Transaction Processing
OLAP On Line Analytical Processing
Liczba węzłów
Bazy rozproszone
Bazy scentralizowane

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Relacyjne bazy danych

Oparte o model relacji


Definition (Relacja)
Niech dane będą zbiory X1 , X2 , . . . , Xn . Relacją n-członową ρ
nazywamy dowolny podzbiór ich iloczynu kartezjańskiego

ρ ⊂ X1 × X2 × . . . × Xn

Rekord danych to jeden element relacji


Zbiór rekordów = relacja = tabela
Kolumna tabeli (typ) - zbiór Xi

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Tabela

Tabela to nazwany zbiór rekordów (wierszy)


Tabela posiada kolumny o zadanych typach danych
Kolumny mają nazwy

Example (Tabela dane osobowe)


Imię Nazwisko Płaca
Grzegorz Schytyna 20000
Donald Tesk 15000
Lew Rewin 2500
Piotr Kaczyński 500

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Operacje na tabelach
Sumowanie
Odejmowanie
Przecinanie
Selekcja kolumn
Selekcja wierszy
Łączenie

Example
Id Imię Nazwisko Id Płaca
1 Grzegorz Schytyna 1 20000
2 Donald Tesk 2 15000
3 Lew Rewin 3 2500
4 Piotr Kaczyński 4 500

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Obiektowe bazy danych

Model relacyjny jest ubogi i niezgodny z reczywistością


Brak hermetyzacji
Obiekt identyfikowany przez dane
Brak metod
Niezgodność z obiektowym językami programowania
Obiektowe bazy danych pozbawione są tych wad
Język OQL
Brak komercyjnych obiektowych SZBD
Brak standardów
Rozwiązania łączone (moduły obiektowe w RDBMS)
Specjalne biblioteki (np. hibernate)

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

RDBMS Oracle

Korporacja Oracle ma 30 lat


RDBMS jest głównym produktem
Rozwiązanie stricte komercyjne
Oracle 10g Express Edition (XE) - do celów deweloperskich i
szkoleń
Oracle 11g
Jeden z pionierów w dziedzinie relacyjnych baz danych
Szeroko stosowany w praktyce
Zalety: duże wsparcie, optymalizacja, szybka, wydajna
Wady: cena

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Startowanie i stopowanie bazy


Po instalacji dostępne są skróty
Start Database
Stop Database

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Baza danych a usługi Windows


Pod systemem Windows RDBMS Oracle instalowany jest jako
usługa
Można wyłączyć automatyczny start
Microsoft Windows Vista wymaga uprawnień administratora
do startowania i zatrzymywania bazy danych

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Wyłączanie automatycznego startu

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Wyłączanie automatycznego startu

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Wyłączanie automatycznego startu

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Wyłączanie automatycznego startu

Piotr Kaczyński Bazy danych


Wprowadzenie Bazy danych
SQL*Plus Baza Oracle
Język SQL Podstawy Administracji

Kopie zapasowe

Dostarczane jako skróty w menu start


Backup Database
Restore Database
Składowani e w standardowym katalogu instalacyjnym
Odzyskiwanie z ostatnio zrobionej kopii zapasowej
Produkcyjnie bardzo ważna funkcja!

Piotr Kaczyński Bazy danych


Wprowadzenie
Łączenie z bazą
SQL*Plus
Wykonywanie poleceń
Język SQL

Program SQL*Plus

Standardowy porogram do komunikacji z RDBMS


Stanardowa ścieżka działania
Podłączenie do bazy danych (logowanie)
Wykonanie poleceń
Wyjście
Ważne klawisze
Strzałka ↑ - przywołanie ostatniego i poprzednich poleceń
Strzałka ↓ - przywołanie następnych poleceń
W starych wersjach nie działał delete ani backspace!
Uruchamiany z menu start
Run SQL Command Line
Wywołanie z linii poleceń: sqlplus

Piotr Kaczyński Bazy danych


Wprowadzenie
Łączenie z bazą
SQL*Plus
Wykonywanie poleceń
Język SQL

Podłączanie do bazy

Polecenie connect
Należy podać użytkownika (user) i hasło (password)
Wyjście poleceniem exit
Standardowy użytkownik i hasło w laboratorium
Użytkownik: student
Hasło: bd
Podłączanie bez interaktywnego logowania
connect user/password

Example (Logowanie nieinteraktywne)


connect student/bd

Piotr Kaczyński Bazy danych


Wprowadzenie
Łączenie z bazą
SQL*Plus
Wykonywanie poleceń
Język SQL

Polecenia SQL
Polecenia w języku zapytań SQL lub administracyjne
Każde polecenie musi być zakończone ”;”
Brak średnika przenosi do kolejnej linii
Example
SQL> s e l e c t ∗ from a s d f g
2 where k = 2
3 ;

Każde zapytanie zwraca informację o wierszach


zwróconych/zmodyfikowanych

Ćwiczenie
Podłącz się do bazy danych i wykonaj zapytanie
s e l e c t t a b l e n a m e from a l l t a b l e s ;

Piotr Kaczyński Bazy danych


Wprowadzenie
Łączenie z bazą
SQL*Plus
Wykonywanie poleceń
Język SQL

Wykonywanie skryptów

sqlplus umożliwia wykonywanie poleceń wsadowo


Skrypt musi być zapisany w pliku
Skrypt wykonywany linia po linii, aż do napotkania błędu
Wyowołanie
sqlplus user/password @plik

Ćwiczenie
Wykonaj skrypt sql createdb.sql

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Język SQL
Structured Query Language
Język deklaratywny a nie proceduralny
Mówimy co chcemy zobaczyć, a nie jak
Miał być bliski językowi naturalnemu
Czasami rozróżnia, czasami nie rozróżnia wielkich liter (zależy
od RDBMS)
Polecenia dzielimy na trzy grupy
DML Data Modification Language - polecenia
modyfikujące lub wyszukujące dane (SELECT,
INSERT, UPDATE, DELETE)
DDL Data Definition Language - polecenia definiujące
dane (CREATE, DROP, ALTER)
DCL Data Control Language - polecenia określające
dostęp do danych (GRANT, REVOKE)
Piotr Kaczyński Bazy danych
Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Język SQL przykład

Example
SELECT p e n s j a FROM p r a c o w n i c y ;
GRANT c o n n e c t TO p k a c z y n s k i ;
CREATE TABLE s t u d e n c i ( I m i e VARCHAR( 2 0 ) , N a z w i s k o VARCHAR( 3 0 ) ) ;

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Polecenie SELECT
Podstawowe polecenie SQL, wybiera dane z tabeli
Możliwe określenie kolumn, które zostaną wybrane
Wynikiem jest tabela
Składnia
SELECT kolumna1, kolumna2, ... FROM tabela
Wybranie wszystkich kolumn: znak *
Wybranie tylko różnych wierszy: klauzula DISTINCT
Zmiana nazw kolumn w tabeli wynikowej (aliasy)
SELECT kol1 alias1, kol2 alias2 , ... FROM tabela

Example
SELECT ∗ FROM p r a c o w n i c y ;
SELECT n a z w i s k o , p l a c a FROM p r a c o w n i c y ;
SELECT n a z w i s k o surname , p l a c a s a l a r y FROM p r a c o w n i c y ;
SELECT DISTINCT ∗ FROM s t u d e n c i ;

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Polecenie SELECT - ćwiczenie

Ćwiczenie
Wybierz wszystkie dane z tabeli studenci
Wybierz tylko imiona z tabeli studenci
Wybierz wszystkie dane z tabeli studenci tak, aby kolumna z
imieniem nazywała się ”name”
Ile różnych imion jest wśród studentów w tabeli studenci?

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Klauzula WHERE

Klauzula dodawana na końcu polecenia SELECT


Zawęża ilość wierszy w tabeli wynikowej
Po klauzuli pojawia się warunek logiczny na dane w kolumnie
Warunek logiczny może być złożony
Koniunkcja AND i alternatywa OR
Nawiasy działają w warunku logicznym
AND ma wyższy priorytet niż OR
Możliwe operatory
=, <>, <, >, <=, >=
Warunek na daty between
Wyszukiwanie szablonu LIKE i znak zastępujący dowolny ciąg
”%” lub dowolny znak ” ”

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Klauzula WHERE przykład


Example
SELECT ∗ FROM p r a c o w n i c y WHERE i m i e = ’ P i o t r ’ ;
SELECT i m i e name FROM p r a c o w n i c y WHERE name = ’ P i o t r ’ ;
SELECT i m i e name FROM p r a c o w n i c y WHERE i m i e = ’ P i o t r ’ ;
SELECT ∗ FROM p r a c o w n i c y WHERE p l a c a < 1 0 0 0 ;
SELECT ∗ FROM p r a c o w n i c y WHERE n a z w i s k o LIKE ’R% ’ AND p l a c a > 1 0 0 0

Ćwiczenie
Wybierz wszystkich studentów o imieniu Piotr
Wybierz wszystkich studentów, których imię zaczyna się od
litery P lub dalszej (w alfabecie)
Ile imion wśród studentów zaczyna się od litery ’P’ lub dalszej
(w alfabecie)
Ilu jest studentów, których nazwisko zaczyna się na ”B” lub
”D”?
Piotr Kaczyński Bazy danych
Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Klauzula ORDER BY
Sortuje wiersze według kolumn
Dodawana na koniec polecenia SELECT (już po WHERE, o ile
jest)
Kolejne kolumny wymieniane w liście oddzielanej przecinkami
Kolejność kolumn dyktuje priorytet sortowania
Najpierw sortuj po x potem po y
Po każdej kolumnie można dodać ASCENDING (rosnąco) lub
DESCENDING (malejąco)

Example
SELECT ∗ FROM p r a c o w n i c y ORDER BY n a z w i s k o , i m i e ;
SELECT i m i e FROM p r a c o w n i c y ORDER BY n a z w i s k o ;
SELECT i m i e name FROM p r a c o w n i c y ORDER BY name ;
SELECT ∗ FROM p r a c o w n i c y WHERE i m i e = ’ P i o t r ’ ORDER BY n a z w i s k o ;

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Klauzula ORDER BY ćwiczenie

Ćwiczenie
Wypisz listę studentów posortowaną po nazwiskach i imionach
Wypisz listę studentów któych nazwiska zaczynają się na ’A’
posortowaną po imionach

Piotr Kaczyński Bazy danych


Wprowadzenie Polecenie wyboru SELECT
SQL*Plus Wybór wierszy WHERE
Język SQL Sortowanie ORDER BY

Proste operacje na bazie danych - przypomnienie

Baza danych - co to jest


Relacyjne bazy danych
Narzędzie SQL*Plus
Podłączanie do bazy danych (connect student/bd)
Najprostsze zapytania do bazy danych
Klauzula SELECT
Filtrowanie wierszy WHERE
Warunek LIKE
Sortowanie ORDER BY

Example
SELECT ∗ FROM STUDENCI WHERE Imie LIKE ’A\%’ORDER BY Nazwisko;

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Część II

Funkcje i agregacje

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Plan prezentacji

4 Funkcje
Funkcje znakowe
Funkcje liczbowe
Funkcje czasu

5 Konwersja typów

6 Agregacje
Funkcje agregujące
Podgrupy
Filtrowanie podgrup

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje

Funkcje przyporządkowują argumentom pewne wyniki


Działają na wynikach zapytania
Modyfikują wyniki zapytania
Działają na każdym wierszu zapytania wynikowego
Kolumny, które są wynikiem funkcji nie mają nazwy
Nazwa taka, jak wyrażenie definiujące
Najlepiej nadawać aliasy

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje znakowe
Konkatenacja ciągów - operator ||
Example
SELECT I m i e | | N a z w i s k o t x t FROM s t u d e n c i ;

lower - przekształca litery na małe


Example
SELECT l o w e r ( N a z w i s k o ) n a z w i s k o FROM s t u d e n c i ;

upper - przekształca litery na duże


Example
SELECT u p p e r ( I m i e ) i m i e FROM s t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje znakowe c.d.

initcap - zamienia pierwsze litery wyrazów na wielkie,


pozostałe małe
Example
SELECT i n i t c a p ( I m i e || ’ ’ | | N a z w i s k o ) i m i e FROM s t u d e n c i ;

trim({leading|trailing|both} znak from Przycina


wybrany znak z początku lub końca innego ciągu znaków
Example
SELECT t r i m ( l e a d i n g ’A ’ FROM I m i e ) FROM s t u d e n c i
WHERE i m i e l i k e ’A% ’ ;
SELECT t r i m ( both ’A ’ FROM u p p e r ( I m i e ) ) FROM s t u d e n c i
WHERE i m i e l i k e ’A% ’ ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje znakowe c.d.

substr(ciąg, m[, n]) Wybranie podciągu znaków o


długości n od znaku m
Example
SELECT s u b s t r ( Nazwisko , 2 , 5 ) FROM S t u d e n c i ;
SELECT s u b s t r ( Nazwisko , 2 ) FROM S t u d e n c i ;

replace(ciąg, x, y) zamienia wystąpienia x na y


Example
SELECT r e p l a c e ( u p p e r ( N a z w i s k o ) , ’A ’ , ’ x ’ ) FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje znakowe c.d.

translate(ciąg, x, y) zamienia znaki x na y (liczy się


pozycja w ciągu)
Example
SELECT t r a n s l a t e ( u p p e r ( N a z w i s k o ) , ’AB ’ , ’BA ’ ) FROM S t u d e n c i ;

length zwraca długość ciągu znaków


Example
SELECT N a z w i s k o FROM S t u d e n c i WHERE l e n g t h ( N a z w i s k o ) > 1 0 ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje znakowe - ćwiczenia

Ćwiczenia
1 Wypisz imiona i nazwiska studentów tak, aby pierwsza litera

imienia była zastąpiona pierwszą literą nazwiska


2 Dla każdego studenta wygeneruj hasło składające się z
pierwszych trzech liter imienia (pisanych dużymi literami),
dwóch ostatnich liter nazwiska i liczby znaków w imieniu
(Przykład: Piotr Kaczyński -¿ PIOki5)

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje liczbowe
Można stosować operatory arytmetyczne
abs - wartość bezwzględna
ceil - sufit
floor - podłoga
mod(m,n) - reszta z dzielenia m przez n
power(m,n) - mn
round(m,n) - zaokrągla m do n miejsc po przecinku
trunc(m,n) - obcina m do n miejsc po przecinku
sign - zwraca znak liczy (−1,0 lub 1)

sqrt(n) - n

Example
SELECT r o u n d ( 2 ∗ s q r t ( l e n g t h ( N a z w i s k o ) ) +
3∗ s i g n ( l e n g t h ( I m i e ) ) , 2 ) l i c z b a FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje liczbowe - ćwiczenia

Ćwiczenia
1 Wypisz wszystkich studentów, którzy mają ocenę 4 lub 4.5

Wykorzystaj warunek logiczny


Wykorzystaj funkcję zaokrąglającą
2 Wyświetl oceny studentów podwyższone o 10%

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Czas

Czas zapisywany jest w 2 możliwych „prezycjach”


DATE - z dokładnością do dni
TIMESTAMP - z dokładnością do ułamków sekundy
Przedziały czasowe INTERVAL
Lata do miesięcy
Dni do sekund
Uwaga na zmiany czasu!

Example
09/10/29 21:57:01,552000 +01:00

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Odczyt czasu

Funkcje służące do pobrania aktualnego czasu


current date zwraca datę w formacie DATE
current timestamp zwraca datę w formacie TIMESTAMP
Zwracany czas jest czasem ustawionym na serwerze

Example
SELECT c u r r e n t d a t e , c u r r e n t t i m e s t a m p FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Znaczniki czasu

Literały czasowe
Poprzedzone DATE i podawane jako ciąg znaków
Poprzedzone TIMESTAMP i podawane jako ciąg znaków

Example
SELECT I m i e , N a z w i s k o FROM s t u d e n c i WHERE
d a t a u r o d z e n i a >= DATE ’ 1989−01−01 ’ ;
SELECT I m i e , N a z w i s k o FROM s t u d e n c i WHERE
o s t a t n i e l o g o w a n i e >= TIMESTAMP ’ 2009−10−29 2 3 : 0 0 : 0 0 ’ ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Przedziały czasu

Definiowane słowem kluczowym INTERVAL


Służą do określenia okresu czasu a nie jednej chwili
Umożliwiają określanie relacji między znacznikami czasowymi
Określane przez INTERVAL okres początek TO koniec
Początek i koniec mogą określać
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
Każdy z typów może określać w () precyzję

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Przedziały czasu c.d.

Example
INTERVAL ’ 25 ’ YEAR
INTERVAL ’ 19−3 ’ YEAR TO MONTH
INTERVAL ’ 1 2 : 1 6 ’ DAY TO MINUTE
INTERVAL ’ 2 3 : 1 2 : 1 2 . 1 5 ’ HOUR TO SECOND

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Działania na czasie

Chwile czasowe i przedziały czasu można dodawać i


odejmować
Wynik jest logiczną konsekwencją wybranych argumentów
Znacznik czasowy - znacznik czasowy = przedział czasu
Znacznik czasowy + przedział czasu = znacznik czasowy
Przedziały czasowe można mnożyć i dzielić przez liczbę
Przedizał czasowy odpowiednio dłuższy i krótszy
Uwaga na zmianę czasu!

Example
SELECT ( c u r r e n t t i m e s t a m p − INTERVAL ’ 168 ’ HOUR)
FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Ekstrakcja elementów daty

Można wybrać dowolny element znacznika czasowego


Funkcja extract(typ FROM data)
Typem może być YEAR, MONTH, DAY, HOUR, MINUTE,
SECOND

Example
SELECT e x t r a c t (DAY FROM c u r r e n t t i m e s t a m p ) FROM S t u d e n c i ;
SELECT ( e x t r a c t (YEAR FROM c u r r e n t t i m e s t a m p ) +
e x t r a c t (MONTH FROM c u r r e n t t i m e s t a m p ) +
e x t r a c t (DAY FROM c u r r e n t t i m e s t a m p ) ) AS n r
FROM s t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje znakowe
Konwersja typów Funkcje liczbowe
Agregacje Funkcje czasu

Funkcje czasu - ćwiczenia

Ćwiczenia
1 Wypisz wszystkich studentów, którzy urodzili się przed

pierwszym czerwca 1989


2 Wypisz studentów, którzy urodzili się w czerwcu
3 Wypisz studentów, których dzień urodzenia jest liczbą
podzielną przez 3
4 Wypisz tych studentów, którzy urodzili się w ostatnim dniu
miesiąca
5 Każdemu studentowi oblicz numer potrzebny do wróżb
numerologicznych

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Konwersja typów

Funkcja cast(wyr AS typ)


Wyrażeniem może być dowolny typ (ciąg znaków, liczba etc)
Typ na który rzutujemy może być np.
TIMESTAMP
DATE
NUMBER

Example
SELECT c a s t ( ’ 2009−01−01 ’ AS DATE) d a t a FROM S t u d e n c i ;
SELECT c a s t ( e x t r a c t (YEAR FROM c u r r e n t d a t e ) | |
e x t r a c t (MONTH FROM c u r r e n t d a t e ) | |
e x t r a c t (DAY FROM c u r r e n t d a t e ) AS NUMBER) l i c z b a
FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Wyrażenie CASE

Zastępuje wyrażenie jednym z wyników


Odpowiednik klauzuli switch w języku C++

Składnia
CASE w y r a z e n i e
WHEN x1 THEN y1
WHEN x2 THEN y2
[ ELSE y3 ]
END

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Wyrażenie CASE

Example
SELECT CASE s u b s t r ( I m i e , 1 , 1 )
WHEN ’A ’ THEN ’OK! ’
WHEN ’B ’ THEN ’NOT OK ’
ELSE ’MAYBE OK ’
END FROM S t u d e n c i ;

SELECT CASE s u b s t r ( I m i e , 1 , 1 )
WHEN ’A ’ THEN c u r r e n t d a t e
WHEN ’B ’ THEN ’AHA ’
END FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Operatory zbiorowe
Tabele są relacjami a relacje zbiorami
Można wykonać operacje teoriomnogościowe
UNION - Suma zbiorów z eliminacją powtórzeń
UNION ALL - Suma wszystkiego
MINUS - Różnica zbiorów
INTERSECT - Przecięcie zbiorów
Operacje muszą być wykonywane na tabelach o tej samej
liczbie kolumn i takich samych typów
Example
SELECT ∗ FROM s t u d e n c i WHERE I m i e LIKE ’A% ’
UNION
SELECT ∗ FROM s t u d e n c i WHERE I m i e LIKE ’B% ’ ;

SELECT ∗ FROM s t u d e n c i WHERE I m i e LIKE ’A% ’


INTERSECT
SELECT ∗ FROM s t u d e n c i WHERE N a z w i s k o LIKE ’A% ’ ;

Piotr Kaczyński Bazy danych


Funkcje
Konwersja typów
Agregacje

Operatory zbiorowe - ćwiczenia

Ćwiczenia
1 Wypisz studentów, których imie zaczyna się na ’A’, ale druga

litera imienia to nie ’n’

Piotr Kaczyński Bazy danych


Funkcje Funkcje agregujące
Konwersja typów Podgrupy
Agregacje Filtrowanie podgrup

Agregacje
Służą do wyliczania „statystyk”
Grupują wiersze według zadanej kolumny (kategorii)
Dostępne funkcje agregujące
COUNT(*) - liczba wierszy
COUNT(distinct wyr) liczba niepustych wystąpień wyr
MAX, MIN, AVG - wartość maksymalna minimalna, średnia
SUM - suma elementów
Example
SELECT COUNT( ∗ ) FROM S t u d e n c i ;

SELECT MIN( Ocena ) , MAX( Ocena ) , AVG( Ocena )


FROM S t u d e n c i ;

SELECT MIN( Ocena ) , MAX( Ocena ) , AVG( Ocena )


FROM S t u d e n c i
WHERE I m i e l i k e ’M% ’ ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje agregujące
Konwersja typów Podgrupy
Agregacje Filtrowanie podgrup

Grupy i podgrupy
Można agregować dla więcej niż jednej grupy
Tworzona jest „hierarchia” ze względu na kolumny
Klauzula GROUP BY
Każda kolumna, która znajdzie się w wyrażeniu SELECT musi
albo być wewnątrz funkcji agregującej albo w klauzuli GROUP
BY
Example
SELECT I m i e , AVG( Ocena ) FROM S t u d e n c i
GROUP BY( I m i e ) ;

SELECT s u b s t r ( I m i e , 1 , 1 ) im , AVG( Ocena ) FROM S t u d e n c i


GROUP BY( s u b s t r ( I m i e , 1 , 1 ) )
ORDER BY im ;

SELECT s u b s t r ( I m i e , 1 , 1 ) , s u b s t r ( Nazwisko , 1 , 1 ) , AVG( Ocena )


FROM S t u d e n c i
GROUP BY( s u b s t r ( I m i e , 1 , 1 ) , s u b s t r ( Nazwisko , 1 , 1 ) ) ;
Piotr Kaczyński Bazy danych
Funkcje Funkcje agregujące
Konwersja typów Podgrupy
Agregacje Filtrowanie podgrup

Filtrowanie grup

Klauzula WHERE odfiltrowuje na podstawie wartości kolumn


Filtrowanie na podstawie wyników agregacji klauzulą HAVING
Użycie klauzuli HAVING nie wyklucza użycie WHERE
WHERE jest stosowane „wcześniej”

Example
SELECT I m i e , COUNT( ∗ ) FROM S t u d e n c i
WHERE COUNT( ∗ ) >= 3 GROUP BY I m i e ; −− Błąd ! !

SELECT I m i e , COUNT( ∗ ) FROM S t u d e n c i


GROUP BY I m i e HAVING COUNT( ∗ ) >= 3 ;

Piotr Kaczyński Bazy danych


Funkcje Funkcje agregujące
Konwersja typów Podgrupy
Agregacje Filtrowanie podgrup

Ćwiczenia

Ćwiczenia
1 Wyświetl maksymalną ocenę uzyskaną przez studentów,

których nazwisko zaczyna się na ’K’


2 Wyświetl statystyki ocen: ile jakich ocen było
3 Wyświetl ile osób urodziło się w danym miesiącu
4 Wyświetl średnią ocen dla kobiet i dla mężczyzn z podziałem
na miesiąc, w którym są urodzeni
5 Wyświetl średnią ocen według miesiąca urodzenia studenta
biorąc pod uwagę oceny zaliczające (3 i więcej) oraz te
miesiące, dla których osób w nich urodzonych jest więcej niż 2.

Piotr Kaczyński Bazy danych


Złączenia

Część III

Złączenia

Piotr Kaczyński Bazy danych


Złączenia

Plan prezentacji

7 Złączenia
Złączenia wewnętrzne
Połączenia zewnętrzne
Wiele tabel

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Złączenia tabel

Dane mogą znajdować się w wielu tabelach


Różne rodzaje relacji między tabelami
Jeden do jednego
Jeden do wielu
Wiele do jednego
Wiele do wielu
Złączenia umożliwiają wybór z wielu tabel jednocześnie
Różne możliwości złączeń
Wewnętrzne
Zewnętrzne
Wyniki złączeń można filtrować (WHERE), sortować ( SORT BY
i grupować (GROUP BY) tak, jak zapytania z jednej tabeli.

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Iloczyn kartezjański

Tabele są relacjami
Relacje są zbiorami
Można wykonać iloczyn kartezjański zbiorów
Każdy wiersz jednej tabeli łączony jest z każdym wierszem
drugiej
Można wykonać iloczyn więcej niż dwóch tabel
Wynik może mieć bardzo dużo wierszy
Łączone tabele wymieniane po przecinku

Example
SELECT ∗ FROM S t u d e n c i , P r z e d m i o t y ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Aliasy tabel

Mogą zdażyć się konflikty nazw kolumn tabel


Można poprzedzać nazwy kolumn nazwami tabel
Example
−− Błąd , kolumna I d j e s t w obu t a b e l a c h
SELECT ∗ FROM P r z e d m i o t y , K s i a z k i WHERE I d = 4 ;
−− P o p r a w n i e
SELECT ∗ FROM P r z e d m i o t y , K s i a z k i WHERE K s i a z k i . I d = 4 ;

Tabelom podobnie jak kolumnom można nadawać aliasy


Example
SELECT ∗ FROM P r z e d m i o t y p , K s i a z k i k WHERE p . I d = 3 ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Połączenia równościowe
Tabele najczęściej łączy się „po kolumnie”
Jedna z tabel zawiera informacje uzupełniające do infromacji
w drugiej
Wartości w danej kolumnie muszą być równe
Klauzula JOIN tabela ON warunek złączenia
W obu tabelach muszą istnieć odpowiadające wiersze
Jeśli możliwych połączeń jest wiele, zwielokrotnione zostaną
wiersze w tabeli wynikowej.
Warunek złączenia podobny ja w klauzuli WHERE)

Example (Złączenie równościowe)


SELECT k . T y t u l , s . I m i e , s . N a z w i s k o
FROM K s i a z k i k
JOIN S t u d e n c i s ON k . W y p o z y c z a j a c y = s . I n d e k s ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Połączenia naturalne

Kolumny, po których wykonywane jest łączenie często


nazywają się tak samo
Złączenie naturalne jest skróconym zapisem złączenia
wewnętrznego
Klauzula NATURAL JOIN tabela bez podania

Example (Złączenie naturalne)


SELECT Nazwa , I n d e k s , Ocena FROM P r z e d m i o t y p
JOIN Oceny o ON
p . Id przedmiotu = o . Id przedmiotu ;
SELECT Nazwa , I n d e k s , Ocena
FROM P r z e d m i o t y
NATURAL JOIN Oceny ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Ćwiczenia

1 Wypisz wszystkich studentów i ich oceny


2 Wypisz pary studentów, którzy mają tak samo na imię
3 Wypisz pary studentów, których nazwiska zaczynają się na tą
samą literę
4 Wypisz wszystkich studentów oraz średnią ich ocen ze
wszystkich przedmiotów
5 Wypisz wszystkich studentów i średnią ich ocen z algebry i
baz danych (id przedmiotu 4 oraz 1)
6 Wypisz wszystkich studentów i ich średnią z algebry i baz
danych któych średnia z tych przedmiotó jest większa niż 4.0
7 Wypisz dane jak do punktu poprzedniego sortując po średniej.

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Połączenia zewnętrzne

Połączenia wewnętrzne
Pasujące wiersze muszą istenieć w obu tabelach
Połączenia zewnętrzne
W jednej z tabel nie musi istnieć wiersz pasujący
Odpowiadają zapytaniom typu
Wypisz dane o pracownikach i ich żonach (o ile mają żonę)
Klauzule
LEFT JOIN
RIGHT JOIN
FULL JOIN

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

LEFT JOIN

W składni podobne do JOIN


Uwzględniają wszystkie wiersze z tabeli pierwszej i tylko te
wiersze z tabeli dołączanej, które pasują

Example (LEFT JOIN)


Wypisz wszystkich studentów i tytuły książek, które wypożyczyli, o
ile mają wypożyczoną książkę.
SELECT I m i e , Nazwisko , T y t u l FROM S t u d e n c i s
LEFT JOIN K s i a z k i k ON ( s . I n d e k s=k . W y p o z y c z a j a c y ) ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

RIGHT JOIN

W składni podobne do JOIN


Uwzględniają wszystkie wiersze z tabeli dołączanej i tylko te
wiersze z tabeli pierwszej, które pasują

Example (RIGHT JOIN)


Wypisz wszystkie książki i nazwiska studentów, którzy je
wypożyczyli (o ile ktoś wypożyczył daną książkę).
SELECT I m i e , Nazwisko , T y t u l FROM S t u d e n c i s
RIGHT JOIN K s i a z k i k ON ( s . I n d e k s=k . W y p o z y c z a j a c y ) ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

FULL JOIN

W składni podobne do JOIN


Uwzględniają wszystkie wiersze z tabeli pierwzej i wszystkie
wiersze z tabeli drugiej
Jeśli jakieś wiersze pasują, to są one wypisywane jako jeden

Example (FULL JOIN)


Wypisz wszystkie książki i wszystkich studentów, którzy je
wypożyczyli (lub nie wypożyczyli nic).
SELECT I m i e , Nazwisko , T y t u l FROM S t u d e n c i s
FULL JOIN K s i a z k i k ON ( s . I n d e k s=k . W y p o z y c z a j a c y ) ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Łączenie wielu tabel

Możliwe jest kaskadowe łączenie wielu tabel


Wynik złączenia jest argumentem kolejnego złączenia (jako
tabela „lewa”)
Wykorzystywane np. w złączeniu wiele do wielu
Możliwe jest łączenie tabel samych ze sobą

Example (Many to many)


Wypisz studentów, przedmioty oraz oceny jakie z nich dostali.
SELECT I m i e , Nazwisko , Nazwa , Ocena
FROM S t u d e n c i s
JOIN Oceny o ON s . I n d e k s = o . I n d e k s
JOIN P r z e d m i o t y p ON o . I d p r z e d m i o t u = p . I d p r z e d m i o t u
WHERE I m i e l i k e ’A% ’ ;

Piotr Kaczyński Bazy danych


Złączenia wewnętrzne
Złączenia Połączenia zewnętrzne
Wiele tabel

Ćwiczenia

1 Wypisz wszystkich studentów, którzy mają wypożyczoną choć


jedną książkęd
2 Wypisz wszystkich studentów i ich ocenę z przedmiotów,
których nazwa zaczyna się na ’A’, o ile takową dostali
3 Dla każdego studenta wypisz, ile ma pożyczonych książek;
4 Wypisz nazwę przedmiotu, średnią ocen z niego w zależności
od tego, na jaką literę zaczyna się nazwisko osoby

Piotr Kaczyński Bazy danych


Podzapytania

Część IV

Podzapytania

Piotr Kaczyński Bazy danych


Podzapytania

Plan prezentacji

8 Podzapytania
Podzapytania jako źródło zapytań
Podzapytania filtrujące
Podzapytania skorelowane

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Podzapytania

Zapytania umieszczone wewnątrz innych zapytań


Zawsze umieszczone w nawiasach
Możliwe do umieszczenia w
Klauzuli FROM
Klauzuli WHERE, HAVING
Klauzuli SELECT
Używane w zależności od ilości zwracanych wierszy
Wierszowe
Tablicowe
Możliwe użycie wyników zapytania nadrzędnego

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Zapytania jako źródło zapytań


Podzapytania można umieszczać jako tabelę źródłową
zapytania
Po klauzuli FROM
Jako prawy element złączenia
Aliasy kolumn podzapytania stają się nazwami kolumn tabeli
źródłowej
Obowiązują te same zasady co w zwykłych zapytaniach
Example (Podzapytanie FROM)
SELECT ∗ FROM (SELECT I m i e , Nazwisko , AVG( Ocena ) s r e d n i a
FROM S t u d e n c i
NATURAL JOIN Oceny
GROUP BY I m i e , N a z w i s k o ) ;
−− Błąd p o n i ż e j , z ł a nazwa kolumny
SELECT Nazwisko , AVG( Ocena )
FROM (SELECT I m i e , Nazwisko , AVG( Ocena ) s r e d n i a
FROM S t u d e n c i
NATURAL JOIN Oceny
GROUP Piotr
BY Kaczyński
I m i e , N aBazy
z w idanych
sko ) ;
Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Podzapytania wierszowe
Zwracają pojedynczy wiersz (może być klika kolumn)
Możliwe do użycia w klauzuli WHERE
Jako wrunek z operatorem logicznym (=, <= itd)
Warunek = i <> może być używany do wielu kolumn
Liczy się kolejność kolumn w podzapytaniu
Można również użyć bezpośrednio w klauzuli SELECT
Definiuje wartość kolumny

Example
SELECT I m i e , N a z w i s k o FROM S t u d e n c i
NATURAL JOIN Oceny
WHERE Ocena = ( SELECT MIN( Ocena )
FROM Oceny
NATURAL JOIN S t u d e n c i
WHERE I d P r z e d m i o t u = 1 )
AND I d P r z e d m i o t u = 1 ;

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Podzapytania wierszowe - Przykład


Example
Wypisz wszystkich studentów, którzy mają na imię Piotr i ich
numer indeksu jest równy średniej wartości wszystkich indeksów.
SELECT I m i e , N a z w i s k o FROM S t u d e n c i
WHERE ( I m i e , I n d e k s ) =
(SELECT ’ P i o t r ’ , AVG( I n d e k s ) FROM S t u d e n c i ) ;

Example
Wybierz wszystkich studentów, których średnia ocen jest mniejsza
niż średnia ocen wszystkich studentów ze wszystkich przedmiotów.
SELECT I m i e , Nazwisko , AVG( Ocena )
FROM S t u d e n c i
NATURAL JOIN Oceny
GROUP BY I m i e , N a z w i s k o
HAVING AVG( Ocena ) < (SELECT AVG( Ocena ) FROM S t u d e n c i
NATURAL JOIN Oceny ) ;

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Podzapytania tablicowe

Podzapytania zwracają więcej niż jeden wiersz


Możliwe wykorzystanie
W klauzuli WHERE
W klauzuli HAVING
Porównywanie elementu wiersza zapytania głównego z
wieloma wierszami podzapytania
Operatory logiczne
ALL
ANY

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Operatory ALL i ANY

Operator ANY
Warunek jest spełniony jeśli zachodzi dla dowolnego wiersza
podzapytania
Operator ALL
Warunek jest spełniony jeśli zachodzi dla każdego wiersza
podzapytania
Jeśli operatorem porównującym jest = to porównania można
robić dla wielu kolumn.

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Operatory ALL i ANY przykład


Example (Operator ANY)
Wypisz wszystkich studentów którzy mają średnią ocenę większą
niż dowolna z ocen z przedmiotu o id 1
SELECT I m i e , N a z w i s k o FROM S t u d e n c i NATURAL JOIN OCENY
GROUP BY I m i e , N a z w i s k o
HAVING AVG( Ocena ) > ANY ( SELECT Ocena FROM Oceny
WHERE I d P r z e d m i o t u = 1 ) ;

Example (Operator ALL)


Wypisz wszystkich studentów którzy mają średnią ocenę większą
niż średnia z ocen z poszczególnych przedmiotów.
SELECT I m i e , N a z w i s k o FROM S t u d e n c i NATURAL JOIN OCENY
GROUP BY I m i e , N a z w i s k o
HAVING AVG( Ocena ) > ALL (SELECT AVG( Ocena ) FROM Oceny
GROUP BY I d P r z e d m i o t u ) ;

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Zagnieżdżanie podzapytań
Każde podzapytanie może mieć podzapytania
Zagnieżdżeń może być nieskończenie wiele
Uwaga na wydajność takich zapytań!

Example
Wypisz tych studentów, którzy mają pożyczoną książkę o tytule,
który zaczyna się na tą samą literę, co książka wypożyczona przez
studenta o największym numerze indeksu wśród studentów
wypożyczających książki.
SELECT I m i e , N a z w i s k o FROM S t u d e n c i
JOIN K s i a z k i ON S t u d e n c i . I n d e k s = K s i a z k i . W y p o z y c z a j a c y
WHERE s u b s t r ( T y t u l , 1 , 1 ) =
(SELECT s u b s t r ( T y t u l , 1 , 1 ) FROM K s i a z k i
WHERE W y p o z y c z a j a c y =
(SELECT MAX( W y p o z y c z a j a c y ) FROM K s i a z k i ) ) ;

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Ćwiczenia

z1 Wypisz studenta o najdłuższym nazwisku


z2 Wypisz imiona, nazwiska oraz średnią ocen tych studentów,
którzy mają średnią o 10% lepszą niż średnia wszystkich
studentów
z3 Wypisz kto dostał najlepszą ocenę z Algebry (id przedmiotu =
1)
z4 Wypisz imię i nazwisko studenta, który wypożyczył najwięcej
książek oraz ile tych książek pożyczył

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Podzapytania skorelowane

Podzapytania mogą mieć jako parametr wartość zapytania


nadrzędnego
Uwaga na wydajność i aliasy

Example
Wypisz studentów (imię i nazwisko), którzy mają wypożyczoną
książkę o tytule, który zaczyna się na literę większą niż pierwsza
litera tytułu dowolnej książki autora, którego nazwisko zaczyna się
na tą samą literę co nazwisko studenta.
SELECT I m i e , N a z w i s k o FROM S t u d e n c i s
JOIN K s i a z k i ON s . I n d e k s = K s i a z k i . W y p o z y c z a j a c y
WHERE s u b s t r ( T y t u l , 1 , 1 ) > ALL (SELECT s u b s t r ( T y t u l , 1 , 1 )
FROM K s i a z k i
WHERE s u b s t r ( Autor , 1 , 1 ) =
s u b s t r ( s . Imie , 1 , 1 ) ) ;

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Operator EXISTS

Operator sprawdzający czy isnieje choć jeden odpowiadający


wiersz
Podzapytanie obliczane dla każdego wiersza

Example (Exists)
Wypisz wszystkich studentów, dla których da się znaleźć innego
studenta o nazwisku zaczynającym się na te same trzy pierwsze
litery.
SELECT I m i e , N a z w i s k o FROM S t u d e n c i s
WHERE EXISTS ( SELECT ∗ FROM S t u d e n c i
WHERE s u b s t r ( Nazwisko , 1 , 3 ) =
s u b s t r ( s . Nazwisko , 1 , 3 )
AND s . I n d e k s <> I n d e k s ) ;

Piotr Kaczyński Bazy danych


Podzapytania jako źródło zapytań
Podzapytania Podzapytania filtrujące
Podzapytania skorelowane

Ćwiczenia

x1 Wypisz nazwy przedmiotów oraz imiona i nazwiska tych


studentów, którzy mają największą średnią w danym
przedmiocie.
x2 Wypisz imiona i nazwiska oraz średnie tych studentów, których
średnia jest najwyższa wśród studentów o tym samym imieniu.
x3 Wypisz imiona i nazwiska tych studentów, którzy mają imię
takie, którego nie ma żaden inny student
x4 Wypisz tych studentów, którzy mają wszystkie oceny niższe
niż średnia tych studentów, którzy mają tak samo na imię.

Piotr Kaczyński Bazy danych


Definiowanie tabel
Modyfikacja danych

Część V

Manipulacja danymi

Piotr Kaczyński Bazy danych


Definiowanie tabel
Modyfikacja danych

Plan prezentacji

9 Definiowanie tabel
Typy danych
Polecenia DDL

10 Modyfikacja danych
Wstawianie
Zmiana
Usuwanie

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Typy liczbowe

Typ Opis Max


NUMBER(n,p) Liczba o precyzji n, p p=38, s=-84− >127
INTEGER Synonim NUMBER(38) 38 cyfr
FLOAT Zmiennoprzecinkowy
Bez podania precyzji NUMBER oznacza liczbę
zmiennoprzecinkową o maksymalnie 9 cyfrach po przecinku.
n oznacza liczbę wszystkich cyfr w liczbie
Podając tylko n oznacza liczbę całkowitą o n cyfrach
p oznacza ilość cyfr „po przecinku” (wśród n wszystkich)
Podając ujemne p liczba jest zaokrąglana do dziesiątek (-1),
setek (-2), tysięcy (-3) itd.

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Typy liczbowe - przykłady

Example
Liczba 12345678.89
NUMBER → 12345678.9
NUMBER(5) → nie wyświetli się (za mała precyzja)
NUMBER(9,1) → 12345678.9
NUMBER(8,1) → nie wyświetli się (za mała precyzja)
NUMBER(7,-1) → 123456780
NUMBER(7,-2) → 123456700

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Typy znakowe

Typ Opis Max


VARCHAR2 Ciąg znaków zmiennej długości 4000
NVARCHAR2 Ciąg znaków narodowych zmiennej długości 4000
CHAR Ciąg znaków stałej długości 2000
NCHAR Ciąg znaków narodowych stałej długości 2000
CLOB Bardzo długi ciąg znaków 4GB

Pola o zmiennej szerokości będą zajmować tylko tyle znaków,


ile przechowywany tekst
Pola o stałej szerokości wypełniane są znakami pustymi, jeśli
tekst nie zajmuje całości
Nadają się do kodów, symboli etc.

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Daty i czas

Typ Opis Max


DATE Data (do dni) 31.12.9999
TIMESTAMP Dokładny czas
INTERVAL YEAR TO MONTH Przedział czasowy
INTERVAL DAY TO SECOND Przedział czasowy
Typ TIMESTAMP można opatrzeć WITH TIME ZONE -
dodatkowo przesunięcie czasowe
Każdy z typów można opatrzeć precyzją
TIMESTAMP(n) ilość cyfr na ułamki sekundy
INTERVAL YEAR(n) TO MONTH ilość cyfr dla roku
INTERVAL DAY(n) TO SECOND(p) n cyfr dla dni i p dla
ułamka sekund

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Binarne

Typ Opis Max


RAW Ciąg bajtów 2000
BLOB Bardzo długi ciąg bajtów 4GB
XMLType Dane w XML 4GB
Typy binarne są mało przenośne
Mało wydajne przy wyszukiwaniu
Należy używać z wielką ostrożnością

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Wartości puste

Wartość pustą reprezentuje literał NULL


Dana kolumna może zawierać wartość pustą o ile definicja na
to pozwala
Identyfikuje wartość „nie znana”
W zapytaniach można sprawdzać czy dana kolumna jest NULL
Oparator logiczny IS NULLL oraz IS NOT NULL
Nie można stosować = NULL
W Oracle pusty ciąg znaków jest identyfikowany jako NULL, a
nie ’’

Example
SELECT ∗ FROM S t u d e n c i WHERE P e s e l I S NOT NULL ;

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Tworzenie tabeli

Polecenie CREATE TABLE nazwa


Po nim następuje w nawiasach lista nazw kolumn i ich typów
Lista oddzielana przecinkami
Można podać wartość dimyślną kolumny DEFAULT

Example
CREATE TABLE S t u d e n c i ( I m i e VARCHAR2( 3 0 ) ,
N a z w i s k o VARCHAR2( 3 0 ) ,
Ocena NUMBER( 2 , 1 ) ) ;
CREATE TABLE S t u d e n c i ( I m i e VARCHAR2( 3 0 ) ,
N a z w i s k o VARCHAR2( 3 0 ) ,
Ocena NUMBER( 2 , 1 ) DEFAULT 2 ) ;

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Ograniczenia

Domyślnie wszystkie kolumny mogą przyjąć wartość NULL


Przy definicji można dodać NOT NULL po typie kolumny
Można dodać ograniczenie na wartość liczbową
Przy definicji kolumny podajemy warunek po słowie CHECK
Na końcu definicji kolumn jeśli obejmuje więcej niż jedną
kolumnę

Example
CREATE TABLE S t u d e n c i ( I m i e VARCHAR2( 3 0 ) NOT NULL ,
N a z w i s k o VARCHAR2( 3 0 ) NOT NULL ,
Ocena NUMBER( 1 , 1 )
CHECK ( Ocena >= 2 AND Ocena <= 5 ) ;
CREATE TABLE P r a c a (Od DATE NOT NULL ,
Do DATE NOT NULL ,
CHECK (Od <= Do ) ;

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Modyfikacja tabeli

Właściwości tabeli i kolumn można zmieniać


Polecenie ALTER TABLE nazwa
DROP COLUMN nazwa - usuwa kolumnę (niezalecane!)
ADD nazwa typ - dodaje kolumnę o zadanym typie
MODIFY nazwa typ - zmienia typ kolumny
RENAME TO nazwa - zmienia nazwę tabeli
RENAME COLUMN nazwa TO nazwa2 - zmienia nazwę kolumny

Example
ALTER TABLE DROP COLUMN Ocena ;
ALTER TABLE S t u d e n c i ADD P e s e l NUMBER( 1 1 ) ;
ALTER TABLE S t u d e n c i MODIFY Ocena NUMBER( 4 , 2 ) ;
ALTER TABLE S t u d e n c i RENAME TO W y n i k i ;
ALTER TABLE S t u d e n c i RENAME COLUMN Ocena RENAME TO Wynik ;

Piotr Kaczyński Bazy danych


Definiowanie tabel Typy danych
Modyfikacja danych Polecenia DDL

Usuwanie tabeli

Wykonywane polecenien DROP TABLE nazwa


Operacja niepolecana
Szczególnie, gdy są ważne dane
Operacja nieodwracalna
Usuwa, jeśli tabela nie jest przez kogoś używana

Example
DROP TABLE S t u d e n c i ;

Piotr Kaczyński Bazy danych


Wstawianie
Definiowanie tabel
Zmiana
Modyfikacja danych
Usuwanie

Transakcyjność

Każda operacja wykonywana jest w ramach transakcji


Transakcje powinny być ACID
Atomicity - niepodzielność
Consistency - spójność
Isolation - izolacja
Durability - trwałość
Zatwierdzanie transakcji COMMIT
Cofanie transakcji ROLLBACK
Operacje DDL wykonują COMMIT automatycznie
Wszystkie inne należy zatwierdzać ręcznie

Piotr Kaczyński Bazy danych


Wstawianie
Definiowanie tabel
Zmiana
Modyfikacja danych
Usuwanie

Wstawianie proste
Wiersz wstawiany jest przez
INSERT INTO nazwa tabeli VALUES(wartości)
Wartości podawane są w kolejności takiej, jak definicja
kolumny
Można podać do których kolumn i w jakiej kolejności
INSERT INTO nazwa tabeli(kolumny) VALUES(wartości)
Nie trzeba podawać wszystkich kolumn (wtedy wstawione
zostaną NULLe)

Example
CREATE TABLE S t u d e n c i ( I m i e VARCHAR2( 3 0 ) ,
N a z w i s k o VARCHAR2( 3 0 ) ,
Ocena NUMBER( 2 , 1 ) ) ;
INSERT INTO S t u d e n c i VALUES( ’ P i o t r ’ , ’ K a c z y n s k i ’ , 5 ) ;
INSERT INTO S t u d e n c i ( Nazwisko , I m i e )
VALUES( ’ P i o t r ’ , ’ K a c z y n s k i ’ ) ;

Piotr Kaczyński Bazy danych


Wstawianie
Definiowanie tabel
Zmiana
Modyfikacja danych
Usuwanie

Wstawianie z zapytania

Wartości wstawiane do tabeli mogą pochodzić z zapytania


Obie wersje INSERT dozwolone (z podaniem kolumn i bez)
Można tworzyć tabelę od razu uzupełniając ją danymi
Polecenie CREATE TABLE nazwa AS SELECT FROM ...
Można podać nazwy kolumn i ich typy (ale muszą być zgodne)

Example
INSERT INTO Oceny SELECT ∗ FROM Oceny ;
INSERT INTO Oceny ( Ocena ) SELECT Ocena ∗2 FROM Oceny ;
CREATE TABLE W y n i k i AS SELECT ∗ From Oceny ;
CREATE TABLE W y n i k i ( N a z w i s k o VARCHAR2( 3 0 ) ,
Wynik NUMBER( 3 , 1 ) )
AS SELECT Nazwisko , Ocena ∗3 FROM Oceny ;

Piotr Kaczyński Bazy danych


Wstawianie
Definiowanie tabel
Zmiana
Modyfikacja danych
Usuwanie

Zmiana wierszy

Polecenie UPDATE nazwa tabeli SET


Po tym następuje lista kolumna = wartość
Na końcu klauzula WHERE aby wyselekcjonować, które
weirsze mają być zmienione
Wartość może być przypisana z podzapytania wierszowego

Example
UPDATE Oceny SET Ocena = 2 ;
UPDATE Oceny SET Ocena = 2∗ Ocena ;
UPDATE Oceny SET Ocena = 2 ,
Uwagi = ’ I m i e na A ’
WHERE I m i e LIKE ’A% ’ ;
UPDATE Oceny o SET Ocena = ( SELECT AVG( Ocena ) FROM Oceny )
WHERE EXISTS (SELECT Ocena FROM Oceny
WHERE Ocena > o . Ocena ) ;

Piotr Kaczyński Bazy danych


Wstawianie
Definiowanie tabel
Zmiana
Modyfikacja danych
Usuwanie

Usuwanie proste

Usuwanie poleceniem DELETE FROM nazwa tabeli


Można (w zasadzie powinno się) podać klauzulę WHERE
Klauzula WHERE ogranicza wiersze, które mają być skasowane
Można stosować podzapytania

Example
DELETE FROM S t u d e n c i ;
DELETE FROM S t u d e n c i WHERE I m i e LIKE ’A% ’ ;
DELETE FROM S t u d e n c i s
WHERE s . o c e n a <
SELECT AVG( Ocena ) FROM S t u d e n c i ;

Piotr Kaczyński Bazy danych


Wstawianie
Definiowanie tabel
Zmiana
Modyfikacja danych
Usuwanie

Ćwiczenia
Ćwiczenia
Napisz skrypt, który
1 Utworzy tabelę Pracownicy z kolumnami Imie, Nazwisko,
PESEL, Pensja
2 Wstawi 5 pracowników do tej tabeli (wymyśl dane)
3 Doda kolumnę Kod o takim samym rozmiarze jak PESEL
4 Zakuduje numery PESEL dodając do każdej cyfry 2 (modulo
10) i wstawi wartości do kolumny Kod
5 Usunie wszystkich pracowników, których Kod PESEL kończy
się na 0
6 Podwyższy pozostałym pracownikom pensję o 20%
7 Podwyższy o 10% pensję tym pracownikom, którzy mają
pensję większą niż średnia pensja wszystkich pracowników
Piotr Kaczyński Bazy danych
Model pojęciowy
Model logiczny
Normalizacja

Część VI

Projektowanie bazy danych

Piotr Kaczyński Bazy danych


Model pojęciowy
Model logiczny
Normalizacja

Plan prezentacji

11 Model pojęciowy
Diagramy związków encji
Związki
Identyfikacja encji

12 Model logiczny
Przekształcanie modelu pojęciowego
Ograniczenia integralności
Indeksy

13 Normalizacja
Zależności
Postacie normalne

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Cele projektowania pojęciowego

Model konceptualny
Precyzyjne określenie zakresu projektu
Określenie wymagań użytkownika
Modelowanie informacji
Niezbędne dla działania systemu
Niezależne od implementacji
Według określonego modelu danych
Kierujemy się potrzebami użytkownika
Odpowiada na pytanie co? a nie jak?

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Diagramy związków encji

Przykład modelu pojęciowego


Entity Relationship Diagram (ERD)
Elementy diagramu
Encje
Atrybuty encji
Związki
Unikalne identyfikatory
Kilka konwencji diagramów
Wyamagana konsekwencja!

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Diagram związków encji - przykład

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Encje

Model rzeczy, osób itp.


O których chcemy przechowywać informacje
Które mają tożsamość
Nazwa: rzeczownik w l.poj., wielkie litery

Example (Przykłady encji)


produkt (towar), przedmiot
osoba, pracownik, klient
dokument, pozycja dokumentu
...

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Atrybuty
Określają cechy rzeczy, osób itp.
Identyfikują
Opisują
Podają ilości
Klasyfikują
Są typu prostego (atomowego, nie są tablicami)
Muszą mieć precyzyjne nazwy
Rodzaje atrybutów
Należące do unikalnego identyfikatora (znak #)
Obowiązkowe (znak *)
Opcjonalne (znak o)

Example (Przykłady atrybutów)


Kod towaru, nazwa
Nr identyfikacyjny, imię, nazwisko, adres
Cena, wartość, rodzaj płatności
Piotr Kaczyński Bazy danych
Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Związki

Pokazują zależności między encjami


Powinny być obustronnie nazwane
Nie zapisuje się sposobu realizacji
Cechy związków
Opcjonalność (po każdej stronie)
Opcjonalny (linia przerywana)
Obowiązkowy (linia ciągła)
Stopień (po każdej stronie)
Jeden (1, pojedyncza linia)
Wiele (n, kurza łapka)
Pierwotna unikalność identyfikatora (pozioma kreska)
Transferowalność (związek nietransferowalny zaznacza )
Rekurencyjność

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Błędny projekt pojęciowy


Uwzględnianie identyfikatorów uwzględnia implementację

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Transferowalność i rekurencyjność
Związek tranferowalny
Tą samą instancję związku można przenieść na inne encje

Example
Relacja Producent → Towar nietransferowalna
Relacja Towar → Właściciel transferowalna

Związek rekurencyjny
Jedna instancja encji jest w relacji z inną instancją tej samej
encji
Drzewa, grafy

Example
Każdy pracownik ma szefa, który również jest pracownikiem
Relacja Pracownik → Pracownik

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Poprawność związków
Związki muszą sensownie odzwierciedlać rzeczywistość
Związki 1-1 są podejrzane
Związki obustronnie obowiązkowe są podejrzane (zbytnie
obostrzenie)
Związki rekurencyjne muszą być obustronnie opcjonalne
Rozbicie związków n-m (wiele do wielu)

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Związki wykluczające się


Stosujemy, gdy dana encja może być w związku z jedną z
dwóch różnych encji
Zapisywana w konwencji „łuku”
Łuk może być
Obowiązkowy (zachodzi dokładnie jeden związek)
Opcjonalny (zachodzi jeden lub żaden)

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Związki rekurencyjne
Drzewa
Związek obustronnie opcjonalny
Modelują hierarchię
Grafy
Rekurencyjny związek n-m
Ostatecznie - dwa związki 1-n

Piotr Kaczyński Bazy danych


Model pojęciowy Diagramy związków encji
Model logiczny Związki
Normalizacja Identyfikacja encji

Identyfikacja encji
Każda encja powinna mieć unikalny identyfikator
Możliwe składniki identyfikatora
Atrybuty
Związki
Atrybuty i związki
Example
Pozycję faktury identyfikuje numer pozycji i związek z odpowiednią
fakturą.
Pierwotny unikalny identyfikator
Identyfikuje wszystkie wystąpienia encji
Wszystkie składniki obowiązkowe
Powinien być niezmienny, łatwy do wyznaczenia, czytelny,
słabo złożony (mała ilość znaków)
Wtórny unikalny identyfikator
Do celów kontrolnych
Pola mogą być opcjonalne
Piotr Kaczyński Bazy danych
Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Cele projektu logicznego

Zaprojektowanie
Struktur dcanych
Ograniczeń integralności
Obudowy proceduralnej (wyzwalacze)
Perspektyw
Rozwiązań dla przetwarzania rozproszonego
Brany pod uwagę konkretny SZBD
Projekt logiczny jest podstawą do stworzenia fizycznej bazy
danych

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Przekształcenie modelu pojęciowego w logiczny

Encje → tabele
Nazwy tabel w liczbie mnogiej
Bez znaków narodowych etc.
Atrybuty → kolumny
Typy dostępne w SZRBD
Obowiązkowość → NOT NULL
Pierwotne identyfikatory unikalne → klucze główne
Wtórne identyfikatory unikalne → ograniczenia unikalności
Związki → klucze obce
Obowiązkowość → NOT NULL
Nietransferowalność → niezmienność klucza

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Ograniczenia integralności

Deklaratywne
Wykonywane przezn serwer bd
Dotyczą wszystkich operacji
Dotyczą wszystkich wierszy
Wykonywane bezbłędnie i zoptymalizowane
Proceduralne
Wykonywane przez serwer (dla wszystkich operacji) lub
aplikację
Dotyczą tylko zmienianych danych
Kod może zawierać błędy (pisane przez developerów)
Realizowane przez wyzwalacze (tzw. triggers)
Należy dążyć do ograniczeń deklaratywnych

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Wyzwalacze

Procedury rezydujące w serwerze b.d.


Automatycznie wyzwalane przez:
Wstawienie wiersza
Usunięcie wiersza
Modyfikację określonych kolumn
Służą do
Wymuszania nietypowych reguł integralności
Nietypowych zabezpieczeń dostępu
Śledzenia zmian w b.d.
Wymuszania integralności referencyjnej w rozproszonych b.d.
Nietypowej replikacji danych
Klauzla CREATE TRIGGER

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Ograniczenia deklaratywne

Kolumny: NOT NULL, CHECK


Wiersza: CHECK
Tabeli: Klucz główny (PRIMARY KEY), unikalność (UNIQUE)
Referencyjne: Klucz obcy (FOREIGN KEY

Example (Ograniczenie UNIQUE)


CREATE TABLE STUDENCI ( I m i e VARCHAR( 3 0 ) ,
N a z w i s k o VARCHAR( 3 0 ) ,
P e s e l NUMBER( 1 1 ) ,
UNIQUE( I m i e ) ) ;

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Klucz główny
Funkcja: jednoznaczna identyfikacja wiersza
Tworzenie ograniczeniem deklaratywnym PRIMARY KEY
Dla idetyfikatora z samych atrybutów: odpowiednie kolumny
Dla identyfikatora z atrybutów i związków: kolumny atrybutów
i kolumny kluczy obcych
Sztuczne klucze główne
Klucz numeryczny
Generowane z sekwencji
Klucz główny tworzy indeks

Example
CREATE TABLE STUDENCI ( I m i e VARCHAR( 3 0 ) ,
N a z w i s k o VARCHAR( 3 0 ) ,
Ocena NUMBER( 1 , 1 ) ,
PRIMARY KEY( I m i e , N a z w i s k o ) ) ;

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Klucz obcy

Realizują związki
Implementacja:
Dodanie kolumn klucza obcego odpowiadających kolumnom
wskazywanego klucza głównego
Ograniczenie deklaratywne REFERENCES
Sposób obsługi modyfikacji/usuwania wskazywanego klucza
głównego
Kaskada - ON DELETE CASCADE (kasuje/modyfikuje się razem
z kluczem głównym)
Restrykcja - bez klauzuli (usuwanie/modyfikacja niemożliwa,
gdy jest choć jedna instancja encji podrzędnej)
Reprezentacja łuku
Dwa osobne klucze obce opcjonalne
Warunek wykluczania (CHECK)
Na każdy klucz obcy powinien być nałożony indeks
Piotr Kaczyński Bazy danych
Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Klucz obcy - przykłady

Example
CREATE TABLE F a k t u r y ( i d f a k t u r y NUMBER PRIMARY KEY ) ;
CREATE TABLE P o z y c j e ( i d p o z y c j i NUMBER,
i d f a k t u r y REFERENCES F a k t u r y ( i d f a k t u r y )
ON DELETE CASCADE ) ;

Piotr Kaczyński Bazy danych


Model pojęciowy Przekształcanie modelu pojęciowego
Model logiczny Ograniczenia integralności
Normalizacja Indeksy

Indeksy

Specjalne struktury w bazie danych


Przyspieszają wyszukiwanie danych
Przyspieszają złączenia tabel
Ich użycie musi być uzasadnione
Przy częstych zmianach tabeli są mało wydajne
Zajmują miejsce na dysku
Tworzenie poleceniem CREATE INDEX

Example
CREATE INDEX n a z w a i n d e k s u ON t a b e l a ( kolumny ) ;
CREATE INDEX f k i n d e x p o z y c j e ON P o z y c j e ( i d f a k t u r y ) ;

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Zależności funkcyjne

Definition
Mówimy, że zbiór atrybutów Y jest zależny funkcyjnie od zbioru
atrybutów X tej samej relacji, gdy z każdą konfiguracją wartości
atrybutów z X jest związana co najwyżej jedna konfiguracja
wartości w Y . Zależność tą oznaczamy X → Y .

Example
Imię zależy funkcyjnie od id pracownika
Id pracownika nie zależy funkcyjnie od imienia
Imię nie zależy funkcyjnie od nazwiska

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Zależność tranzytywna

Definition
Mówimy, że istnieje zależność tranzytywna A do X jeśli istnieje
zbiór Y zależny funkcyjne od X oraz zbiór A jest zależny
funkcyjnie od Y . Przy czym X nie jest zależne funkcyjnie od X
oraz A nie jest podzbiorem sumy X i Y .

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Zależności wielowartościowe
Definition
Mówimy, że zbiór atrybutów Y jest zależny wielowartościowo od
zbioru X gdy z każdą konfiguracją wartości atrybutów z X jest
związany zbiór konfiguracji wartości z Y niezależnie od wartości
pozostałych atrybutów. Zależność tą oznaczamy X →→ Y .

Example
Zajęcia Wykładowca Podręcznik
BD Kaczyński XYZ
BD Kwasowiec XYZ
BD Kaczyński UVW
Podręczniki nie zależą od wykładowców
Nie ma zależności funkcyjnych
Zależności wielowartościowe Z →→ W oraz Z →→ P
Piotr Kaczyński Bazy danych
Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Pierwsza postać normalna (1NF)

Definition
Relacja jest w 1NF gdy wszystkie atrybuty są atomowe – prostych
typów

1NF jest wymogiem dla rachunku relacyjnego, a więc i


języków zapytań
Kontrprzykłady:
Atrybut tablicowy
Zbiór

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Druga postać normalna (2NF)


Definition
Relacja jest w 2NF gdy każdy atrybut niekluczowy (nie należący do
klucza właściwego) jest zależny funkcyjnie od całego klucza
właściwego

Przyczyną braku 2NF jest zwykle błędne połączenie danych


Naruszenie 2NF polega na istnieniu zależności funkcyjnej od
fragmentu klucza właściwego
Kontrprzykład: spis przepustek
Tabela z kolumnami #Id prac,#Budynek,Nazwisko
Nazwisko zależy funkcyjnie od id prac, czyli od fragmentu
klucza
Należy rozłożyć na dwie tabele:
#Id prac,#Budynek
#Id prac,Nazwisko
Piotr Kaczyński Bazy danych
Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Trzecia postać normalna

Definition
Relacja jest w 3NF gdy każdy atrybut niekluczowy jest
bezpośrednio zależny funkcyjnie od całego klucza właściwego

Możliwe przypadki naruszenia 3NF


Naruszenie 2NF
Istnienie zależności tranzytywnej (a więc niebezpośredniej) od
klucza właściwego
3NF jest zazwyczaj wystarczająca dla usunięcia praktycznie
ważnych anomalii
Każdy schemat można doprowadzić do 3NF zachowując
Zależności
Odwracalność rozkładu

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Trzecia postać normalna - przykład

Example
Dana jest następująca relacja
#Id pracownika Nazwisko Stanowisko Pensja
Relacja jest w 2NF (klucz jednoatrybutowy)
Isnieje zależność tranzytywna I → S → P
Rozkład na INS oraz SP sprowadza do 3NF

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Postać normalna Boyce’a-Codda (BCNF)

Definition
Relacja jest w BCNF gdy każda nietrywialna zależność funkcyjna
jest zależnością od klucza (niekoniecznie właściwego)

W BCNF zależności tranzytywne nie istnieją w ogóle


Nie każdy schemat można doprowadzić do BCNF z
zachowaniem zależności
Najczęściej skutki wynikające z braku BCNF nie są istotne z
punktu widzenia projektu

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Postać normalna BC - przykład

Example
Dana jest następująca relacja
Miasto Ulica Kod pocztowy
Istnieją tu klucze MU, UK (nazwy ulic mogą się powtarzać w
różnych miastach)
Występują zależności MU → K , K → M
Anomalie: usuwając ulicę możemy utracić informację o mieście
Relacja jest w 3NF: brak atrybutow niekluczowych
Relacja nie jest w BCNF: K nie jest kluczem
Relacja jest nierozkładalna do BCNF bez utraty zależności

Piotr Kaczyński Bazy danych


Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Czwarta postać normalna (4NF)

Definition
Relacja jest w 4NF gdy jeśli każda nietrywialna zależność
wielowartościowa jest zależnością od klucza (niekoniecznie
właściwego)

Example
Dana jest następująca relacja
Zajęcia Wykładowca Podręcznik
Istnieją zależności Z →→ W oraz Z →→ P
Nie ma zależności funkcyjnych, a więc jest BCNF
Występuje nadmiar informacji: powtórzone dane dla
podręczników i wykładowców
Rozkład ZW , ZP doprowadza do 4NF
Piotr Kaczyński Bazy danych
Model pojęciowy
Zależności
Model logiczny
Postacie normalne
Normalizacja

Wymagania

Struktury relacyjne w systemach transakcyjnych powinny być


co najmniej w 3NF
Odstępstwa
Poważne problemy wydajnościowe
Projekt musi być znormalizowany, dopiero później można
denormalizować
Konsekwencje odstępstw
Redundancja i anomalie
Ryzyko utraty spójności danych
Komplikacja kodu

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Kursory
Programy składowane

Część VII

PL/SQL

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Kursory
Programy składowane

Plan prezentacji

14 PL/SQL - Wstęp
Podstawy
Zmienne i typy danych
Instrukcje sterujące

15 Kursory
Tworzenie i podstawowe użycie kursora
Kursor a pętla FOR

16 Programy składowane
Procedury i funkcje
Wyzwalacze

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Język PL/SQL

Język Proceduralny a nie deklaratywny,


Mówimy jak a nie co
W tym sensie podobny do C czy C++
Specyficzny dla SZRBD Oracle
Wykorzystywany do zadań specjalnych
Nietypowe zapytania
Wykonywanie skomplikowanych zadań administracyjnych
Migracja danych
...
Preferowany język deklaratywny

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Blok języka PL/SQL


Program składa się z bloków (odpowiedniki {...} w C)
Bloki mogą być zagnieżdżane
/ uruchamia ostatnio wprowadzony blok w SQL*Plus
Blok PL/SQL - podstawowy
BEGIN
polecenia
END;

Blok PL/SQL - rozszerzony


DECLARE
deklaracje
BEGIN
polecenia
EXCEPTION
o b s ł u g a błędów
END;
Piotr Kaczyński Bazy danych
PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Typy danych
Te same co w SQL
Dodatkowo
Typ logiczny BOOLEAN (TRUE lub FALSE)
Typ RECORD
Możliwa deklaracja tablic
Deklaracja zmiennych w sekcji DECLARE
Widoczność zmiennych podobnie jak w C (zagnieżdżanie
bloków)
Stałe deklarowane z CONSTANT
Example
DECLARE
i m i e VARCHAR2 ( 2 0 ) ;
p o c z a t e k DATE ;
p o p r a w n i e BOOLEAN ;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Inicjalizacja zmiennych

Inicjalizacja przez przypisanie :=


Zmienne mogą przyjmować wartość NULL
Zmienne domyślnie przyjmują NULL
Można dodać ograniczenie NOT NULL
Stałe trzeba zainicjalizować

Example
DECLARE
i m i e VARCHAR2( 2 0 ) := ’ P i o t r ’ ;
p o c z a t e k DATE NOT NULL := ’ 2010−01−01 ’ ;
p o p r a w n i e BOOLEAN := TRUE ;
s t a l a CONSTANT VARCHAR2( 1 0 ) := ’ Moja S t a l a ’ ;
BEGIN
NULL ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Rekordy
Odpowiednik struktury w C++
Definicja typu
TYPE nazwa typu IS RECORD(lista pól)
Deklaracja zmiennej
nazwa typu nazwa zmiennej
Odwołanie do pól przez kropkę

Example
DECLARE
TYPE ADRES I S RECORD( U l i c a VARCHAR2( 2 0 ) , Numer NUMBER( 3 ) ) ;
m o j a d r e s ADRES ;
BEGIN
m o j a d r e s . U l i c a := ’ D e w a j t i s ’ ;
m o j a d r e s . Numer := ’ 5 ’ ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Sufiksy typów

Sufiks %TYPE wyciąga typ atrybutu do którego jest doklejony


Sufiks %ROWTYPE wyciąga typr rekordu jednego wiersza tabeli

Example
DECLARE
imie studenta s t u d e n c i . i m i e%TYPE ;
dane studenta s t u d e n c i%ROWTYPE;
BEGIN
imie studenta := ’ P i o t r ’ ;
dane studenta . i m i e := ’ P i o t r ’ ;
dane studenta . n a z w i s k o := ’ K a c z y n s k i ’ ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

printf i scanf w PL/SQL


Pobranie od użytkownika
Zmienna z &
Zostanie zastąpiona przed wywołaniem procedury
Wypisanie na ekran
Funkcja dmbs output.putline
Należy odpowiednio ustawić SQL*Plus
SET SERVEROUTPUT ON

Example
SET SERVEROUTPUT ON;
DECLARE
x NUMBER( 2 ) := &x ;
BEGIN
DBMS OUTPUT . PUT LINE ( ’ Kwadrat t e j l i c z b y to ’ | | x∗x ) ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Operatory w PL/SQL

Arytmetyczne
+, -, *, /, **
** oznacza potęgowanie
Logiczne
AND, OR
Porównania
=, <, >, <=, >=, <>, !=
IS NULL, IS NOT NULL, LIKE

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Instrukcja IF
Wykonuje instrukcje jeśli warunek jest prawdziwy (do END IF)
Możliwa klauzula ELSE
Dodatkowe warunki ELSIF

Example
DECLARE
x NUMBER( 2 ) := &x ;
BEGIN
I F x < 0 THEN
x := −1;
ELSIF x = 0 THEN
x := 0 ;
ELSE
x := 1 ;
END I F ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Instrukcja CASE
Sprawdzanie wielu warunków (porównanie do wielu wartości)
Example
DECLARE
x NUMBER( 2 ) := 2 ;
BEGIN
CASE
WHEN x > 2 THEN
x := −x ;
WHEN x < 2 THEN
x := 2∗ x ;
ELSE
x := x ∗∗ x ;
END CASE ;
CASE x
WHEN 3 THEN
x := 4 ;
WHEN 4 THEN
x := 5 ;
END CASE ;
END; Piotr Kaczyński Bazy danych
PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Pętla LOOP
Podobna do pętli do-while w C
Wyjście z pętli
Po napotkaniu EXIT
EXIT może być z warunkiem (EXIT WHEN)

Example
DECLARE
x NUMBER( 2 ) ;
BEGIN
x := 0 ;
LOOP
x := x +1;
d b m s o u t p u t . p u t l i n e ( ’X = ’ | | x ) ;
I F x = 5 THEN
EXIT ;
END I F ;
EXIT WHEN x = 5 ;
END LOOP ;
END;
/
Piotr Kaczyński Bazy danych
PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Pętla WHILE

Podobna do pętli while w C


Wyjście z pętli EXIT i EXIT WHEN
Warunek pętli musi być spełniony

Example
DECLARE
x NUMBER( 2 ) ;
BEGIN
x := 0 ;
WHILE x <= 5 LOOP
x := x +1;
d b m s o u t p u t . p u t l i n e ( ’X = ’ | | x ) ;
END LOOP ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Pętla FOR
Podobna do pętli for w C
Wyjście z pętli EXIT i EXIT WHEN
Iterator zmienia się w zadanym zakresie
Iteratora nie można zmieniać
Można iterować od końca (REVERSE)
Example
DECLARE
x NUMBER( 2 ) ;
BEGIN
FOR x IN 1 . . 5 LOOP
d b m s o u t p u t . p u t l i n e ( ’X = ’ | | x ) ;
END LOOP ;
FOR x IN REVERSE 1 . . 5 LOOP
d b m s o u t p u t . p u t l i n e ( ’X = ’ | | x ) ;
END LOOP ;
END;
/
Piotr Kaczyński Bazy danych
PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Użycie SELECT

Można wartość zwróconą z zapytania podstawić do zmiennej


Zapytanie musi zwrócić jeden wiersz
Zmienna musi być typu rekordowego o tych samych
atrybutach
Instrukcja SELECT INTO
Obowiązują te same zasady co w normalnym SELECT

Example
DECLARE
d a n e a g e n t a a g e n c i%ROWTYPE;
BEGIN
SELECT ∗ INTO d a n e a g e n t a FROM A g e n c i WHERE ID = 1 ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp Podstawy
Kursory Zmienne i typy danych
Programy składowane Instrukcje sterujące

Użycie DML
DELETE identyczne jak deklaratywne;
Można używać zmiennych PL/SQL
Przy UPDATE można użyć pseudokolumny row jeśli zmieniamy
cały wiersz

Example
DECLARE
d a n e a g e n t a A g e n c i%ROWTYPE;
BEGIN
SELECT ∗ INTO d a n e a g e n t a FROM A g e n c i WHERE ID = 1 ;
d a n e a g e n t a . I m i e := ’ A r t u r ’ ;
UPDATE A g e n c i SET row = d a n e a g e n t a ;
d a n e a g e n t a . i d := 1 0 0 ;
INSERT INTO A g e n c i VALUES d a n e a g e n t a ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Tworzenie i podstawowe użycie kursora
Kursory
Kursor a pętla FOR
Programy składowane

Kursor

Specjalny twór w pamięci SZRBD


Przechowuje aktualny wiersz z listy
Lista tworzona dowolnie np. zapytaniem
Zachowuje się podobnie jak iterator w C++
Rodzaje kursorów
Jawne, deklarowane przez programistę
Niejawne przez wywołanie poleceń UPDATE, INSERT, DELETE i
SELECT

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Tworzenie i podstawowe użycie kursora
Kursory
Kursor a pętla FOR
Programy składowane

Deklarowanie kursora

W sekcji DECLARE
Aby go użyć należy
1 Otworzyć kursor (wykona się zapytanie z nim związane)
2 Pobrać kolejny rekord
3 Zamknięcie
Kursory mogą mieć argumenty (tak jak funkcje)

Example
DECLARE
CURSOR c u r a g e n c i I S SELECT ∗ FROM A g e n c i ;
CURSOR c u r a g e n c i 2 ( i d a NUMBER( 2 ) ) I S
SELECT ∗ FROM A g e n c i WHERE i d = i d a ;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Tworzenie i podstawowe użycie kursora
Kursory
Kursor a pętla FOR
Programy składowane

Używanie kursora
Otwieranie poleceniem OPEN
Można podać ew. argumenty kursora
Zamykanie poleceniem CLOSE
Pobieranie kolejnego rekordu FETCH

Example
DECLARE
CURSOR c u r a g e n c i ( i d a g e n t a a g e n c i . i d%TYPE)
I S SELECT ∗ FROM A g e n c i WHERE i d < i d a g e n t a ;
a g e n t a g e n c i%ROWTYPE;
BEGIN
OPEN c u r a g e n c i ( 5 ) ;
FETCH c u r a g e n c i INTO a g e n t ;
dbms output . p u t l i n e ( agent . nazwisko ) ;
CLOSE c u r a g e n c i ;
END;
/

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Tworzenie i podstawowe użycie kursora
Kursory
Kursor a pętla FOR
Programy składowane

Atrybuty kursora
%ISOPEN zwraca, czy kursor jest otwarty
%FOUND zwraca prawdę, jeśli ostatnie pobranie zwróciło
cokolwek
%ROWCOUNT zwraca ile wierszy zostało pobranych

Example
DECLARE
CURSOR c u r a g e n c i ( i d a g e n t a a g e n c i . i d%TYPE)
I S SELECT ∗ FROM A g e n c i WHERE i d < i d a g e n t a ;
a g e n t a g e n c i%ROWTYPE;
BEGIN
OPEN c u r a g e n c i ( 5 ) ;
d b m s o u t p u t . p u t l i n e ( ’ Pobrano ’ | | c u r a g e n c i%ROWCOUNT) ;
FETCH c u r a g e n c i INTO a g e n t ;
d b m s o u t p u t . p u t l i n e ( ’ Pobrano ’ | | c u r a g e n c i%ROWCOUNT) ;
END;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Tworzenie i podstawowe użycie kursora
Kursory
Kursor a pętla FOR
Programy składowane

Użycie kursora w pętli FOR


Pętla przebiega wiersze
Automatyczne pobieranie kolejnego wiersza
Nie trzeba zamykać czy otwierać kursora
Iterator jest „wskaźnikiem” na wiersz
Zamiast kursora można użyć podzapytania

Example
DECLARE
CURSOR c u r a g e n c i ( i d a g e n t a a g e n c i . i d%TYPE)
I S SELECT ∗ FROM A g e n c i WHERE i d < i d a g e n t a ;
BEGIN
FOR a g e n t IN c u r a g e n c i ( 1 5 ) LOOP
dbms output . p u t l i n e ( agent . nazwisko ) ;
END LOOP ;
END;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Tworzenie i podstawowe użycie kursora
Kursory
Kursor a pętla FOR
Programy składowane

Użycie kursora do zmiany danych

Użycie z klauzulą WHERE CURRENT OF


Kursor musi być zadeklarowany z opcją FOR UPDATE
Otwartyu kursor blokuje możliwość zmiany innym

Example
DECLARE
CURSOR c u r a g e n c i ( i d a g e n t a a g e n c i . i d%TYPE)
I S SELECT ∗ FROM A g e n c i WHERE i d < i d a g e n t a
FOR UPDATE ;
BEGIN
FOR a g e n t IN c u r a g e n c i ( 1 5 ) LOOP
UPDATE a g e n c i SET N a z w i s k o = ’AA ’
WHERE CURRENT OF c u r a g e n c i ;
DELETE FROM A g e n c i WHERE CURRENT OF c u r a g e n c i ;
END LOOP ;
END;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Programy składowane

Przechowywane na serwerze bazy danych


Skompilowane
Nazwane
Możliwe do użycia w dowolnym (sensownym) miejscu kodu
Napisane w PL/SQL
Typy programów
Procedury
Funkcje
Pakiety
Wyzwalacze
Po błędnej kompilacji show errors

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Procedury

Wykonanie bez zwracania


Mają parametry
Nie mogą być używane w zapytaniach
Blok PL/SQL poprzedzony CREATE PROCEDURE
Wywołanie
Z innego programu/zapytania jak funkcję
Jako argument execute
Są to polecenia DDL - Uwaga na auto commit

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Tworzenie procedury

Example
DROP PROCEDURE z m i e n a g e n t a ;
CREATE PROCEDURE z m i e n a g e n t a ( i d a g e n t a IN NUMBER) I S
CURSOR c u r a g e n c i ( i d a g e n t a a a g e n c i . i d%TYPE)
I S SELECT ∗ FROM A g e n c i WHERE i d < i d a g e n t a a
FOR UPDATE;
BEGIN
FOR a g e n t IN c u r a g e n c i ( i d a g e n t a ) LOOP
UPDATE a g e n c i SET N a z w i s k o = ’AA ’ | | N a z w i s k o
WHERE CURRENT OF c u r a g e n c i ;
END LOOP ;
END;
/
execute zmien agenta ( 1 0 ) ;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Funkcje
Zwracają wartość
Mogą być używane w zapytaniach
Blok PL/SQL poprzedzony CREATE FUNCTION
Deklaracja zwracanego typu po RETURN
Wywołanie tylko z zapytań lub innych procedur
Example
CREATE FUNCTION p o l i c z l i t e r y a g e n t o w ( i d a g e n t a IN NUMBER)
RETURN NUMBER I S
x NUMBER := 0 ;
BEGIN
FOR a g e n t IN (SELECT ∗ FROM A g e n c i WHERE i d < i d a g e n t a ) LOOP
x := x + l e n g t h ( a g e n t . n a z w i s k o ) ;
END LOOP ;
RETURN x ;
END;
/
s e l e c t p o l i c z l i t e r y a g e n t o w ( 1 0 ) FROM DUAL ;
Piotr Kaczyński Bazy danych
PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Wyzwalacze

Procedura wywoływana niejawnie


Przez zajście zdarzenia w bazie danych
Zmiana danych
Usunięcie danych
Tworzenie lub modyfikacja tabel
Zalogowanie/wylogowanie użytkownika itp
W wybranym momencie zdarzenia
Przed
Po
Dla różnych zestawów danych
Jednokrotnie dla polecenia
Jednokrotnie dla każdego rekordu w poleceniu

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Tworzenie wyzwalacza

CREATE TRIGGER
Wyzwalacz musi mieć nazwę
Kiedy: BEFORE lub AFTER
Wybór zdarzenia UPDATE, INSERT, DELETE

Example
DROP TRIGGER p o u s u n i e c i u ;
CREATE TRIGGER p o u s u n i e c i u
AFTER DELETE ON A g e n c i
BEGIN
d b m s o u t p u t . p u t l i n e ( ’USUNALES AGENTA ! ! Powiadamiam CBA ! ’ ) ;
END;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Wyzwalacz wierszowy

Wykonywany dla każdego wiersza


wstawianego/modyfikowanego
Można odwoływać się do starej i nowej wartości
:OLD i :NEW
Dodatkowa klauzula FOR EACH ROW

Example
DROP TRIGGER p o u s u n i e c i u 2 ;
CREATE TRIGGER p o u s u n i e c i u 2
AFTER DELETE ON A g e n c i
FOR EACH ROW
BEGIN
d b m s o u t p u t . p u t l i n e ( ’ Usuwasz a g e n t a ’ | | : OLD . n a z w i s k o ) ;
END;

Piotr Kaczyński Bazy danych


PL/SQL - Wstęp
Procedury i funkcje
Kursory
Wyzwalacze
Programy składowane

Ćwiczenia

Ćwiczenia
1 Wypisz nazwiska tych agentów, którzy mają nazwisko dłuższe

niż nazwisko agenta przed nim na liście agentów posortowanej


alfabetycznie (po nazwiskach).

Piotr Kaczyński Bazy danych


Użytkownicy i schematy
Zarządzanie bazą danych
Zagadnienia dodatkowe

Część VIII

Administracja bazą danych

Piotr Kaczyński Bazy danych


Użytkownicy i schematy
Zarządzanie bazą danych
Zagadnienia dodatkowe

Plan prezentacji

17 Użytkownicy i schematy
Schematy
Użytkownicy
Przywileje

18 Zarządzanie bazą danych


Uruchamianie i zatrzymywanie
Kopie zapasowe
Metadane

19 Zagadnienia dodatkowe
Widoki
Przestrzenie tabel

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Schematy

Schemat to wydzielony zbiór obiektów bazy danych


Tabel
Indeksów
Funkcji
Wyzwalaczy
...
Posiada nazwę
Jest własnością jednego użytkownika
W Oracle nazwa schematu jest tożsama z nazwą użytkownika
Pełna nazwa obiektu poprzedzana nazwą schematu

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Dostęp do obiektów

Pełne odwołanie do obiektu


SCHEMAT.Obiekt
Nie trzeba poprzedzać nazwą schematu jeśli to nasz schemat
W różnych schematach mogą istnieć obiekty o tych samych
nazwach
Dostęp do różnych schematów może być różny
Użytkonik może określać zakres dostępu do swojego schematu

Example
SELECT ∗ FROM A g e n c i ;
SELECT ∗ FROM PIOTREK . A g e n c i ;
SELECT ∗ FROM PIOTREK . A g e n c i NATURAL JOIN A g e n c i ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Użytkownicy

Osoba lub aplikacja uprawniona do dostępu do danych


Użytkownik ma nazwę
Uwierzytelnianie (weryfikacja tożsamości)
Przez SZBD
Przez system operacyjny
Przez usługę sieciową
Każdemu użytkonikowi przysługują określone prawa
System przywilejów

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Tworzenie i usuwanie użytkowników

Tworzenie użytkownika
CREATE USER nazwa
Metody identyfikacji (IDENTIFIED)
Lokalna (BY hasło)
Zewnętrzna (IDENTIFIED EXTERNALLY)
Globalna (IDENTIFIED GLOBALLY as nazwa)
Blokowanie użytkonika
ACCOUNT LOCK/UNLOCK
Zmuszenie użytkownika do zmiany hasła
PASSWORD EXPIRE
Usuwanie użytkownika
DROP USER nazwa

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Użytkownicy - przykład

Example
CREATE USER k r e c i k IDENTIFIED BY c z e c h y ;
DROP USER k r e c i k ;
CREATE USER k r e c i k IDENTIFIED e x t e r n a l l y ;
DROP USER k r e c i k ;
CREATE USER k r e c i k IDENTIFIED g l o b a l l y a s ’ A l a J a n o s z ’ ;
DROP USER k r e c i k ;
CREATE USER k r e c i k IDENTIFIED BY c z e c h y PASSWORD EXPIRE ;
ALTER USER k r e c i k IDENTIFIED BY s l o w a c j a ;
ALTER USER k r e c i k PASSWORD EXPIRE ;
ALTER USER k r e c i k ACCOUNT LOCK ;
ALTER USER k r e c i k ACCOUNT UNLOCK ;
DROP USER k r e c i k ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Przywileje

Przywileje pozwalają na wykonywanie poszczególnych


czynności na bazie danych
Rodzaje przywilejów
Systemowe (do działań na bazie danych)
Obiektowe (do działań na obiektach bazy danych)
Przywileje mogą być pogrupowane
Grupa przywilejów to rola
Jeden użytkonik może mieć wiele ról

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Przyznawanie i usuwanie przywilejów

Przyznanie przywilejów
GRANT przywileje TO użytkownik
Odebranie przywileju
REVOKE przywileje FROM użytkownik
Nadanie uprawnień do przekazywania uprawnień
Przywileje można wymieniać jako listę oddzieloną przecinkami
Dla uprawnień systemowych WITH ADMIN OPTION
Dla uprawnień obiektowych WITH GRANT OPTION

Example
GRANT CONNECT, SELECT ANY TABLE TO k r e c i k ;
REVOKE SELECT ANY TABLE FROM k r e c i k ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Przywileje systemowe

CREATE SESSION Pozwala podłączyć się do bazy danych


CREATE Pozwala na tworzenie obiektów we własnym
schemacie
TABLE, PROCEDURE, TRIGGER, USER
CREATE ANY Pozwala na tworzenie obiektów w dowolnym
schemacie
ALTER Pozwala na zmianę obiektów
codeUSER, SESSION
ALTER ANY Pozwala na zmianę obiektów w dowolnym
schemacie
INDEX, ROLE, TABLE, TRIGGER
SELECT ANY TABLE Pozwala na zapytania do tabel w dowolnym
schemacie
Piotr Kaczyński Bazy danych
Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Przywileje systemowe c.d.


DROP Pozwala na usuwanie obiektów
USER
DROP ANY Pozwala na usuwanie obiektów w dowolnym
schemacie
TABLE, ROLE, INDEX, ROLE
GRANT ANY ROLE Pozwala nadawać role innym
EXECUTE ANY Pozwala wywoływać procedury
PROCEDURE
SYSDBA Uprawnienia administratora bazy danych

Example
GRANT CREATE SESSION TO k r e c i k ;
GRANT CREATE ANY TABLE TO k r e c i k WITH ADMIN OPTION ;
REVOKE CREATE ANY TABLE FROM k r e c i k ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Przywileje obiektowe

Przyznawane dla konkretnych obiektów bazy danych


Tabel
SELECT, ALTER, INSERT, UPDATE, DELETE
Procedur i funkcji
EXECUTE
GRANT uprawnienie TO użytkownik ON obiekt
Można przyznać wszystkie uprawnienia na raz (ALL)
Do obiektów utworzonych przyznawane jest ALL dla twórcy

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Schematy
Zarządzanie bazą danych Użytkownicy
Zagadnienia dodatkowe Przywileje

Role
Rola to zbiór uprawnień
Tworzenie/usuwanie ról
CREATE/DROP ROLE nazwa
Dodawanie i odejmowanie uprawnień rolom identyczne jak
użytkownikom
Dodawanie i odbieranie ról użytkownikom identyczne jak
uprawnień
Zmiana roli wpływa na uprawnienia wszystkich użytkowników
ją posiadających
Example
CREATE ROLE p r z e g l a d a c z ;
GRANT SELECT ANY TABLE TO p r z e g l a d a c z ;
GRANT p r z e g l a d a c z TO k r e c i k WITH ADMIN OPTION ;
GRANT SELECT , DELETE ON s t u d e n c i TO k r e c i k ;
DROP ROLE p r z e g l a d a c z ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Uruchamianie i zatrzymywanie

Tryby pracy bazy danych ORACLE


CLOSED Baza danych zamknięta poprawnie (nie
pracuje)
CRASH CLOSED Baza danych zamnięta po awarii (nie
pracuje)
NOMOUNT SZRBD wystartowany, żadna baza danych
nie zamontowana
MOUNTED Zamontowana baza danych, ale pliki
kontrolne nie są otwarte
OPENED W pełni otwarta baza danych.
Zamykanie bazy danych SHUTDOWN/ALTER DATABASE CLOSE
Bez czekania na użytkowników z opcją IMMEDIATE
Podwyższanie poziomu działania STARTUP/ALTER DATABASE

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Uruchamianie i zatrzymywanie

Example
SHUTDOWN;
STARTUP NOMOUNT;
ALTER DATABASE MOUNT;
ALTER DATABASE OPEN ;
ALTER DATABASE CLOSE ;
SHUTDOWN IMMEDIATE ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Kopie zapasowe

Kopie zapasowe umożliwiają odtworzenie stanu bazy danych


po awarii
Możliwe sposoby tworzenia
Export - Logiczna ekstrakcja danych do pliku (stworzenie
skryptu SQL)
Zimny backup - backup po zamknięciu bazy danych
Ciepły backup - backup w trakcie pracy bazy danych
Możliwe cofnięcie do dowolnego stanu w przeszłości
Baza danych musi pracować w trybie ARCHIVELOG
Example
RECOVER DATABASE UNTIL TIME ’ 2010 −10 −01:00:00:00 ’ ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Tryb ARCHIVELOG
Praca w tym trybie wymaga zapisu informacji o każdej
transakcji do dziennika
Pozwala na wykonywanie ciepłych backupów
Spowalnia pracę bazy danych
Umożliwia cofanie i przywracanie zmian (roll back i roll
forward)
Przełączanie trybu tylko przy zamkniętej bazie danych
(MOUNTED)
Po nieudanej próbie odtworzenia otwarcie z opcją RESETLOGS
Example
CONNECT s y s AS SYSDBA ;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG ;
ARCHIVE LOG START ;
SHUTDOWN;
STARTUP MOUNT;
Piotr Kaczyński ;
ALTER DATABASE OPEN RESETLOGS Bazy danych
Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Zimny backup

Nie wymaga trybu archivelog


Wymaga całkowitego zamknięcia bazy danych
Wymagane skopiowanie odpowiednich plików
Konieczne jest zbackupowanie pliku kontrolnego (bardzo
ważny!)
ALTER DATABASE BACKUP CONTROLFILE TO ’nazwapliku’
Dane przechowywane są w plikach dbf
instalacja oracle/oradata/XE

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Ciepły backup
Wymaga trybu ARCHIVELOG
Nie wymaga zamknięcia bazy danych
Można kolejno backupować przestrzenie tabel lub całą bazę
danych
Należy również backupować
Plik kontrolny
Pliki dziennika logu

Example
ALTER TABLESPACE x y z BEGIN BACKUP ;
−− K o p i o w a n i e p l i k u
ALTER TABLESPACE x y z END BACKUP ;
ALTER DATABASE BEGIK BACKUP ;
−− K o p i o w a n i e w s z y s t k i c h p l i k ó w
ALTER DATABASE x y z END BACKUP ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Odzyskiwanie bazy danych

Odzyskiwanie z zimnego backupu


Zatrzymanie bazy danych
Przegranie plików danych
Ewentualnie przegranie pliku kontrolnego
Odzyskiwanie z ciepłego backupu
Zatrzymanie bazy danych
Przegranie plików danych
Przegranie plików logów
Ewentualnie przegranie pliku kontrolnego

Piotr Kaczyński Bazy danych


Użytkownicy i schematy Uruchamianie i zatrzymywanie
Zarządzanie bazą danych Kopie zapasowe
Zagadnienia dodatkowe Metadane

Metadane

Oracle zapisuje dane o przechowywanych danych w tabelach


Najbardziej interesujące to:
ALL OBIEKT - przechowuje informacje o obiektach bazy danych
(TABLES, USERS, INDEXES itd)
DBA ROLES - role w systemie
DBA ROLE PRIVS - uprawnienia ról
ALL TAB COLUMNS - informacje o kolumnach w tabelach
Opis istniejącej tabeli - polecenie desc

Example
SELECT column name from ALL TAB COLUMNS
WHERE t a b l e n a m e = ’ S t u d e n c i ’ ;
d e s c ALL TAB COLUMNS ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy
Widoki
Zarządzanie bazą danych
Przestrzenie tabel
Zagadnienia dodatkowe

Widoki

Widok to zapisane zapytanie


Tworzone dla uproszczenia pracy z bazą danych
Dane można modyfikować w widokach
Nie mogą zawierać DISTINCT, GROOUP BY, ORDER BY i
agregatów
Tworzenie widoku
CREATE VIEW AS definicja

Example
CREATE VIEW n a j l e p s i AS SELECT ∗ FROM S t u d e n c i
WHERE Ocena = 5 ;

Piotr Kaczyński Bazy danych


Użytkownicy i schematy
Widoki
Zarządzanie bazą danych
Przestrzenie tabel
Zagadnienia dodatkowe

Przestrzenie tabel
Przestrzeń tabel to logiczny element bazy danych grupujący
Każdy schemat należy dokładnie do jednej przestrzeni tabel
Każda przestrzeń tabel skojarzona jest z jednym plikiem dbf
Różne typy przestrzeni (zwykła, tymczasowa i undo)
Przy tworzeniu tabeli opcja TABLESPACE;
Tworzenie nowej przestrzeni CREATE TABLESPACE
Example
create tablespace jakas
logging
d a t a f i l e ’d :/ t s s t h . dbf ’
s i z e 32m
a u t o e x t e n d on
n e x t 32m m a x s i z e 2048m
e x t e n t management l o c a l ;
CREATE USER k r e c i k i d e n t i f i e d by c z e c h y DEFAULT TABLESPACE j a k a s ;
CREATE TABLE STUDENCI ( I m i e VARCHAR( 3 0 ) , N a z w i s k o VARCHAR( 3 0 ) ,
Ocena NUMBER( 1 , 1 ) ) TABLESPACE j a k a s ;
Piotr Kaczyński Bazy danych

You might also like