Professional Documents
Culture Documents
Bazy Danych - Robert Chwastek
Bazy Danych - Robert Chwastek
Bazy danych
Bazy danych
Robert Chwastek
w Krakowie.
Bazy danych
Robert Chwastek
1.
E ............................................................................................................................................ 5
1.1. 1.2. 1.3. 1.4. DEFINICJA BAZY DANYCH ............................................................................................................................................... 5 S
........................................................................................................................... 6 TRANSAKCJE .................................................................................................................................................................. 6 J
........................................................................................................................ 7 SPIS TYPW DANYCH ...................................................................................................................................................... 8 TYP NUMERYCZNY ......................................................................................................................................................... 8 KONWERSJE TYPW ..................................................................................................................................................... 10 W
......................................................................................................................................................... 10
2.
3.
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 porwnania .......................................................................................................................................... 51 4.1.4. Operatory logiczne ................................................................................................................................................ 52 4.1.5.
........................................................................................................................................ 53
............................................................................................................. 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
Bazy danych
Robert Chwastek
1.
1.1.
Bazy danych
Robert Chwastek
1.2.
danych (SZBD) jest to zestaw programw
jest oprogramowaniem oglnego przeznaczenia. System bazy danych
1.3.
Transakcje
Bazy danych
Robert Chwastek
1.4.
Bazy danych
Robert Chwastek
2.
2.1.
Typy danych
Spis typw danych
Opis
Synonim do char W aktualnej wersji ORACLEa jest to synonim do char, konieczne jest
Poprawne daty z zakresu 1 stycznia 4712 p.n.e. do 31 grudnia 4712 n.e.
( $)** +, &-./
0 $
synonim do long
1
szesnastkowej.
przechowywana, ale obliczana na podstawie informacji o fizycznym
ROWIDTOCHAR. &
, -129 124 10 do 9.99 * 10 $
Typ char(size)
character varchar(size)
long raw
rowid
number
2.2.
Typ numeryczny
trzech sposobw: number number (precyzja) number (precyzja, skala)
8
Bazy danych
Robert Chwastek
-
-84 do 127. W momencie definiowania kolumny numerycznej dobrym zwyczajem jest
&
&
&
" ,
)
"
'
,
9.87E-2 oznacza 9.87 * 10-2.
)1 ' / $
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
Typ number number number number number number number number number number number number number number number number number
2.3.
Konwersje typw
char
char number date
TO_CHAR TO_CHAR
number
TO_NUMBER
date
TO_DATE TO_DATE
2.4.
'' ,
'' '' '
'
10
Bazy danych
Robert Chwastek
' )$$ , )$$ , )$$ ''
''
,,, '' '' '' ,,, ,, ,,, 2 ,,,3 4 ,, &
'' ) '' &
'' '' )1 ' )$$ 4 '' '
&
)1 '
11
Bazy danych
Robert Chwastek
3.
Model relacyjny
#
podstawowych elementw: relacyjnych struktur danych
bazy danych
3.1.
!
#
"
$
12
Bazy danych
Robert Chwastek
3.2.
QL
' ) Rozkaz ALTER TABLE Typ DDL
DDL DDL
DDL
Opis
Tworzy indeks dla tabeli
unikalnych identyfikatorw w tabelach
przestrzeni dla danych
13
Bazy danych
Robert Chwastek
CREATE VIEW DELETE DROP obiekt INSERT RENAME SELECT UPDATE COMMIT ROLLBACK SAVEPOINT SET TRANSACTION
DDL DML DDL DML DDL DML DML DML DML DML DDL
innych widokw
Dodaje nowy wiersz (lub wiersze) do tabeli lub widoku #
Wykonuje zapytanie. Wybiera wiersze i kolumny z jednej lub kilku tabel Zmienia dane w tabeli 5%
punktu. Zaznacza punkt, do ktrego mozliwe jest wykonanie rozkazu ROLLBACK #
odczytu).
3.3.
3.3.1.
Definicje podstawowe
1
+6/ +7/
! napisanych w ten sposb aplikacji.
' ' ORACLEa 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
Robert Chwastek
'
'
)1 '
,
+/ + /
7E2 = 7 * 102 25e-03 = 25 * 10-3
)1 ' % +5/ +$/ ' +5/ , 5 +$/ , - 80 $
256K = 256 * 1024 1M = 1 * 1048576 1 ' %
3.3.2. Rozkaz CREATE TABLE
1 1 '
1 1 ' 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:
15
Bazy danych
Robert Chwastek
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
Bazy danych
Robert Chwastek
DROP SEQUENCE [user.]sequence - kasowanie sekwencji. DROP [PUBLIC] SYNONYM [user.]synonym - usuwanie synonimu. Synonim
DROP TABLE [user.]table
DROP TABLESPACE tablespace [INCLUDING CONTENTS] - usuwanie
1
przypadku podania klauzuli INCLUDING CONTENTS obszar danych zostanie
& ' )
DROP VIEW [user.]view
3.3.4. Rozkaz INSERT 1
INSERT INTO [user.]table [ (column [, column] ...) ] { VALUES (value [, value] ...) | query } Parametry:
&
''
:
'
# )1 1 )1 )1 UPDATE. Opis: 1 1 '
5 ''
) '' & ' '
17
Bazy danych
Robert Chwastek
#
;
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 1 '
DELETE [FROM] [user.]table [alias] [WHERE condition] Parametry:
'
5
1 ' Opis: %
Skasowanie wszystkich wierszy w tabeli pracownicy: DELETE FROM pracownicy ; numerem 2: DELETE FROM ksiazki WHERE autor = 2 ;
18
Bazy danych
Robert Chwastek
3.3.6.
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: :
1 $ *
&
, 1
$ '
$ '
' $ '
, 8 2
)$ '
$ '
, 8
)$ '
* ' ) * '
) * '
%
* '
cykl generacji numerw.
19
Bazy danych
Robert Chwastek
20
Bazy danych
Robert Chwastek
CREATE SEQUENCE eseq INCREMENT BY 10 ; INSERT INTO pracownicy VALUES (eseq.NEXTVAL, Jan, Kowalski, 3) ; 3.3.7. Rozkaz SELECT
21
Bazy danych
Robert Chwastek
9
SELECT, a nie na nazwie.
1)$ ) )1 '
Opis:
' )1 ' %
'
SELECT imie, nazwisko FROM pracownicy ; SELECT tytul, autorzy.imie, autorzy.nazwisko, miejsca.miejsce FROM ksiazki, autorzy, miejsca WHERE ksiazki.autor = autorzy.autor_nr AND ksiazki.miejsce = miejsca.miejsce_nr ; 3.3.8. Rozkaz UPDATE
Bazy danych
Robert Chwastek
lub UPDATE [user.]table [alias] SET (column [, column] ...) = (query) [, column [, column] ...) = (query) ] ... [ WHERE condition ] Parametry:
rozkazu.
: ' )1 1 * )1
1 '
Opis: 5 5 1
& 1
1
1 %
+4/
&
5
&
4 :
'' #
&
UPDATE pracownicy
; 3.3.9. Rozkaz RENAME
23
Bazy danych
Robert Chwastek
RENAME old TO new Parametry: old - aktualna nazwa tabeli, widoku lub synonimu
Opis:
#
#
1 ' 1) ' 1 $ CREATE TABLE temporary (new_column_name) AS SELECT old_column_name FROM table ; DROP TABLE table ; RENAME temporary TO table ;
RENAME wydzialy TO jednostki ; 3.3.10. Rozkaz ALTER TABLE
1 dodaje kolumny i warunki modyfikuje definicje kolumn jak typy i warunki usuwa warunki 5 ' 1 ALTER TABLE [user.]table [ADD ( {column_element | table_constraint} [, {column_element | table_constraint}] ...) ] [MODIFY (column_element [,column_element] ...)] [DROP CONSTRAINT constraint] ... [PCTFREE integer] [PCTUSED integer] [INITTRANS integer] [MAXTRANS integer] [STORAGE storage] [BACKUP] Parametry: &
24
Bazy danych
Robert Chwastek
1 danej tabeli lub administrator (DBA).
Bazy danych
Robert Chwastek
CLUSTER cluster} [INITTRANS n] [MAXTRANS n] [TABLESPACE tablespace] [STORAGE storage] [PCTFREE n] [NOSORT] Parametry:
)1 ' /
column - nazwa kolumny w tabeli.
)1 '
' 1
) )1 )1 ' /
indeksu. Opis:
0 Jeden element
&
do wyszukiwania konkatenacji kolumn A, B, C, kolumn A i B lub tylko kolumny A. Nie
pojedynczej kolumny B lub C. $
CREATE INDEX i_prac_imie ON pracownicy (imie) ;
26
Bazy danych
Robert Chwastek
3.3.12.
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
ROLLBACK [ WORK ] [TO [ SAVEPOINT ] savepoint ] Parametry: )15
)
1)'' 5 savepoint - nazwa punktu zaznaczonego podczas wykonywania aktualnej transakcji. Opis: 1 1)'' 5
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: 1 ) 1)'' 5
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
1 % ' 1 1
Bazy danych
Robert Chwastek
3.4.
Operacje relacyjne
)
warunki;
% 3.4.1. Selekcja Operacja ) podzbiorem poziomym.
!
#
" "
' ' 1
SELECT * FROM osoby; spowoduje wybranie wszystkich krotek (wierszy) z relacji (tabeli) ludzie.
+ / + )/
SELECT * FROM osoby
;
)
)1 SELECT * FROM osoby
;
30
Bazy danych
Robert Chwastek
3.4.2.
% Projekcja
' ) podzbiorem pionowym.
!
#
" "
'
" "
Bazy danych
Robert Chwastek
; 3.4.3. Produkt
% )
%
32
Bazy danych
Robert Chwastek
$
'
!
) SELECT. SELECT imie, nazwisko, tytul FROM autorzy, ksiazki WHERE autorzy.nazwisko = Mickiewicz and autorzy.nr = ksiazki.autor ; 3.4.5.
)
'
3.4.5.1. Unia
Bazy danych
Robert Chwastek
SELECT nazwisko FROM pracownicy INTERSECT SELECT nazwisko FROM wlasciciele ; 3.4.5.3.
Operacj
niej zatrudnieni: SELECT imie, nazwisko FROM wlasciciele MINUS SELECT imie, nazwisko FROM pracownicy ; 3.4.6. Grupowanie
Bazy danych
Robert Chwastek
3.5.
Podzapytania
# '
dwa rodzaje: podzapytania proste (nazywane po prostu podzapytaniem) - podzapytanie jest wykonywane przed
"
1 ' &
1 SELECT nazwisko FROM pracownicy WHERE placa_podstawowa = (SELECT min(placa_podstawowa) FROM pracownicy) ;
35
Bazy danych
Robert Chwastek
36
Bazy danych
Robert Chwastek
3.6.
Widoki (perspektywy)
%
#
proste
'
danych zawartych w widoku. Widok
% '
wszystkich systemach).
1
CREATE VIEW personalia AS SELECT imie, nazwisko FROM pracownicy ;
opisie rozkau CREATE VIEW:
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 ;
37
Bazy danych
Robert Chwastek
3.7.
Transakcje
3.8.
3.8.1.
Normalizacja relacji
Cele normalizacji
Bazy danych
Robert Chwastek
Bazy danych
Robert Chwastek
postaci normalnej ilustruje rysunek:
%
%
%&
"
%
%
%&
"
3.8.3.
Definicje pomocnicze
postaci normalnej. Przed omwieniem procesu normalizacji konieczne jest jednak
40
Bazy danych
Robert Chwastek
41
Bazy danych
Robert Chwastek
%
%
%&
Atrybut B jest zbioru atrybutw X w schemacie R, Y i nie istnieje podzbir X / Y.
Zbir atrybutw Y jest zbioru atrybutw X w 1 Y i istnieje podzbir X / Y. * #
atrybutw Z jest
#
*
*
*
*
#
# (
(
(
(
(
(
(
(
( 1
(
(
(
$
*
1
1 dla dowolnej pary krotek t1 i t2 1[X] = t2[X], istnieje taka para krotek s1 i s2 s1[X] = s2[X] = t1[X] = t2[X] oraz s1[Y] = t1[Y] i s1[R-X-Y] = t2[R-X-Y] oraz s2[Y] = t2[Y] i s2[R-X-Y] = t1[R-X-Y].
42
Bazy danych
Robert Chwastek
1 i t2
1[x] = t2[X]),
*
sposb krotki s1 i s2
5 (
( $
(
(& ( ( (
& ( & (
(
( (
$
$
$
$
!
!
! !
Bazy danych
Robert Chwastek
(
$ 1 4 1, ..., An 1 11, ..., Rn
dekompozycja relacji r (o schemacie R) na relacje r1, ..., rn 1, ..., rm. $
4 $ 1 11, ..., Rm atrybutw schematu R od klucza wtedy i tylko wtedy, gdy w dowolnej sekwencji %
1 3.8.4.
1
$ # (
(
(
( (
(
(
# (
( #
( (
44
Bazy danych
Robert Chwastek
%
%&
%
%
%
"
&
( ( ( #
(
(
(
kluczami prostymi. relacji Zamwienia do drugiej postaci normalnej otrzymujemy Dostawca na zamwieniu
45
Bazy danych
Robert Chwastek
Zamwione dostawy
%
%&
%
%
3.8.5.
Bazy danych
Robert Chwastek
3.8.6.
1
* # 1 Y Z = R i podzbir Y jest nietrywialnie
Dana relacja R jest w czwartej postaci normalnej wtedy i tylko wtedy, gdy jest w *
< (
funkcjonalnej jest w trzeciej postaci normalnej, ale nie jest w czwartej postaci normalnej, (
(
(
atrybutami. &
47
Bazy danych
Robert Chwastek
( ( (
$
$
!
!
$
$
3.8.7.
!
Bazy danych
Robert Chwastek
49
Bazy danych
Robert Chwastek
4.
4.1.
Operatory
'
4.1.1. Operatory arytmetyczne
+, *, / +, -
... WHERE NR = -1 ... WHERE -PLACA < 0 SELECT 2*X+1 ... WHERE X > Y/2 SELECT 2*X+1 ... WHERE X > Y-Z
4.1.2.
Operatory znakowe
50
Bazy danych
Robert Chwastek
4.1.3.
Operatory porwnania
... WHERE PLACA IN (SELECT PLACA FROM PRAC WHERE WYDZIAL=30) 1
NOT IN ... WHERE PLACA NOT IN (SELECT ' PLACA FROM PRAC WHERE dowolny element zbioru jest rwny WYDZIAL=30) NULL Synonim do != ALL
... WHERE PLACA = ANY (SELECT ANY PLACA FROM PRAC WHERE $
WYDZIAL =30) jednym z operatorw: =, !=, >, <, =4 >4 # 1 przynajmniej jeden z elementw
... WHERE (PLACA, PREMIA) >= ALL ALL ((14900, 300), (3000, 0)) $
jednym z operatorw: =, !=, >, <, =4 >4 # 1
warunek. ... WHERE A BETWEEN 1 AND 9 [NOT] BETWEEN mniejszy lub rwny y.
51
Bazy danych
Robert Chwastek
# 1 ... WHERE EXISTS (SELECT PLACA zwraca przynajmniej jeden wiersz. FROM PRAC WHERE WYDZIAL = 30)
... WHERE STAN LIKE T% [NOT] ' +?/
LIKE
, jest rwny NULL. Litera _
IS [NOT] [Nie] jest rwne NULL. ... WHERE ZAWOD IS NULL NULL ) ) '
1
NULL. Np. rozkaz: SELECT TRUE FROM prac WHERE wydzial NOT IN (5, 15, NULL) ;
wydzial NOT IN (5, 15, NULL)
wydzial != 5 AND wydzial != 15 AND wydzial != NULL
'' ''
'' 4.1.4. Operatory logiczne
)
%
Operator () NOT
AND
OR
Opis
# SELECT ... WHERE x = y AND (a = b
% OR p = q) # ... WHERE NOT (zawod IS NULL) gicznego WHERE NOT (A=1) Logiczne i. Wynik jest rwny ... WHERE A = 1 AND B = 2 1
1 Logiczne lub. Wynike jest rwny ... WHERE A = 1 OR B = 3 1
52
Bazy danych
Robert Chwastek
jednego TRUE AND true false null OR true false null 4.1.5. true true false null true true true true
operandu
jest
rwna )1
Operatory zbiorowe
%
Operator UNION
INTERSECT
MINUS
Opis
<
... SELECT ... UNION SELECT ...
... SELECT ... INTERSECT SELECT ... tylko raz )
... SELECT ... MINUS SELECT ...
tylko raz
4.2.
operandw.
numeryczny: 2 * 2 znakowy: TO_CHAR(TRUNC(SYSDATE + 7))
53
Bazy danych
Robert Chwastek
pracownicy.nazwisko ! 10 SYSDATE
: { n | variable } [ :ind_variable ]
:nazwisko_pracownika:nazwisko_pracownika_indykator " #
function_name( [DISTINCT | ALL] expr [, expr] ... )
LENGTH(Kowalski) ROUND(1234.567*82) %
(expr) +expr, -expr, PRIOR expr expr * expr, expr / expr expr + expr, expr - expr, expr || expr
(Kowalski: || Nauczyciel) LENGTH(Nowak) * 57 SQRT(144) + 72 %
(expr [, expr], ...)
54
Bazy danych
Robert Chwastek
(Kowalski, Nowak, Burzynski) (10, 20, 40) (LENGTH(Kowalski) * 5, -SQRT(144) + 77, 59) ' jako warunek w klauzulach WHERE i HAVING w klauzulach CONNECT BY, START WITH, ORDER BY klauzuli VALUE w rozkazie INSERT w klauzuli SET rozkazu UPDATE
4.3.
Warunki
%
1 '
<expr> <comparison operator> <expr> <expr> <comparison operator> <query> <expr-list> <equal-or-not> <expr-list> <expr-list> <equal-or-not> <query> porwnanie z dowolnym lub ze wszystkimi elementami listy lub zapytania <expr> <comparison> { ANY | ALL } ( <expr> [, <expr] ...) <expr> <comparison> { ANY | ALL } <query> <expr-list> <equal-or-not> { ANY | ALL } ( <expr-list> [, <expr_list>] ...) <expr-list> <equal-or-not> { ANY | ALL } <query>
<expr> [NOT] IN ( <expr> [, <expr>] ... ) <expr> [NOT] IN <query> <expr-list> [NOT] IN ( <expr-list> [, <expr-list>] ... ) <expr-list> [NOT] IN <query>
<expr> [NOT] BETWEEN <expr> AND <expr>
'' <expr> IS [NOT] NULL
55
Bazy danych
Robert Chwastek
EXISTS <query> kombinacja innych warunkw (podana zgodnie z priorytetami) ( <condition> ) NOT <condition> <condition> AND <conditin> <condition> OR <condition> Nazwisko = Kowalski pracownicy.Wydzial = Wydzialy.Wydzial Data_urodzenia > 01-JAN-67 Zawod IN (Dyrektor, Urzednik, Informatyk) Placa BETWEEN 500 AND 1500
56
Bazy danych
Robert Chwastek
5.
5.1.
ABS(n) CEIL(n) FLOOR(n) MOD(m, n)
Funkcje numeryczne
# ABS(-15) Wynik: 15 # CEIL(15.7) Wynik: 16 # FLOOR(15.7) Wynik: 15 #
MOD(7, 5) Wynik: 2 #
POWER(2, 3) ' " Wynik: 8
#
ROUND(16.167, 1) & Wynik: 16.2 , '
ROUND(16, 167, -1) odpowiedniej liczby cyfr przed Wynik: 20 przecinkiem) # , , SIGN(-15)
, Wynik: -1 od 0 Zwraca pierwiastek kwadratowy liczby n. SQRT(25) & =,
Wynik: 5 #
TRUNC(15.79, 1) &
Wynik: 15.7 , &
TRUNC(15.79, -1) Wynik: 10 Przeznaczenie
POWER(m, n)
ROUND(n[, m])
SIGN(n)
5.2.
CHR(n)
Funkcje znakowe
Przeznaczenie Zwraca znak o podanym kodzie
CHR(65) Wynik: A
57
Bazy danych
Robert Chwastek
INITCAP(string)
#
LOWER(string)
LPAD(string1, n [, string2])
LTRIM(string [, zbir])
RPAD(string1, n [, string2])
RTRIM(string [, zbir])
SOUNDEX(string)
SUBSTR(string, m [, n])
INITCAP(PAN JAN NOWAK) Wynik: Pan Jan Nowak Zamienia wszystkie litery w podanym LOWER(PAN JAN
NOWAK) Wynik: pan jan nowak #
LPAD(Ala ma , kota*,
17)
&
Wynik: & kota*kota*Ala ma
zwracane jest n pierwszych znakw z tekstu string1. Usuwa litery z tekstu string od lewej LTRIM(xxxXxxOstatn
/ + /
& Wynik:
) ( pusty. #
REPLACE(Jack & Jue, J, Bl) replace. Wynik: Black & Blue #
RPAD(Ala ma , 17,
kota*)
&
Wynik: & Ala ma kota*kota*
zwracane jest n pierwszych znakw z tekstu string1. #
RTRIM(Ostatnie
/ + / &
Wynik:
) ( #
SELECT nazwisko
FROM bibl WHERE
) SOUNDEX (nazwisko)
= SOUNDEX ('Mickiewicz'); wymawianych tak samo. #
SUBSTR(ABCDE,2,
3) &
Wynik:
58
Bazy danych
Robert Chwastek
1. #
wszystkich znakw from na znak to.
BCD
UPPER(string)
#
LENGTH(string)
TRANSLATE( HELLO! THERE!, !, -) Wynik: HELLO- THERE- UPPER( Jan Nowak) Wynik: JAN NOWAK ASCII(A) Wynik: 65 INSTR( MISSISSIPPI, S, 5, 2) Wynik: 7
LENGTH(Nowak) Wynik: 5
5.3.
Funkcje grupowe
5 1) * '
5
pomijane). Klauzula ALL powoduje wybranie wszystkich wierszy wynikowych do
'' )
1 $ 1 AVG( [DISTINCT | ALL] num) COUNT( [DISTINCT | ALL] expr) COUNT(*) Przeznaczenie #
# ktrych expr nie jest rwne NULL #
59
SELECT AVG(placa) Srednia FROM pracownicy SELECT COUNT(nazwisko) Liczba FROM pracownicy SELECT COUNT(*) Wszystko FROM pracownicy
Bazy danych
Robert Chwastek
MAX( [DISTINCT | ALL] expr) MIN( [DISTINCT | ALL] expr) STDDEV( [DISTINCT | ALL] num) SUM( [DISTINCT | ALL] num)
VARIANCE( [DISTINCT | #
ALL] num) NULL
SELECT MAX(Placa) Max FROM pracownicy SELECT MIN(Placa) Min FROM pracownicy SELECT STDDEV(Placa) Odchylenie FROM pracownicy SELECT SUM(Placa) Koszty osobowe FROM pracownicy SELECT VARIANCE(Placa) Wariancja FROM pracownicy
5.4.
Funkcje konwersji
)
typTOtyp. Pierwszy typ jest typem, z ktrego wykonywana jest konwersja, drugi jest typem wynikowym. CHARTOROWID (string) Przeznaczenie
znakw na ROWID
SELECT nazwisko FROM pracownicy WHERE ROWID = CHARTOROWID (0000000F.0003.0002) SELECT CONVERT (New WORD, US7ASCII, WE8HP) Conversion FROM DUAL
implementacjami zestawu znakw. Zestawem
8 HEXTORAW (string) 5
1 ROWTOHEX(raw) cyfry szesnastkowe
liczbie.
ROWIDTOCHAR CONVERT(string [,dest_char_set [,source_char_set ] ])
60
INSERT INTO GRAPHICS (RAW_COLUMN) SELECT HEXTORAW (7D) FROM DUAL SELECT RAWTOHEX (RAW_COLUMN) Graphics FROM GRAPHICS
Bazy danych
Robert Chwastek
GRAPHICS WHERE ROWIDTOCHAR(ROWID) LIKE %F38% SELECT TO_CHAR(17145, $099,999) Char FROM DUAL
podanego tekstu. Do
DD-MON-YY TO_NUMBER (string) TO_DATE(string [, fmt])
SELECT TO_CHAR(HIREDATE, Month DD, YYYY) New date format FROM EMP WHERE ENAME = SMITH INSERT INTO BONUS (BONUS_DATE) SELECT TO_DATE (January 15, 1989, Month dd, YYYY) FROM DUAL
UPDATE EMP SET SAL = SAL + TO_NUMBER( SUBSTR($100 raise', 2, 3)) WHERE ENAME = 'BLAKE
5.5.
LAST_DAY(date)
Bazy danych
Robert Chwastek
NEW_TIME(date, a, b)
NEXT_DAY(date, string)
ROUND(date [, fmt])
SYSDATE
SELECT TO_CHAR( NEW_TIME(TO_DATE( 17:47, hh24:mi), PST, GMT), hh24:mi) GREENWICH TIME FROM DUAL
SELECT NEXT_DAY( 17-MAR-89, TUESDAY) NEXT DAY FROM DUAL SELECT ROUND ( TO_DATE( 27-OCT-88), YEAR) FIRST OF THE YEAR FROM DUAL SELECT SYSDATE FROM DUAL
Bazy danych
Robert Chwastek
TRUNC(date [, fmt])
# jednostki podanej w fmt. % usuwana jest informacja o czasie.
SELECT TRUNC( TO_DATE( 28-OCT-88, YEAR) First Of The Year FROM DUAL
wiek
,8
%
%
%
godzina minuta
0
0
5.6.
Inne funkcje
SELECT GREATEST (Harry, Harriot, Harold) GREATEST FROM DUAL
Przeznaczenie GREATEST(expr [, #
expr] ...)
konwertowane do typu
wykonaniem porwnania. # LEAST(expr [, expr] ...)
konwertowane do typu
wykonaniem porwnania. '' NVL (expr1, expr2) & zwraca expr2, w przeciwnym wypadku zwraca expr1.
SELECT ENAME NVL(TO_CHAR(COMM), NOT APPLICABLE) COMMISION FROM EMP WHERE DEPTNO = 30
63
Bazy danych
Robert Chwastek
UID
USER
SELECT USER, UID FROM DUAL SELECT USER, UID FROM DUAL
5.7.
"
)9 1 )9 5.7.1. Formaty numeryczne )9 1
&
+ /
numerycznego: Element 9 0 $ B MI PR , (przecinek) . (kropka) V E DATE 5.7.2. 9999 0999 $9999 B9999 9999MI 9999PR 9,999 99.99 999V99 9.999EEEE DATE Formaty dat Opis ' +./
+6/ ++ +=/ >
$ ,n
po V
Dla dat przechowywanych w postaci numerycznej.
+$$3 3**/
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 " + /
++ + /
- Ostatnie 3, 2 lub 1 cyfra roku Rok z przecinkiem na podanej pozycji Rok przeliterowany. S powoduje poprzedzenie daty przed ++ # 3
3 Znak BC/AD z kropkami 5 $ ,
.
%
%
i trwa 7 dni)
%
%
8
% 00 % %
8
. Trzyliterowy skrt nazwy dnia !
!
Godzina (1-12) Godzina (1-24) Minuta (0-59) Sekunda (0-59)
,-0.. Znaki przestankowe umieszczane w wyniku
$ $
( 3 liczb zerami;
TH dla liczby 4;
65
Bazy danych
Robert Chwastek
6.
6.1.
Bazy danych
Robert Chwastek
6.2.
Struktura bloku
5
'3 '
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
)
%
1) 1 %
%
'1
) '3 '
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; #
1 1 FUNCTION name [ (argument [, argument] ... ) ] RETURN datatype IS [local declarations] BEGIN executable statements [EXCEPTION exception handlers] END [name];
1 1 1 1 1 %
1 1
& % 1 1 '3 '
1 1
6.4.
Kursory
W celu wykonania rozkazu SQL system tworzy pewien obszar roboczy nazywany
'3 ' %
'3 ' dwch typw kursorw:
68
Bazy danych
Robert Chwastek
% )1" '3 '
operacji. &
5
'3 '
DECLARE $ % FROM pracownicy
&' ... BEGIN ...
) sposb: OPEN prac_kursor;
5
1 FETCH prac_kursor INTO prac_nazw, prac_wydz; %
') CLOSE prac_kursor; 5
+?/
#
?) ) 1 %
powodu braku wierszy ? ) 1 % %ROWCOUNT - liczba wierszy w kursorze (po otwarciu kursora) ? ) 1
rsora: LOOP FETCH prac_kursor INTO prac_nazw, prac_wydz; IF prac_kursor%ROWCOUNT > 10 THEN # ... EXIT WHEN prac_kursor%NOTFOUND; ... END LOOP;
69
Bazy danych
Robert Chwastek
6.5.
Rekordy
Bazy danych
Robert Chwastek
)
)
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; '3 ' )1 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
(
%
22 & '3 '
&
) ( ( '3 '
'3 '
71
Bazy danych
Robert Chwastek
(
1
%
&
( # 1)9
!
3# DECLARE cz_wsk NUMBER(3,1); BEGIN ... SELECT cena / zysk FROM akcje
( # -- 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;
#
BEGIN SELECT ... ) *+ SELECT ... ) *+ SELECT ... ) *+ END;
72
Bazy danych
Robert Chwastek
BEGIN SELECT ... SELECT ... SELECT ... EXCEPTION WHEN NO_DATA_FOUND THEN , * !) *+ END;
#
&
6.6.2.
'3 '
1 )19'1 *9)
otwartego; 9 '9)9
1
w indeksie zadeklarowanym jako UNIQUE; ' 9 1 )1
kursora (np. nie otwartego); ' 9 $ 1
numerycznego z tekstu, ktry nie reprezentuje liczby; )9 9 )
'
' )" )1 9 11)1
" ))9$*91)
'
' )" ' 9 11)1
lub pola; ZERO_DIVIDE - prba dzielenia przez zero; 6.6.3. (
'3 ' ) % 5
73
Bazy danych
Robert Chwastek
%
) ) 1
) )
EXCEPTION WHEN ... THEN WHEN ... THEN WHEN ... THEN WHEN OTHERS THEN END;
* !
&
)1 WHEN over_limit OR under_limit OR VALUE_ERROR THEN ...
) 1 ) 1
6.6.4.
& '3 '
1
)
DECLARE overflow EXCEPTION; result NUMBER(5); BEGIN ... END;
'3 ' %
rozkazach SQL.
74
Bazy danych
Robert Chwastek
6.7.
6.7.1.
Rozkaz OPEN
Rozkaz OPEN wykonuje zapytanie skojarzone z jawnie zadeklarowanym kursorem
5
OPEN cursor_name [(input_parameter [, input_parameter] ... )] ; Parametry: cursor_name - nazwa kursora uprzednio zadeklarowanego, ktry nie jest aktualnie otwarty. 9 '3 '
&
klauzuli WHERE).
75
Bazy danych
Robert Chwastek
)
)
)
celu pobrania ich z kursora.
)
)
+4>/
DECLARE CURSOR prac_kur(nazw CHAR, wydz NUMBER) IS ... BEGIN OPEN prac_kur(Kowalski, 10); ... OPEN prac_kur(wydz => 15, nazw => Nowak); END; $
6.7.2. Rozkaz CLOSE
Bazy danych
Robert Chwastek
cursor_name - nazwa aktualnie otwartego kursora. 9 9 %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 '3 '
' ' )
'
' ) 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 rozkazw.
IF plsql_condition THEN seq_of_statements [ELSEIF plsql_condition THEN seq_of_statements] ... [ELSE seq_of_statements] END IF; Parametry: :9
77
Bazy danych
Robert Chwastek
:9 9
!
Opis: 1
&
' '
' &
% &
' &
' ''
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
1 ')) ' 3 ' ' )1 )1 [<<label_name>>] [ { WHILE plsql_condition } | { FOR {numeric_loop_param | cursor_loop_param } } ] LOOP seq_of_statements END LOOP [ label_name ] ; 99 index IN [REVERSE] integer_expr .. integer_expr 99 record_name IN { cursor_name [(parameter [, parameter] ...)] | ( select_statement ) }
78
Bazy danych
Robert Chwastek
Parametry: 9 $
label_name.index :9 9
:9
' 3 ' '
)
1
)1
9
)1 1 1
9
)1
parametrami). 9
' 3 '
Opis:
%
<<loop1>> LOOP ... IF (x > 10) THEN EXIT loop1; ... END LOOP loop1; '
WHILE x < 10 LOOP ... x := x - y; ... END LOOP; )1
FOR i IN 1 .. n LOOP silnia := silnia * n;
79
Bazy danych
Robert Chwastek
1
1
EXIT [label_name] [WHEN plsql_condition] ; Parametry: 9 &
wykonywanej. :9
$ ' 3 '
1 6.7.8. Rozkaz GOTO 1 ))
hmiastowego przekazania sterowania od rozkazu
<< label_name >>
)) GOTO label_name ; Opis: 1 ))
#
& )) )1
automatycznie.
80
Bazy danych
Robert Chwastek
7.
Literatura
1. Wojciech Cellary, Zbyszko Krlikowski Wprowadzenie do projektowania baz danych dBase III, Wydawnictwa Naukowo -Techniczne, Warszawa 1988 2. ORACLE SQL Language Reference Manual 3. ORACLE PL/SQL Users Guide and Reference 4. ORACLE SQL*Plus Users Guide and Reference
81