Robert Chwastek
Bazy danych
Bazy danych
Robert Chwastek
!" # $ % &"' w Krakowie. ( # ) * Copyright (c) Robert Chwastek, Kraków 1996.
2
Bazy danych
Robert Chwastek
+ #, 1.
E ............................................................................................................................................ 5 1.1. 1.2. 1.3. 1.4.
2.
TYPY DANYCH ............................................................................................................................................................... 8 2.1. 2.2. 2.3. 2.4.
3.
DEFINICJA BAZY DANYCH ............................................................................................................................................... 5 S ........................................................................................................................... 6 TRANSAKCJE .................................................................................................................................................................. 6 J ........................................................................................................................ 7 SPIS TYPÓW DANYCH ...................................................................................................................................................... 8 TYP NUMERYCZNY ......................................................................................................................................................... 8 KONWERSJE TYPÓW ..................................................................................................................................................... 10 W ......................................................................................................................................................... 10
MODEL RELACYJNY .................................................................................................................................................. 12 3.1. STRUKTURY DANYCH W MODELU RELACYJNYM ........................................................................................................... 12 3.2. R SQL ................................................................................................................................................ 13 3.3. S SQL ......................................................................................................................................... 14 3.3.1. Definicje podstawowe ............................................................................................................................................ 14 3.3.2. Rozkaz CREATE TABLE........................................................................................................................................ 15 3.3.3. Rozkaz DROP ........................................................................................................................................................ 16 3.3.4. Rozkaz INSERT ...................................................................................................................................................... 17 3.3.5. Rozkaz DELETE .................................................................................................................................................... 18 3.3.6. Rozkaz CREATE SEQUENCE ............................................................................................................................... 19 3.3.7. Rozkaz SELECT ..................................................................................................................................................... 21 3.3.8. Rozkaz UPDATE.................................................................................................................................................... 22 3.3.9. Rozkaz RENAME ................................................................................................................................................... 23 3.3.10. Rozkaz ALTER TABLE ..................................................................................................................................... 24 3.3.11. Rozkaz CREATE INDEX .................................................................................................................................. 25 3.3.12. Rozkaz CREATE VIEW .................................................................................................................................... 27 3.3.13. Rozkaz COMMIT.............................................................................................................................................. 28 3.3.14. Rozkaz ROLLBACK.......................................................................................................................................... 28 3.3.15. Rozkaz SAVEPOINT......................................................................................................................................... 28 3.3.16. Rozkaz SET TRANSACTION ............................................................................................................................ 29 3.4. OPERACJE RELACYJNE.................................................................................................................................................. 30 3.4.1. Selekcja .................................................................................................................................................................. 30 3.4.2. Projekcja................................................................................................................................................................ 31 3.4.3. Produkt .................................................................................................................................................................. 32 3.4.4. .............................................................................................................................................................. 32 3.4.5. .......................................................................................................................................... 33 3.4.6. Grupowanie ........................................................................................................................................................... 34 3.4.7. .................................................................................................................. 35 3.5. PODZAPYTANIA ............................................................................................................................................................ 35 3.6. WIDOKI (PERSPEKTYWY).............................................................................................................................................. 37 3.7. TRANSAKCJE ................................................................................................................................................................ 38 3.8. NORMALIZACJA RELACJI .............................................................................................................................................. 38 3.8.1. Cele normalizacji................................................................................................................................................... 38 3.8.2. Pierwsz ..................................................................................................................................... 39 3.8.3. Definicje pomocnicze............................................................................................................................................. 40 3.8.4. ......................................................................................................................................... 44 3.8.5. ....................................................................................................................................... 46 3.8.6. Czwarta pos ...................................................................................................................................... 47 3.8.7. ........................................................................................................................................... 48 3.8.8. Podsumowanie....................................................................................................................................................... 48
4.
IA.......................................................................................................................................... 50 4.1. OPERATORY ................................................................................................................................................................. 50 4.1.1. Operatory arytmetyczne......................................................................................................................................... 50 4.1.2. Operatory znakowe ................................................................................................................................................ 50 4.1.3. Operatory porównania .......................................................................................................................................... 51 4.1.4. Operatory logiczne ................................................................................................................................................ 52 4.1.5. ! ........................................................................................................................................ 53
3
Bazy danych Robert Chwastek 4.2. W ................................................................................................................................................................. 53 4.3. 5.
WARUNKI..................................................................................................................................................................... 55
STANDARDOWE FUNKC ............................................................................................................. 57 5.1. FUNKCJE NUMERYCZNE ............................................................................................................................................... 57 5.2. FUNKCJE ZNAKOWE...................................................................................................................................................... 57 5.3. FUNKCJE GRUPOWE ...................................................................................................................................................... 59 5.4. FUNKCJE KONWERSJI.................................................................................................................................................... 60 5.5. FUNKCJE OPERACJI NA DATACH ................................................................................................................................... 61 5.6. INNE FUNKCJE .............................................................................................................................................................. 63 5.7. FORMATY ZAPISU DANYCH........................................................................................................................................... 64 5.7.1. Formaty numeryczne ............................................................................................................................................. 64 5.7.2. Formaty dat ........................................................................................................................................................... 64
6.
PROGRAMOWANIE PROCEDURALNE - PL/SQL................................................................................................. 66 6.1. WPROWADZENIE .......................................................................................................................................................... 66 6.2. STRUKTURA BLOKU...................................................................................................................................................... 67 6.3. PROCEDURY I FUNKCJE ................................................................................................................................................ 67 6.4. KURSORY ..................................................................................................................................................................... 68 6.5. REKORDY ..................................................................................................................................................................... 70 6.6. O ....................................................................................................................................................... 71 6.6.1. Informacje podstawowe......................................................................................................................................... 71 6.6.2. "! #$ ......................................................................................................................................... 73 6.6.3. % !&.................................................................................................................................................. 73 6.6.4. "! #$ '! ............................................................................................................... 74 6.7. R PL/SQL .......................................................................................................................................... 75 6.7.1. Rozkaz OPEN ........................................................................................................................................................ 75 6.7.2. Rozkaz CLOSE....................................................................................................................................................... 76 6.7.3. Rozkaz FETCH ...................................................................................................................................................... 76 6.7.4. Rozkaz SELECT ... INTO....................................................................................................................................... 77 6.7.5. Rozkaz IF ............................................................................................................................................................... 77 6.7.6. Rozkaz LOOP ........................................................................................................................................................ 78 6.7.7. Rozkaz EXIT .......................................................................................................................................................... 80 6.7.8. Rozkaz GOTO ........................................................................................................................................................ 80
7.
LITERATURA................................................................................................................................................................ 81
4
Bazy danych
1. 1.1.
Robert Chwastek
Definicja bazy danych
W pewnym uproszczeniu przez - danych, a przez system bazy danych " - ) * # * . - ) / ) - - - # 0 # - # 1* 2 # ) -/ rozumiany jako: #/ " #/ " # - 3 -4 # ) -/ - 3 * . 0 1 - )
# * ( jest opis semantyki (znaczenia) danych, przechowywanych w bazie. System bazy danych ) # 0 1* ( - #/ modelu danych. Przez model danych rozumiemy - - / ) # # # * 5- / ) # # rzeczywistego, istotnych z punktu widzenia danego zastosowania tworzy schemat bazy danych. Baza danych jest modelem logicznie spójnym ) # celowi. W - ) 0 1 / #* 5 - ## # ) * + ) - - aplikacjami*
* & -
- -/ *
- ) # tym celu aplikacje. 6) / ) ) - , 3 ) # * - * 0 #1 - * ) - ) * Schemat jest opisem struktury (formatu) przechowywanych danych oraz wzajemnych 7 *
5
Bazy danych
1.2.
Robert Chwastek
danych (SZBD) jest to zestaw programów )
- * + - jest oprogramowaniem ogólnego przeznaczenia. System bazy danych - -
) *
1.3.
Transakcje
$ - #/ 0#/ #1* $
* - ) / - ) * ( # - przypadku niepowodzenia którejkolwiek z nich wycofuje instrukcje uprzednio wykonane. . # - ,
6
Bazy danych
1.4.
Robert Chwastek
8 - ) / ) , 0 9 " 91 ) definiowanie struktury danych przechowywanych w bazie, czyli tworzenie schematu implementacyjnego 0 6 9 " 691 )
- * 0 : 9 " :91 ) transakcjami (np. zatwierdzanie lub wycofywanie) 7 0; 9 1 ) - - zgodnych z podanymi warunkami
7
Bazy danych
2.
Typy danych
2.1.
Spis typów danych
Typ char(size)
character varchar(size)
date long long varchar raw(size)
long raw
rowid
number
2.2.
Robert Chwastek
Opis : # ) *
) / Synonim do char W aktualnej wersji ORACLE’a jest to synonim do char, konieczne jest * ( ) - # ? * Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e. # @ "6A"BB *, CD>"8%"EFG : # ) H==!= * 6) / - * synonim do long : - #* + * I *D K 10-129 do 9.99 * 10124* 6) - )*
Typ numeryczny
$ ) - * ) / trzech sposobów: number number (precyzja) number (precyzja, skala) 8
Bazy danych
Robert Chwastek
. # - ) / > !E* + # - ) / -84 do 127. W momencie definiowania kolumny numerycznej dobrym zwyczajem jest )
# # - * 8# #/ -* 8# #/ * 8# #/ - 4 * 0>D "D - )/ * 9.87E-2 oznacza 9.87 * 10-2. N - ) AI%:9MG -* 6) * - - - ,
9
Bazy danych
Robert Chwastek
Specyfikacja number number(*) number(*, s) number(p) number(p,s) decimal decimal(*) decimal(*, s) decimal(p) decimal(p, s) integer smallint float float(*) float(b) real double precision
2.3.
Typ number number number number number number number number number number number number number number number number number
Precyzja 38 38 38 p p 38 38 38 p p 38 38 38 38 b 63 binary (18 decimal) 38
Skala null null s 0 s 0 0 s 0 s 0 0 null null null null null
Konwersje typów
( - ) * / - - ) * / - / * .) - ) AI%:9M, Z typu char number date
2.4.
Do typu
char
number
date
- TO_CHAR TO_CHAR
TO_NUMBER - )
TO_DATE TO_DATE -
. - / # ) - - * ( #/ 0J991 # D - ) J99 ) #/ 0J991* 2 O9 / # 0 1 # # # * O9 , 10
Bazy danych
Robert Chwastek
O90:A66 D1 #/ :A66 #/ - D # :A66 #/ J99* (#/ #/ J99* * - # #, >DDD J99 J99 J99 =DD ) 0>DDD P =DD* 8 ) )/ # N+ J99 N+ A$ J99* 8# ) # # * . ) J99 - # ) -/ # ) J99* AI%:9M * $
:A66 R J99 +M9M:$
) * 8 AI%:9M -*
11
Bazy danych
3.
Robert Chwastek
Model relacyjny
5 - podstawowych elementów: relacyjnych struktur danych )
bazy danych # - # #
3.1.
Struktury danych w modelu relacyjnym
. - - nu 7 - - #* ( bazach danych relacja przedstawiana jest w postaci tabeli. Relacja jest zbiorem krotek ) #* S )
- * S ) - - * S ) 0 - 1 #, 0 1 - 0 1 #/ 0 1 #/ - 0 1 # - 0 1 . - ,
! "
#
'()*)+)*,-'
.
$ %
&
/"
&
3
4
01)-2))(,-'
++2)2()()*+
!
'))2)2)2(*2
!
5
&
112(2()2((*
6 %
!"
&78 / "
- #
- * ( ) 12
Bazy danych
Robert Chwastek
- # ) *
- # - * ( # - - jedna jak i druga terminologia. $ - ) /, zbiór encji wraz z atrybutami - 7 - - - 0 - 1 S ) - - * ( - / " zabezpieczenie przed tym powtórzeniem jest realizowane poprzez pola kluczowe. Wiersze
) " - * (
- - " ) ) #/ #* ( - - ) / , J) - * S / / - 0)
#/1* 3 - - tabeli. $ - " - #
)* J
) - * Unikaj powtarzania informacji w bazie danych (normalizacja).
3.2.
QL
.) - +;9 * A - # # * Rozkaz ALTER TABLE
Typ DDL
CREATE INDEX CREATE SEQUENCE
DDL DDL
CREATE TABLE
DDL
Opis - - - #/ Tworzy indeks dla tabeli $ - ) - " * + ) )/ unikalnych identyfikatorów w tabelach $ - przestrzeni dla danych 13
Bazy danych
Robert Chwastek
CREATE VIEW
DDL
DELETE DROP obiekt INSERT RENAME SELECT
DML DDL DML DDL DML
UPDATE COMMIT ROLLBACK
DML DML DML
SAVEPOINT
DML
SET TRANSACTION
DDL
3.3. 3.3.1.
- # - innych widoków J - ) - J - - -
Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku 5 - - - Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej lub kilku tabel Zmienia dane w tabeli S7 ( - punktu. Zaznacza punkt, do którego mozliwe jest wykonanie rozkazu ROLLBACK 5 " 0 odczytu).
! Definicje podstawowe
N 0 1 " # - # * I) - ) 0* CTG - CUG1* + 3 - ## napisanych w ten sposób aplikacji. + " ) +;9* + +;9
ORACLE’a przedstawia tabela: access as check create delete exists graphic in integer lock noaudit of order
add asc cluster current desc file group increment intersect long nocompress offline pctfree
all audit column date distinct float having index into maxextents not on prior
alter between comment dba drop for identified install is minus nowait online privileges 14
and by compress decimal else from if initial level mode null option public
any char connect default exclusive grant immediate insert like modify number or raw
Bazy danych
rename rows smallint then update view
resource select start to user whenever
Robert Chwastek
revoke session successful trigger validate where
row set synonym uid values with
rowid share sysdate union varchar
rownum size table unique vargraphic
9- " -/ - * 9- * ( AI%:9M - ) / * 2 - - >D ) )/ - CG - CMG* . , 7E2 = 7 * 102 25e-03 = 25 * 10-3 AI%:9M - ) 7/ CSG - C6G* 9 CSG ) - -/ ) >D S1 C6G ) - ) )/ >DLE=VH 0> 61* . , 256K = 256 * 1024 1M = 1 * 1048576 I +;9 7 # 3.3.2.
Rozkaz CREATE TABLE
I :IM%$M $%9M )
- 0- 1 ) , # - # - - # - - I :IM%$M $%9M , CREATE TABLE [user.]table ( {column_element | table_constraint} [, {column_element | table_constraint} ] ... ) [ PCTFREE n ] [ PCTUSED n ] [ INITTRANS n ] [ MAXTRANS n ] [ TABLESPACE tablespace ] [ STORAGE storage ] [ CLUSTER cluster (column [, column] ...) ] [ AS query ] Parametry: " # - # # -
- * $ - ) )
/ - 0%1
15
Bazy danych
Robert Chwastek
- " - -/ * ( - ) / W " # * $ - / 0 1 - W " # / - - " # - ) #/ - " # - " # 0 # -/ # - 1 ) / - query - jest poprawnym zapytaniem takim samym jak zdefiniowane w rozkazie +M9M:$* 8# ) / " # * 6) ) - * 9- -/ sama jak liczba kolumn w zapytaniu. . , CREATE TABLE pracownicy( nr_pracownika NUMBER NOT NULL PRIMARY KEY, imie CHAR(15) NOT NULL CHECK (imie = UPPER(imie)), nazwisko CHAR(25) NOT NULL CHECK (nazwisko = UPPER(nazwisko)), nr_wydzialu NUMBER (3) NOT NULL ); 3.3.3.
Rozkaz DROP
I ) - ) * A / , DROP object_type [user.]object .) ) ) poszczególnych typów obiektów: DROP CLUSTER [user.]cluster [INCLUDING TABLES] - kasowanie * ( N:9JN& $%9M+
- * 8# N:9JN& $%9M+ -/ ) - * 8 - - -* DROP [PUBLIC] DATABASE LINK link " * 8# - / ) 0%1* DROP INDEX [user.]index - kasowanie indeksu. DROP [PUBLIC] ROLLBACK SEGMENT segment - kasowanie segmentu
0 - 1* 6) / ) * S ) / tylko administrator bazy danych. 16
Bazy danych
Robert Chwastek
DROP SEQUENCE [user.]sequence - kasowanie sekwencji. DROP [PUBLIC] SYNONYM [user.]synonym - usuwanie synonimu. Synonim - ) / 0%1* . ) / # * DROP TABLE [user.]table " - * ( -
# - ) * (
- * DROP TABLESPACE tablespace [INCLUDING CONTENTS] - usuwanie - * I ) -/ 0%1* ( przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie * 8# N:9JN& :A$M$+ - * DROP VIEW [user.]view " * . - * 3.3.4.
Rozkaz INSERT
I - - - )
* %- / - ) -/ # - 0%1 - / - * + , INSERT INTO [user.]table [ (column [, column] ...) ] { VALUES (value [, value] ...) | query } Parametry: " # - - " - " - - ? " #/ # * ( #/ ) -/ )* 8# #/ J99 -/ # * X " +M9M:$ #/ # # # * 5 ) / AIMI 2AI 2AI UPDATE. Opis:
I N+MI$ ) O%9JM+ * # 0 - 1 #* S # # J99 0 -/ A$ J991* 8# ) +M9M:$ O%9JM+ )
# 0 1* . 17
Bazy danych
Robert Chwastek
- # 0 - # 1* 5 ) / ) - * ( # * . -/ #/
- * Y # ) * . , INSERT INTO pracownicy VALUES (50, ‘JAN’, ‘KOWALSKI’, 3); INSERT INTO ksiazki (tytul, autor, miejsce) SELECT 'Pan Tadeusz', autor_nr, miejsce_nr FROM autorzy, miejsca WHERE nazwisko = 'Mickiewicz' AND miejsce = 'lewa polka' ; 3.3.5.
Rozkaz DELETE I M9M$M ) - *
+ , DELETE [FROM] [user.]table [alias] [WHERE condition] Parametry: " )
- " - - ) / " - ) M9M$M " / ) /* ( ) / - / * S - ) - - - # $IJM - 2%9+M* Opis:
: 7
- * . , Skasowanie wszystkich wierszy w tabeli pracownicy: DELETE FROM pracownicy ; + )
numerem 2: DELETE FROM ksiazki WHERE autor = 2 ; 18
Bazy danych
3.3.6.
Robert Chwastek
Rozkaz CREATE SEQUENCE
$ - 0 1 ) ) / - * + -/ ) - *
przynajmniej uprawnienia RESOURCE w conajmniej jednej przestrzeni tabel. + , CREATE SEQUENCE [user.]sequence [INCREMENT BY n] [START WITH n] [MAXVALUE n | NOMAXVALUE] [MINVALUE n | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE n | NOCACHE] [ORDER | NOORDER] Parametry: " ) X "
-/ -/ -- ) * N:IM6M$ B " # ) - * 8# - - - " * # #/ >* ) - ) D* +$%I$ (N$' " - -/ * # # 6NO%9JM 6%ZO%9JM * J
#/ MZ$O%9* 6NO%9JM " # #/ ) / * # > #/
">D* . A6NO%9JM ) - / # * 6%ZO%9JM " # # ) / * ( # # "> >DH * Jeden element # * ( ) -/ ) - #/ * #/ ) * 8#
% : # ) do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie - ) : pojedynczej kolumny B lub C. 6)
# - - * ) / ) - ) #/ ) #/ * . , CREATE INDEX i_prac_imie ON pracownicy (imie) ; 26
Bazy danych
3.3.12.
Robert Chwastek
Rozkaz CREATE VIEW
I )
- - - * J
/ ) # - ) co najmniej uprawnienia SELECT lub administrator. + , CREATE VIEW [user.]view [(alias [, alias] ...)] AS query [ WITH CHECK OPTION [CONSTRAINT constraint] ] Parametry: " #
view - nazwa tworzonego widoku X " - - * 5 ) -/ +M9M:$ AIMI B ani FOR UPDATE. (N$' :'M:S A.$NA " )
# - * S (N$' :'M:S A.$NA ) -/ ) - * :A+$I%N$ " (N$' :'M:S A.$NA* Opis:
Widok jest logicznym oknem dla jednej lub kilku tabel. W
# #, widok nie przechowuje danych - jest on przeznaczony do pokazywania danych zawartych w innych tabelach. ) -/ ) +;9 )
) - ) ) ) / gdy zapytanie na którym bazuje widok zawiera: klauzule GROUP BY, CONNECT BY lub START WITH N+$N:$ - ) #
6) tóry posiada pseudokolumny - ) J.%$M ) * ( ) ,
- - # - - - )# " ) -/ )
- - ) - * 27
Bazy danych
Robert Chwastek
" ) / ) zmiany nazwy kolumny bez zmiany rzeczywistych danych zapisanych w tabeli. #* . , CREATE VIEW bibl AS SELECT ksiazki.tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr WITH CHECK OPTION CONSTRAINT chkopt ; 3.3.13.
Rozkaz COMMIT
+ , COMMIT [WORK] Opis:
I :A66N$ :A66N$ (AIS a 7 bazie danych. 3.3.14.
Rozkaz ROLLBACK
+ , ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ] Parametry: (AIS " - # %+N +%OM.AN$ " IA99%:S savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji. Opis: I IA99%:S ) 0 klauzuli TO) lub poczatku transakcji (bez klauzuli TO). . , ROLLBACK ; ROLLBACK TO SAVEPOINT SP5 ; 3.3.15.
Rozkaz SAVEPOINT
+ , SAVEPOINT savepoint 28
Bazy danych
Robert Chwastek
Parametry: savepoint - nazwa punktu w aktualnej transakcji zaznaczanego przez wykonywany rozkaz Opis: I +%OM.AN$ ) IA99%:S * -/
* + - # - ) / * . , UPDATE pracownicy SET placa_podstawowa = 2000 WHERE nazwisko = ‘Kowalski’ ; SAVEPOINT Kow_plac; UPDATE pracownicy SET placa_podstawowa = 1500 WHERE nazwisko = ‘Nowak’ ; SAVEPOINT Now_plac; SELECT SUM(placa_podstawowa) FROM pracownicy; ROLLBACK TO SAVEPOINT Kow_plac; UPDATE pracownicy SET placa_podstawowa = 1300 WHERE nazwisko = ‘Nowak’ ; COMMIT; 3.3.16.
Rozkaz SET TRANSACTION
+ , SET TRANSACTION { READ ONLY } Parametry: IM% A9B " / Opis:
I ) - / 7* ) ) N+MI$ J.%$M M9M$M* I +M$ $I%+%:$NA / -* 29
Bazy danych
3.4.
Robert Chwastek
Operacje relacyjne
A - - * () , " ) - 0 1 # warunki; " ) - - 0 1 " ) 0 1 # # 7 * 3.4.1.
Selekcja
Operacja ) - 0 1 #
* A ) podzbiorem poziomym.
$ %
! "
#
'()*)+)*,-'
.
&
/"
&
3
4
01)-2))(,-'
++2)2()()*+
!
'))2)2)2(*2
!
5
4
112(2()2((*
( +;9 ) +M9M:$ ('MIM* . , SELECT * FROM osoby; spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie. ( - C( G C+AG 0# 1 ) /, SELECT * FROM osoby ; ( -/ )* . - - / - # 0# " +$ - # " +A1 ) / AI / -, SELECT * FROM osoby ; 30
Bazy danych
Robert Chwastek
)7 # * 3.4.2.
Projekcja
. ) - # - - +M9M:$ * A ) podzbiorem pionowym.
! "
#
'()*)+)*,-'
.
$ %
&
/"
&
3
4
01)-2))(,-'
++2)2()()*+
!
'))2)2)2(*2
!
5
4
112(2()2((*
&9 : '()*)+)*,-'
&
01)-2))(,-'
4
++2)2()()*+
!
'))2)2)2(*2
4
112(2()2((*
. ) / +M9M:$, !" #$%%& ' A -/ +M9M:$* N / . - #
) /, SELECT Pesel, Nazwisko FROM osoby 31
Bazy danych
Robert Chwastek
; 3.4.3.
Produkt
. 0 71 - * A ) - - ) )
) * ( # ) * . 7 *
;(
;2
/
/
/
/
5 7 0 - 1 )
+M9M:$* . ) / , SELECT * FROM R1, R2; Operacja znajd 7 ) -/ ) - - #* 3.4.4.
A - # * ( - *
32
Bazy danych
Robert Chwastek
69
/ 2
/
%
(
2
!
2
(
3 % # 7 #"78 :#
# 7 $ % 7
3.8.5.
$
# ) - ) ) ) * %- / - )# ) / )#/ * . ,
/
% %
))2
)2)
))(
)()
))*
)2)
% # $ % % %
/ %
)2)
.
-
)()
&" *
)*)
! 21
3.8.6.
#
I - Z B 5 - I ) Z Y Z = R i podzbiór Y jest nietrywialnie
# ) Z* Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w
# )#/ - B Z - )#/ - Z* `
)/ ) - ^. @ # )# funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej, ) - ^@ ^( @ ) - ^ @ * ) )#/ atrybutami. 8 # )#/ * + ) # )#/ ) / - / )# * 47
Bazy danych
Robert Chwastek
( ^. @ ) / , ^@ ^( @ - / # )#/ ,
$ %
6%"
/.
6%"
.
$%
3%
$%
3
$%
/"
& $ %
&
6%"
3
%
3.8.7.
I wtedy i tylko wtedy, )# KI\I1, ..., Rm] )#/ )# - klucza. ) # ) - - - ) -
/ 0
-/ 1 -
) / - - ) * ( ) / - ) * 3.8.8.
Podsumowanie
. ) # # - * 48
Bazy danych
Robert Chwastek
. - / - * J 7
- - * 6 - / )#/ - ) / - #/ *
49
Bazy danych
4.
Robert Chwastek
"
( ) *
4.1.
Operatory
+ +;9 * 4.1.1.
Operatory arytmetyczne
A nego. Jednak -/ ) %$M* + - , Operator ()
*, /
Opis 5 #/ 7* (
* Operatory jednoargumentowe zachowania i zmiany znaku. 6)
+, -
Dodawanie, odejmowanie
+, -
4.1.2.
SELECT (X+Y)/(Y+Z) ...
... WHERE NR = -1 ... WHERE -PLACA < 0 SELECT 2*X+1 ... WHERE X > Y/2 SELECT 2*X+1 ... WHERE X > Y-Z
Operatory znakowe
8 nkatenacji. I - * ) / ) :'%I -/ ) ) < >= 1000 ... WHERE PLACA < 1000 ... WHERE PLACA >= 1000 ... WHERE PLACA , = ALL
# - ALL ((14900, 300), (3000, 0)) * 6 -/ jednym z operatorów: =, !=, >, *DV1 0 >H" 1 0 >H1 7 7 7 - ) godzina minuta
Inne funkcje
Przeznaczenie GREATEST(expr [, 5
#* ( ) expr] ...) konwertowane do typu ) wykonaniem porównania. 5 LEAST(expr [,
#* ( ) expr] ...) konwertowane do typu ) wykonaniem porównania. NVL (expr1, expr2) 8# [> J99 zwraca expr2, w przeciwnym wypadku zwraca expr1.
63
SELECT GREATEST (‘Harry’, ‘Harriot’, ‘Harold’) ”GREATEST” FROM DUAL
SELECT LEAST (‘Harry’, ‘Harriot’, ‘Harold’) ”LEAST” FROM DUAL
SELECT ENAME NVL(TO_CHAR(COMM), ‘NOT APPLICABLE’) ”COMMISION” FROM EMP WHERE DEPTNO = 30
Bazy danych
UID
Robert Chwastek
Zwraca unikalny identyfikator ) * 5 )
USER
5.7.
SELECT USER, UID FROM DUAL SELECT USER, UID FROM DUAL
Formaty zapisu danych
2 ) , - # 4 ) # * 2 ) $AW:'%I $AW%$M* 5.7.1.
Formaty numeryczne
2 ) $AW:'%I # #/ * J) - * 8 #/ )
#/ CKG* .) - ) / numerycznego: Element 9 0 $ B MI PR
9999 0999 $9999 B9999 9999MI 9999PR
, (przecinek) . (kropka) V
9,999 99.99 999V99
E
9.999EEEE
DATE
DATE
5.7.2.
Opis 9- CFG # #/ # . . #/ CTG (# 0 1 (# C"C # (# #/ CaG ‘>’ (# (# 6) #/ >Dn - po ‘V’ (# - 0 / M1 Dla dat przechowywanych w postaci numerycznej. (# C66QQBBG
Formaty dat
2 ) $AW:'%I # * 6 -/ ) ) $AW%$M # * Format standardowy, to ‘DD-MON-YY’. 64
Bazy danych
Robert Chwastek
Elementy formatu dat przedstawia tabela: Element SCC lub CC YYYY lub SYYYY YYY, YY lub Y Y,YYY SYEAR lub YEAR BC lub AD B.C. lub A.D Q MM MONTH MON WW W DDD DD D DAY DY AM lub PM A.M. lub P.M. HH lub HH12 HH24 MI SS SSSS / ., ”...”
Opis (4 C+G C"C : C+G ‘-‘ Ostatnie 3, 2 lub 1 cyfra roku Rok z przecinkiem na podanej pozycji Rok przeliterowany. ‘S’ powoduje poprzedzenie daty przed C"C 5 :Q% 0 Q 1 Znak BC/AD z kropkami S 0> ">"="=1 0 7 V 1 7 0>"!HH1 7 0>"!>1 7 0>"V1 F Trzyliterowy skrót nazwy dnia ( 3 ( 3 Godzina (1-12) Godzina (1-24) Minuta (0-59) Sekunda (0-59) + 0D"EH!FF1 Znaki przestankowe umieszczane w wyniku :
# ) )/, 26 " ^2 6@ Q liczb zerami; $' " # - * LTH dla liczby 4; +. " ) +.$' - $'+. " +. $'*
65
Bazy danych
6. 6.1.
Robert Chwastek
Programowanie proceduralne - PL/SQL Wprowadzenie
I +;9
- # # -
* A +;9 .9Q+;9* PL/SQL pozwala wykorz / +;9* ( 0%9$MI :IM%$M IM%6M1 niektóre rozkazy kontroli danych jak CONNECT, GRANT i REVOKE. S .9Q+;9 +;9 z 7 * 6) +;9 +;9 0 * 1 * S ) .9Q+;9 7 #* PL/SQL pozwala na definiowa * 5 )
7 - 7 3 * 8 -/ )* S ) * $ +;9G* 5 *, premia NUMBER(7, 2); ( #/ ^,R@ *, podatek := cena * stopa; ) #/ # ) +M9M:$ - 2M$:'
# , SELECT placa INTO placa_aktualna FROM pracownicy WHERE nazwisko = ‘Nowak’ ; .9Q+;9 pola. N ) #/ * - ) :A+$%$ # * , stopa_premii CONSTANT NUMBER(3, 2) := 0.10; ( - - * 8 0 1* 6) ) c$B.M * * 5 / - 0 ) )/ ) - 1, tytul books.tytul%TYPE 6) )
- * ( ) )/ cIA($B.M* 66
Bazy danych
Robert Chwastek
( .9Q+;9 ) / 7, R UR a b bR aR* 6 / ) , 0 1*
6.2.
Struktura bloku S .9Q+;9 - * ,
DECLARE deklaracje BEGIN rozkazy wykonywalne EXCEPTION - END; S ) - ) / - * - -/ ))* ( .9Q+;9 - 0 * - 1* ) - * 6) / ) - * A- - ) * 5 - # -
/ * - - * N - - - - 0- 1* N - / - ) - 7
- * - - ) ) - * - - )) ) - - *
6.3.
Procedury i funkcje
PL/SQL w wersji 2.0 pozwala na definiowanie funkcji i procedur. + , PROCEDURE name [ (parameter [, parameter] ... ) ] IS [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name]; + , var_name [IN | OUT | IN OUT] datatype [{ := | DEFAULT } value] 67
Bazy danych
Robert Chwastek
A# ) / 7 *
) * N$0=1* . # " * .IA:MJIM 7 - # * * . - - * : N+ 7 M 0 )
/ 1* :#/ 0 N+ M&N1 - * ( ) M:9%IM* :#/
0 M&N MZ:M.$NA - M1 .9Q+;9* ( # / * - , PROCEDURE zwieksz (prac_id INTEGER, kwota REAL) IS placa_aktualna REAL; BEGIN UPDATE pracownicy SET placa_podstawowa = placa_podstawowa + kwota WHERE prac_id = id_pracownika; END zwieksz; 5 - #* ) IM$JI* FUNCTION name [ (argument [, argument] ... ) ] RETURN datatype IS [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name]; ( / IM$JI* I IM$JI 7
* ( / IM$JI
-/ )* ( ) / * 8# 7 IM$JI .9Q+;9 * ( IM$JI ) / ) ) *
6.4.
Kursory
W celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany * (
* .9Q+;9 / 7 / * .9Q+;9 ) dwóch typów kursorów: 68
Bazy danych
Robert Chwastek
" ) ) -
/ 7
/ 0 # 2AI14 " .9Q+;9
operacji. 8# )
- ) * S # - .9Q+;9 * + , DECLARE 6( %7 %" FROM pracownicy ( 89:::' ... BEGIN ... + *
) / A.M sposób: OPEN prac_kursor; ( ) 2M$:'* S ) 2M$:' * I 2M$:' ) -/ ) -, FETCH prac_kursor INTO prac_nazw, prac_wydz; . 7 - * :9A+M *, CLOSE prac_kursor; S ) - # * - CcG -# * 5 - , cA$2AJ " $IJM # 2M$:' 7 powodu braku wierszy c2AJ " $IJM # 2M$:' 7 %ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora) cN+A.M " $IJM #
- ) - rsora: LOOP FETCH prac_kursor INTO prac_nazw, prac_wydz; IF prac_kursor%ROWCOUNT > 10 THEN ;; , 5! 5 ' J) , prac_rek.nazwisko := UPPER(prac_rek.nazwisko); . # ) e jest na dwa sposoby: # 0 - / - - 4 70
Bazy danych
Robert Chwastek
# +M9M:$ *** N$A - 2M$:' *** N$A J) , DECLARE prac_rek1 pracownicy%ROWTYPE; prac_rek2 pracownicy%ROWTYPE; BEGIN SELECT nazwisko, imie, wydzial, placa_podstawowa INTO prac_rek1 FROM pracownicy WHERE wydzial = 30; prac_rek2 := prac_rek1; ... END; .9Q+;9 2AI * + , DECLARE CURSOR prac_kursor IS SELECT nazwisko, imie, wydzial, placa_podstawowa FROM pracownicy; BEGIN FOR pracownik IN prac_kursor LOOP suma := suma + pracownik.placa_podstawowa; ... END LOOP; Niejawnie deklarowanym rekordem jest tu zmienna o nazwie pracownik. Zmienna ta jest - nazwa_kursora%ROWTYPE.
6.6. 6.6.1.
$% Informacje podstawowe
) * (# ) / , - - # * )
) - ) / - * ( - ^. @ 7 * ( 0:PP 8 ? .9Q+;91 # - - * 8 - - /
- / * ( - * ( 0
1 ) * .
-/, ^A @ ^? - @* ( .9Q+;9 ) ) / # - .9Q+;9* 71
Bazy danych
Robert Chwastek
. ) ^. ) @ -
/ ) - * & -
0 1 *
- 0 - 1* (
* ( ) -/ I%N+M* ( - 7 -
- -
* 8# - * . ^ @ 05MIAWNONM1 - - 3 :Q5, DECLARE cz_wsk NUMBER(3,1); BEGIN ... SELECT cena / zysk FROM akcje ?@';;0%5 % 2 ,) -- ZERO_DIVIDE INSERT INTO informacje (nazwa, c_z) VALUES (‘ABC’, cz_wsk); COMMIT EXCEPTION WHEN ZERO_DIVIDE THEN INSERT INTO informacje (nazwa, c_z) VALUES (‘ABC’, NULL); COMMIT; ... WHEN OTHERS THEN ROLLBACK; END; . * 5
- - - ) * ( # -/ # ) , BEGIN SELECT ... ;;%%! &- A&
BC SELECT ... ;;%%! &- A&
BC SELECT ... ;;%%! &- A&
BC END; 72
Bazy danych
Robert Chwastek
. - - - #/ ) * $ - ) #
/
, BEGIN SELECT ... SELECT ... SELECT ... EXCEPTION WHEN NO_DATA_FOUND THEN ===D;%&* B&- 3A&
BC END; ( #/ * 5 ) ) - -)* 8# - - ) - - * 6.6.2.
* '
$ .9Q+;9 - * ( # * (- ), :JI+AIW%9IM%BWA.M " -
) otwartego; J.WO%9WAWNMZ " - N+MI$ - J.%$M -
w indeksie zadeklarowanym jako UNIQUE; NO%9NW:JI+AI " - kursora (np. nie otwartego); NO%9NWJ6MI " - numerycznego z tekstu, który nie reprezentuje liczby; AW%$%W2AJ " +M9M:$ / ) 0* +M9M:$ *** N$A14 +$AI%&MWMIIAI " - # 4 $AAW6%BWIA(+ " +M9M:$ ) 0* +M9M:$ *** N$A14 O%9JMWMIIAI " # lub pola; ZERO_DIVIDE - próba dzielenia przez zero; 6.6.3.
(
%- -)/ 0^ /@1 -
* # - .9Q+;9 MZ:M.$NA 7 - * S ) 73
Bazy danych
Robert Chwastek
- ('M $'M # -* 2 - 7 - ) - * A A$'MI+ 0 1 / -
0 * #1* A #/ MZ:M.$NA , EXCEPTION WHEN ... THEN ;;%&* ,) WHEN ... THEN ;;%&* ,) WHEN ... THEN ;;%&* ,) WHEN OTHERS THEN ;;%&* (%% B ,)3 END; 8# - ) ) / ('M AI, WHEN over_limit OR under_limit OR VALUE_ERROR THEN ... ) )/ A$'MI+ #* + A$'MI+
/ * ) / ) ) ) -/ - - * ( -
* - - * 6.6.4.
* ' %
8 .9Q+;9 )
*( -/ # I%N+M* ( - ) )
MZ:M.$NA* , DECLARE overflow EXCEPTION; result NUMBER(5); BEGIN ... END; ) / ) .9Q+;9 - 0 7
1 #
* ( ) ) # * ( ) -/ ) ) rozkazach SQL. 74
Bazy danych
Robert Chwastek
) - * 6) / ) - * Jak podano w# * ( ) -/
* +) I%N+M* J) , DECLARE brak_czesci EXCEPTION; liczba_czesci NUMBER(4); BEGIN ... IF liczba_czesci < 1 THEN RAISE brak_czesci; END IF; ... EXCEPTION WHEN brak_czesci THEN ;;%&* &- A& -1 C END; 6) ) 0 I%N+M1 , RAISE INVALID_NUMBER; : #/ - - * . ) -/
- )) - - * ( ) ) I%N+M -
* ) / ) - - - #* .- # -
*
6.7. 6.7.1.
!& ! Rozkaz OPEN
Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem - - - * S ) * + , OPEN cursor_name [(input_parameter [, input_parameter] ... )] ; Parametry: cursor_name - nazwa kursora uprzednio zadeklarowanego, który nie jest aktualnie otwarty. W " ) .9Q+;9 * 8
# ) 0 # klauzuli WHERE). 75
Bazy danych
Robert Chwastek
. A.M -/ ) #/ * N #/ A.M -/ # * . A.M ) -/ celu pobrania ich z kursora. . 0 A.M1 0 1 ) - / -, ( #/ ) A.M * ( -/ # ) ) -/ CRbG* +- ) - ) # , DECLARE CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS ... BEGIN OPEN prac_kur(‘Kowalski’, 10); ... OPEN prac_kur(wydz => 15, nazw => ‘Nowak’); END; 6) ) / # )
/ )
/ * 6.7.2.
Rozkaz CLOSE
I :9A+M )
* S ) / * I :9A+M - - * + , CLOSE cursor_name ; Parametry: cursor_name - nazwa aktualnie otwartego kursora. 6.7.3.
Rozkaz FETCH
I 2M$:' - 0 +M9M:$ 1* A * 5 # kolumn w aktualnym wierszu. + , FETCH cursor_name INTO { record_name | variable_name [, variable_name] ... } ; Parametry: 76
Bazy danych
Robert Chwastek
cursor_name - nazwa aktualnie otwartego kursora. ? - W " * ( # -/ * )
/ * ( -/ - * W " - 0 ) - %ROWTYPE). . , ... OPEN prac_kursor; ... LOOP FETCH prac_kursor INTO prac_rek; EXIT WHEN prac_kursor%NOTFOUND; ... END LOOP; 6.7.4.
Rozkaz SELECT ... INTO
Rozkaz SELECT ... INTO odczytuje informacje z bazy danych i zapisuje je do * ( .9Q+;9 0 +;91 +M9M:$ N$A* %- - +M9M:$
0 ) / / 1* + +M9M:$ N$A, SELECT select_list_item [, select_list_item] ... INTO { record_name | variable_name [, variable_name] ... } rest_of_select_statement ; Parametry: Zobacz opis rozkazu FETCH. . , SELECT nazwisko, placa*12 INTO pnazw, plac_sum FROM pracownicy WHERE pracownik_nr = 12345; 6.7.5.
Rozkaz IF
Rozkaz IF pozwala na warunkowe wykonywanie rozkazów. + , IF plsql_condition THEN seq_of_statements [ELSEIF plsql_condition THEN seq_of_statements] ... [ELSE seq_of_statements] END IF; Parametry: X W " 0 ) - # 1 77
Bazy danych
Robert Chwastek
XWW " -/ 0-3 1 Opis: I N2 )/ -
0 - 1* 8# $'M ) M9+MN2 M9+M - M N2 - ) M N2* ( M9+MN2* 8# $'M N2 7* 8#
) M9+MN2* 8# ) M9+M 0# 1* ( - J99 * . , IF liczba_czesci < 20 THEN ilosc_zamawianych := 50; ELSEIF liczba_czesci < 30 THEN ilosc_zamawianych := 20; ELSE ilosc_zamawianych := 5; END IF; INSERT INTO zamowienia VALUES(typ_czesci, ilosc_zamawianych); 6.7.6.
Rozkaz LOOP
I 9AA. )
.9*Q+;9* , ('N9M 2AI 2AI + , [] [ { WHILE plsql_condition } | { FOR {numeric_loop_param | cursor_loop_param } } ] LOOP seq_of_statements END LOOP [ label_name ] ; + W W , index IN [REVERSE] integer_expr .. integer_expr + W W , record_name IN { cursor_name [(parameter [, parameter] ...)] | ( select_statement ) }
78
Bazy danych
Robert Chwastek
Parametry: - W " * 6) ) MZN$ # /
#* . )
# , label_name.index XWW " - X W " .9*Q+;9* ( ('N9M - ) * A
#/ $IJM* ( * [ " 2AI* # * W[ " ) - * ( )
- # 2AI* IMOMI+M " / [ 0 1* W " * ( # 2AI
* "
0# parametrami). W " ) * .9*Q+;9
- 0 1* Opis:
N - ) * $ 7 MZN$* . , LOOP ... IF (x > 10) THEN EXIT loop1; ... END LOOP loop1; . ('N9M /
* ( - ) * ( ) / * . , WHILE x < 10 LOOP ... x := x - y; ... END LOOP; . 2AI / # #/ *
) * N ) -/ - * . , FOR i IN 1 .. n LOOP silnia := silnia * n; 79
Bazy danych
Robert Chwastek
END LOOP; . 2AI ) / ) 0 - 1* : )
* . , DECLARE CURSOR prac_kursor IS select * FROM pracownicy; prac_rek prac_kursor%ROWTYPE; BEGIN ... FOR prac_rek IN prac_kursor LOOP suma := suma + prac_rek.placa_podstawowa; END LOOP; ... END; 6.7.7.
Rozkaz EXIT
I MZN$ ) # * I , -
* + , EXIT [label_name] [WHEN plsql_condition] ; Parametry: - W " / #* 8#
MZN$ # - )) wykonywanej. X W " ) MZN$ * 6 -/
.9*Q+;9* (# -
#/ $IJM* 6.7.8.
Rozkaz GOTO
I &A$A ) hmiastowego przekazania sterowania od rozkazu * + , > + &A$A, GOTO label_name ; Opis: I &A$A ) - - - - * 5 -
) - - *
) ) * 8# &A$A ) 2AI
automatycznie.
80
Bazy danych
7.
Robert Chwastek
Literatura
1. Wojciech Cellary, Zbyszko Królikowski “Wprowadzenie do projektowania baz danych dBase III”, Wydawnictwa Naukowo -Techniczne, Warszawa 1988 2. ORACLE SQL Language Reference Manual 3. ORACLE PL/SQL User’s Guide and Reference 4. ORACLE SQL*Plus User’s Guide and Reference
81