Laboratorium 1
Transkrypt
Laboratorium 1
Bazy danych 2 – Laboratorium 1
SPOOL moj_plik
zapisuje wszystkie wydane polecenia oraz ich wyniki do
pliku moj_plik, np. spool 'c:\moj.txt'
kończy wysyłanie danych do pliku
SPOOL OFF
uruchomienie skryptu z pliku moj_plik, np. @ 'c:\moj.txt'
@ moj_ plik
edycja bufora SQL w domyślnym edytorze
edit
CREATE TABLE
tworzy strukturę tabeli
wyświetla opis struktury tabeli
DESCRIBE
ALTER TABLE
rozszerzanie i modyfikowanie schematu tabeli
zmiana nazwy tabeli
RENAME
DROP TABLE
usuwanie tabeli
zmiana podłączenia do bazy
CONNECT
CONNECT USER_NAME
DISCONNECT
EXIT
zmiana podłączenia do bazy dla użytkownika o nazwie
user_name
rozłączenie z bazą
wyjście z programu
Polecenia SQL mogą być rozmieszczone w kilku wierszach.
Koniec polecenia SQL zakończ średnikiem.
Dobrym zwyczajem jest umieszczanie klauzul od nowych linii.
Nie wolno dzielić słowa pomiędzy wiersze.
Dozwolone jest używanie małych lub wielkich liter, chyba że sprawdzamy zawartość pola.
Dokumentacja Oracle 11 g pod adresem: http://docs.oracle.com/cd/E11882_01/appdev.112/e25519.pdf
oraz http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm
Literatura z zakresu Oracle w Bibliotece AJD/WMP.
Zmiana hasła użytkownika:
ALTER USER nazwa_użytkownika IDENTIFIED BY nowe_hasło;
Opis wszystkich relacji bazy danych można odczytać odwołując się odpowiednim zapytaniem do perspektywy
systemowej ALL_TABLES, a opis relacji danego użytkownika można odczytać za pomocą perspektywy
USER_TABLES.
SELECT table_name
FROM USER_TABLES;
Bazy danych 2 – Laboratorium 1
TWORZENIE TABEL
create table nazwa_relacji (
nazwa_atrybutu typ (rozmiar)
[default wartość domyślna]
[ [ constraint nazwa_ogr.] ograniczenie_atr ],
…,
[ [ constraint nazwa_ogr.] ograniczenie_rel,…]
);
Typy danych:
number
number ( r )
number ( r, n)
liczby zapisane za pomocą cyfr (0-9), opcjonalnych znaków ( +, -, .); rozmiar
liczby <= 38 cyfr
rozmiar liczby <= r cyfr
r łączna długość liczby, n liczba miejsc po przecinku ( jeśli n jest liczbą ujemną to
wartość atrybutu jest zaokrąglana do n miejsc przed przecinkiem;
char ( r)
łańcuch znakowy o stałej długości; 1<= r <=255;
varchar2 ( r)
łańcuch znakowy o zmiennej długości; 1<= r <=2000;
date
od 1 stycznia 4712 p. n. e. do 31 grudnia 4712;
long
tak jak char; maks. długość łańcucha 2 GB
- nie można definiować na nim indeksów ani ograniczeń integralności;
- nie można wykorzystywać go w klauzulach:
where, group by, order by, connect by, create table… as selecty…
- w danej relacji co najwyżej jeden atrybut może być typu long;
longraw
dane dowolnego typu ( tj. obrazów, dźwięków);
Ograniczenia:
null
wartości puste;
not null
bez wartości pustych;
unique
klucz unikalny relacji;
primary key
klucz podstawowy relacji (nie występuje przy ograniczeniu unique i odwrotnie);
Bazy danych 2 – Laboratorium 1
foreign key | references
referencja do klucza podstawowego lub unikatowego innej relacji ( do definicji
klucza obcego);
on delete cascade
ograniczenie definiowane dla klucza obcego; przy usuwaniu krotki z relacji z kluczem
podstawowym, usuwane są automatycznie krotki z relacji w której wartość klucza obcego
jest równa wartości klucza podstawowego usuwanej krotki;
check ( warunek)
warunek, który musi być spełniony przez wszystkie wartości atrybutu;
operatory ( =, <, !=, is null, like ( % - łańcuch o długości >= 0; _- pojedynczy
between…and, in (…), and, or, not );
znak)
Rozszerzanie i modyfikowanie schematu tabeli
rozszerzanie i modyfikowanie
schematu tabeli
ALTER TABLE nazwa_tabeli
ADD nazwa_atrybutu typ (rozmiar)
[default wartość domyślna]
[ [constraint nazwa_ogr] ograniczenie_atr ];
ADD [ constraint nazwa_ogr] ograniczenie_atr;
dodanie kolumny do tabeli
dodanie ograniczenia
integralnościowego
MODIFY nazwa_atrybutu typ (rozmiar)
[default wartość domyślna]
[ null | not null ];
modyfikowanie typu kolumny
DISABLE | ENABLE unique | primary key |
constraint nazwa_ogr [cascade]
czasowe wyłączenie lub
uaktywnienie ograniczenia
integralnościowego
DROP unique | primary key | constraint nazwa_ogr [cascade]
usunięcie ograniczenia
integralnościowego
Zmiana nazwy tabeli
rename stara_nazwa to nowa_nazwa;
Usuwanie tabeli
drop table nazwa_tabeli [cascade constraint];
,
Bazy danych 2 – Laboratorium 1
Ćwiczenia:
1. Zdefiniować tabele zespol, etat i pracownik oschematach przedstawionych poniżej.
zespol
id_zesp
nazwa
number(2)
klucz podstawowy
varchar2(20) atrybut obowiązkowy
nazwa
placa_min
placa_max
varchar2(10) klucz podstawowy
number(6,2) atrybut obowiązkowy, wartość > 0
number(6,2) atrybut obowiązkowy, wartość <= 5000
etat
pracownik
numer
nazwisko
etat
szef
pracuje_od
placa podst
placa_dod
id_zesp
•
number(4)
klucz podstawowy
varchar2(15) atrybut obowiązkowy
varchar2(10) klucz obcy referencja do atrybutu nazwa tabeli etat
number(4)
referencja do atrybutu numer tabeli pracownik
date
domyślna wartość daty bieżącej (sysdate lub current_date)
number(6,2) wartość >0
number(6,2) domyślna wartość 0
number(2)
klucz obcy referencja do atrybutu id_zesp tabeli zespol
wyrażenia arytmetyczne
- konstruowane są z nazw kolumn i literałów numerycznych z użyciem
operatorów: dodawania (+), odejmowania (-), mnożenia (*) i dzielenia (/ ) (* i / maja wyższy priorytet od
+ i -; w przypadku operatorów o tej samej ważności wyrażenie wartościowane jest od lewej do prawej lub
za pomocą nawiasów)
•
funkcje – przekształcają wartości kolumn i literałów, do których są stosowane (patrz plik
Wybrane_funkcje_Oracle10g.pdf lub pod adresem
http://docs.oracle.com/cd/B28359_01/server.111/b28286/toc.htm)
•
operator konkatenacji ( || ) - umożliwia łączenie wyświetlanych wartości różnych atrybutów
w pojedyncze łańcuchy znaków
•
operatory algebraiczne: UNION, UNION ALL (sumy); INTERSECT (iloczynu); MINUS (różnicy)
•
Zapytanie hierarchiczne
select...
from...
connect by prior...
start with...
order by...
Klauzula connect by określa sposób łączenia wierszy relacji w drzewo. Na ogół występują po niej dwie
kolumny, których identyczność, a dokładniej równość wartości w dwóch różnych wierszach, powoduje, że
wiersze te łączy bezpośrednia krawędź konstruowanego drzewa.
Słowo kluczowe prior występuje przy jednej z dwu kolumn klauzuli connect by. Precyzuje ono sposób
konstrukcji drzewa – kolumna przy której występuje jest uważana za nadrzędną. W konstrukcji drzewa najpierw
Bazy danych 2 – Laboratorium 1
jest pobierana wartość kolumny nadrzędnej, a następnie odszukiwane są wszystkie te wiersze, dla których
wartość tę przyjmuje również kolumna podrzędna. W tworzonym drzewie wiersze te będą dziećmi wiersza,
z którego pobrano wartość atrybutu nadrzędnego.
W celu utworzenia drzewa wierszy jest konieczne wskazanie jego korzenia – klauzula start with. Po niej
występuje warunek selekcjonujący wiersz, od którego
rozpocznie się proces konstrukcji drzewa.
Z procesem konstrukcji drzewa związana jest pseudokolumna level, której wartość określa poziom zagnieżdżenia
poszczególnych węzłów drzewa.
Przykład 1
select lpad(' ',2*(level-1)) || ' '||nazwisko||' '||etat s
from pracownik
connect by prior numer=szef
start with szef is null
order by id_zesp, level;
Przykład 2
Najpierw zostanie odrzucony wiersz nie spełniający warunku klauzuli where. Następnie zostanie utworzone
drzewo odwzorowujące zależności służbowe, z pominięciem poddrzewa wiersza nie spełniającego warunku
podanego po operatorze and w klauzuli connect by.
select id_zesp,numer,nazwisko
from pracownik
where nazwisko !='RAJSKI'
connect by prior numer=szef and nazwisko !='PODGAJNY'
start with szef is null
order by id_zesp, level;
ZMIENNE – umożliwiają parametryzowanie zapytań, które mogą być wielokrotnie wywoływane. Zmienne
lokalne są poprzedzone znakiem &. Ich zasięg jest ograniczony do pojedynczego wykonania polecenia select, w
którym zostały użyte. Zmienne globalne są poprzedzone znakami &&. Ich wartość może być określona
jednokrotnie. Raz określona wartość zostaje zapamiętana w systemie i jest wykorzystywana przy każdorazowym
odwołaniu się do reprezentującej ją zmiennej. Wprowadzane daty i napisy (jako wartości zmiennych lokalnych)
muszą być ograniczone apostrofami. W celu uniknięcia wprowadzania apostrofów, możemy ograniczyć
apostrofami samą zmienną. Podczas wykonywania polecenia jest również możliwe paramatryzowanie jego nazw
kolumn, a nawet relacji.
Przykład 3
select &kol1, &&kol2
from &relacja
where id_zesp = &id_zesp and etat = '&&nazwa_etatu';
define
– możemy sprawdzić, jakie zmienne sa zdefiniowane w systemie;
define nazwa_zmiennej - możemy sprawdzić, czy zmienna została zdefiniowana w systemie;
Bazy danych 2 – Laboratorium 1
define nazwa_zmiennej = wartość
przez &.
– możemy jawnie zdefiniować zmienną globalną. Odwołujemy się do niej
Przykład 4
define;
define kol2;
define roczny_dochod = 'placa_pod*12';
Create [or replace] view nazwa_perspektywy [(atr1, atr2, ...)]
as select ciało_polecenia_select
[with check option];
Przykład 5
create view asystenci
as
select numer, nazwisko
from pracownik
where etat = 'asystent';
Przykład 6
create view pods_zesp(nazwa, placa_min,placa_max,placa_przec)
as
select nazwa, min(placa_pod), max(placa_pod), avg(placa_pod)
from pracownik, zepsol
where pracownik.id)zesp = zepsol.id_zesp
group by nazwa;
Aby usunąć perspektywy stosujemy polecenie:
drop view nazwa_perspektywy;
Licznik – jest obiektem, który automatycznie zwiększa swoją wartość po jego każdorazowym odczycie. Liczniki
są używane zwykle do generowania unikalnych identyfikatorów wierszy. Licznik definiujemy poleceniem:
create sequence [nazwa_użytkownika] nazwa_licznika
[increment by liczba]
[start with wartość_początkowa]
[maxvalue wartość]
[cycle/nocycle];
nazwa_użytkownika – jest opcjonalnym parametrem określającym użytkownika, który go utworzył.
increment by – jest opcjonalnym parametrem określającym wartość o jaką będzie zwiększany licznik po każdym
odczycie.
start with – jest opcjonalnym parametrem określającym początkową wartość licznika
cycle – powrót do wartości początkowej po osiągnięciu maksymalnej wartości maxvalue. Domyślnie licznik nie
jest cykliczny.
nextval – odczyt nowej wartości z licznika;
curval – odczyt bieżącej wartości z licznika;
Przykład 7
create sequence licznik
increment by 1
start with 1
maxvalue 100
cycle;