(Microsoft PowerPoint - TBD_ddl_dml [tryb zgodno\234ci])

Transkrypt

(Microsoft PowerPoint - TBD_ddl_dml [tryb zgodno\234ci])
SQL
TECHNOLOGIE BAZ DANYCH
Wykład 5: Język DDL i DML.
SQL (ang. Structured Query Language) – strukturalny język
zapytań używany do tworzenia, modyfikowania relacyjnych
baz danych oraz do umieszczania i pobierania danych z baz
danych.
Typy zapytań SQL:
DML (ang. Data Manipulation Language) – język manipulowania danymi
DDL (ang. Data Definition Language) – język definiowania danych
DCL (ang. Data Control Language) – język kontroli na danymi
Małgorzata Krętowska
Wydział Informatyki PB
2
DML
DDL
DML (ang. Data Manipulation Language) służy do wykonywania
operacji na danych – do ich umieszczania w bazie, usuwania,
przeglądania oraz dokonywania zmian.
DDL (ang. Data Definition Language) pozwala na operowanie
na strukturach, w których dane są przechowywane – czyli np.
dodawać, zmieniać i kasować tabele lub bazy.
Najważniejsze polecenia:
Najważniejsze polecenia:
INSERT – umieszczenie danych w bazie,
UPDATE – zmiana danych,
DELETE – usunięcie danych z bazy,
SELECT – wydobywanie danych (czasem umieszczany w oddzielnym
typie zapytań DQL (ang. Data Query Language) język formułowania
zapytań
3
CREATE (np. CREATE TABLE, CREATE DATABASE, ...) – utworzenie bazy,
tabeli, indeksu itp.,
DROP (np. DROP TABLE, DROP DATABASE, ...) – usuwanie,
ALTER (np. ALTER TABLE ADD COLUMN ...) – zmiana struktury (dodanie
kolumny do tabeli, zmiana typu danych w kolumnie tabeli).
4
DCL
Tworzenie tabel
CREATE TABLE nazwa_tabeli
(kolumna1 typ_danych(rozmiar) [DEFAULT wartość_domyślna]
[NULL|NOT NULL] [CONSTRAINT nazwa_ogr] ograniczenie_atr],
kolumna2 typ_danych(rozmiar) [DEFAULT wartość_domyślna]
[NULL|NOT NULL] [CONSTRAINT nazwa_ogr] ograniczenie_atr
...);
Przykład:
DCL (ang. Data Control Language) ma zastosowanie do
nadawania uprawnień do obiektów bazodanowych.
Najważniejsze polecenia:
GRANT - służy do nadawania uprawnień do pojedynczych obiektów lub
globalnie konkretnemu użytkownikowi
REVOKE – służy do odbierania wskazanych uprawnień konkretnemu
użytkownikowi
CREATE TABLE Departament
(nr_departamentu number(2),
nazwa
varchar2(12),
lokalizacja
varchar(12));
CREATE TABLE Departament
(nr_departamentu number(2) not null,
nazwa
varchar2(12),
lokalizacja
varchar(12));
5
6
Typy kolumn
Klauzula CONSTRAINT
char(rozmiar) - ciąg znaków stałej długości. Rozmiar (liczba znaków)
określany w nawiasach o długości nie większej niż 255 bajtów.
varchar2(rozmiar) - ciąg znaków zmiennej długości. Rozmiar (liczba
znaków, max 2000, domyślnie 1) określany jest w nawiasach.
Służy do definiowania innych niż NOT NULL
warunków integralności
CREATE TABLE nazwa_tabeli
(kolumna1 typ_danych(rozmiar) [DEFAULT wartość_domyślna] [NULL|NOT NULL]
[CONSTRAINT nazwa_ogr] ograniczenie_atr]...);
number(rozmiar) - typ numeryczny. Rozmiar określa liczbę cyfr w kolumnie.
number(rozmiar,d) - typ numeryczny. Rozmiar określa liczbę znaków w
kolumnie, "d" określa maksymalną liczbę cyfr na prawo od kropki
dziesiętnej. Skala "d" nie może być większa od precyzji "rozmiar"
CREATE TABLE nazwa_tabeli
(kolumna1 typ_danych(rozmiar) [DEFAULT wartość_domyślna] [NULL|NOT NULL]
....
CONSTRAINT nazwa_ogr typ_ograniczenia
CONSTRAINT nazwa_ogr typ_ograniczenia ...);
date – do reprezentacji dat i czasu
long – rozszerzenie typu varchar2, które pozwala przechowywać napisy
do 2GB
7
8
Klauzula CONSTRAINT
Typy ograniczeń
Ograniczenie CHECK - określa warunek, jaki musi spełniać
wartość w kolumnie każdego wiersza tabeli. Jeśli więzy są
definiowane po definicji wszystkich kolumn, warunek może
dotyczyć kilku kolumn, jeśli na poziomie kolumny - tylko tej
kolumny.
[CONSTRAINT nazwa_ogr] typ_ograniczenia
Nazwa_ograniczenia - identyfikator warunku
integralności, występujący np. w komunikatach o
błędach spowodowanych przez niedozwoloną
operację naruszającą to ograniczenia
Typ_ograniczenia: CHECK, PRIMARY KEY, UNIQUE,
FOREIGN KEY
Ograniczenie - dodatkowe informacje, jego postać
zależy od typu ograniczenia
9
CONSTARAINT CHECK (warunek logiczny)
Warunek logiczny musi być prosty - niedopuszczalne są
podzapytania, ani funkcje, których wartość zależy od
okoliczności wywołania np. SYSDATE. Można używać OR i
AND.
10
Przykład
PRIMARY KEY
W tabeli pracownik żądamy, aby nazwiska były wpisywane
wielkimi literami
Definiuje klucz główny tabeli (wymusza automatycznie
warunek NOT NULL). Jeżeli klucz główny stanowi pojedyncza
kolumna wygodnie jest zapisać ten warunek w składni przy
kolumnie:
...
Kolumna typ CONSTRAINT nazwa_ogr PRIMARY KEY,
....
Jeżeli klucz składa się z dwóch lub więcej kolumn, wtedy
należy określić go w składni po kolumnach:
.....
CONSTRAINT nazwa_ogr PRIMARY KEY (kol1,kol2,...)
......
CREATE TABLE pracownik
(....
nazwisko varchar2(10) CONSTRAINT wielkie_litery CHECK
(nazwisko=UPPER(nazwisko))
...);
Prowizja osób innych niż sprzedawca musi być NULL.
CREATE TABLE pracownik
(....
Definicje wszystkich kolumn,
CONSTRAINT stanowisko_prowizja_spr (prowizja IS NULL OR
stanowisko=‘SPRZEDAWCA’) );
11
12
Przykład
UNIQUE
W tabeli pracownik kluczem jest numer pracownika: id_pracownika
CREATE TABLE pracownik
(id_pracownika NUMBER(4) CONSTARINT pracownik_pk PRIMARY KEY, ....);
lub
CREATE TABLE pracownik
(id_pracownika NUMBER(4) PRIMARY KEY,
....);
Definiuje klucz unikalny tabeli. Klucz unikalny pełni podobną
rolę co klucz główny, z tym, że nie wymusza automatycznie
warunku NOT NULL na należących do niego kolumnach
Klucz unikalny składający się z jednej kolumny:
...
Kolumna typ CONSTRAINT nazwa_ogr UNIQUE,
....
Klucz dla dwóch lub większej liczby kolumn:
.....
CONSTARINT nazwa_ogr UNIQUE (kol1,kol2,...)
......
Ustalić klucz w tabeli zlecenie.
CREATE TABLE zlecenie
(....
definicje kolumn
CONSTRAINT zlecenie_pk PRIMARY KEY(nr_projektu, id_pracownika));
13
14
Przykład
FOREIGN KEY
Definiuje klucz obcy, reprezentujący związek z inną tabelą. Powoduje, że
wartości wskazanych kolumn mogą przyjmować jedynie wartości klucza
głównego (lub unikalnego) pewnej (najczęściej innej) tabeli.
W tabeli departament nazwy departamentów nie są kluczem
głównym ale też nie powinny się powtarzać.
Jeżeli klucz obcy stanowi jedna kolumna:
...
Kolumna typ CONSTRAINT nazwa_ogr REFERENCES nazwa tabeli
(kolumna1),
....
CREATE TABLE departament
(....
nazwa NUMBER(4) NOT NULL CONSTRAINT d_nazwa_u UNIQUE,
....);
Jeżeli klucz obcy zbudowany jest z większej liczby kolumn
.....
CONSTARINT nazwa_ogr
FOREIGN KEY (lista_kolumn1)
REFERENCES nazwa_tabeli (lista_kolumn2)
......
15
16
FOREIGN KEY
Przykład
Aby możliwe było zdefiniowanie klucza obcego:
Utworzyć klucze obce w tabeli pracownik. Jakie to
będą klucze?
Tabela, do której odnosi się klucz musi być utworzona
na wskazanym zestawie kolumn musi być utworzony klucz główny lub klucz unikalny
jeśli w tabeli obcej odwołujemy się do kolumn z klucza głównego, listę kolumn z
tabeli obcej można pominąć
CREATE TABLE pracownik(
nr_pracownika number (4) PRIMARY KEY,
nazwisko
varchar2(10),
stanowisko
varchar2(9),
kierownik
number(4) CONSTARAINT pracownik_fk_pr
REFERENCES pracownik (nr_pracownika),
data_zatrudnienia date,
pensja
number(7,2),
prowizja
number (7,2),
nr_departamentu number(2) NOT NULL CONSTRAINT pracownik_fk
REFERENCES departament ON DELETE CASCADE
);
Własności kluczy obcych
w tabeli z kluczem obcym nie można wstawić wiersza, którego wartość w kolumnie z
klucza obcego nie ma odpowiedników w tabeli obcej,
w tabeli z kluczem obcym nie można zmodyfikować wiersza, tak aby jego wartość
kolumnie z klucza obcego nie miała odpowiedników w tabeli obcej,
z tabeli obcej nie można usunąć wiersza, do którego odnoszą się jakiekolwiek
wiersze z tabeli z kluczem obcym - wstawienie dyrektywy ON DELETE CASCADE
spowoduje, że przy usuwaniu wiersza z tabeli będą usuwane wszystkie odwołujące
się do niego wiersze z tabel z kluczem obcym.
17
18
Klauzula DEFAULT
Tworzenie tabeli przez zapytanie
Służy do wskazania jaka wartość ma być wstawiona w polu
kolumny jeśli w poleceniu wstawiania nie określono wartości tej
kolumny.
...
Kolumna typ DEFAULT wyrażenie,
....
Podane wyrażenie musi być zgodne z typem kolumny.
Wyrażenie musi być proste, nie mogą występować
podzapytania
Dozwolone są funkcje typu SYSDATE.
19
CREATE TABLE nazwa_tabeli
[nazwa_kolumny [NULL/NOT_NULL],....]
AS SELECT zapytanie
nowa tabela składa się z kolumn oraz wierszy określonych
poleceniem SELECT
jeśli pozycje występujące na liście SELECT mają prawidłowe
nazwy (nie są to wyrażenia) lub mają aliasy, lista nazw kolumn
nowej tabeli może zostać pominięta
jeśli podana jest lista nazw nowej tabeli , liczba pozycji musi
się pokrywać z liczbą pozycji, występujących po poleceniu
SELECT
20
Zmiana definicji tabeli
Dodawanie kolumn
Przykład
Utworzyć tabelę zawierającą nazwisko, pensję i grupę
zaszeregowania każdego pracownika.
Zmiana definicji tabeli: ALTER TABLE
Dodawanie kolumn:
ALTER TABLE nazwa_tabeli
ADD (kolumna typ [(rozmiar)],
kolumna typ [(rozmiar)],
...);
CREATE TABLE pracownik_pensja
(nazwisko, pensja, stopien)
AS
SELECT nazwisko, zarobki, nr_przedziału
FROM pracownik, poziom_zarobkow
WHERE pensja between dolna_granica and gorna_granica;
21
22
Zmiana definicji tabeli
Zarządzanie więzami integralności
Modyfikacja definicji kolumny
ALTER TABLE nazwa_tabeli
MODIFY (kolumna typ [(rozmiar)] [NULL |NOT NULL]);
Dodawanie więzów integralności:
ALTER TABLE nazwa_tabeli
ADD (CONSTRAINT nazwa_ogr [warunek])
...);
Nie można wykonać następujących modyfikacji:
kolumny, w której występują wartości NULL nie można
przedefiniować z NULL na NOT NULL
nie można dodać nowej kolumny o własności NOT NULL
(chyba, że tabela jest pusta). Dopiero po wpisaniu wartości
kolumny można ją zmodyfikować.
Nie jest możliwe zmniejszenie rozmiaru kolumny lub zmiany
jej typu, chyba, że kolumna jest pusta
nie jest możliwa zmiana typu kolumny
Włączanie i wyłączanie sprawdzanie więzów
integralności:
ALTER TABLE nazwa_tabeli ENABLE CONSTRAINT nazwa_ogr;
ALTER TABLE nazwa_tabeli DISABLE CONSTRAINT nazwa_ogr;
Usuwanie warunku integralności:
ALTER TABLE nazwa_tabeli DROP CONSTRAINT nazwa_ogr;
23
24
Usuwanie tabel
Zmiana nazwy tabeli
DROP TABLE nazwa_tabeli;
RENAME stara_nazwa TO nowa_nazwa
usunięcie tabeli powoduje utratę wszystkich danych zawartych
w tabeli oraz wszystkich indeksów
tabela może zostać usunięta przez jej właściciela albo
administratora bazy danych
jeżeli istnieją tabele z kluczami obcymi odwołującymi się do
usuwanej tabeli, usuwanie się nie powiedzie, chyba , że na
końcu dodamy dyrektywę CASCADE CONSTRAINS. Wtedy
zostaną usunięte odpowiednie definicje kluczy obcych w innych
tabelach.
25
26
Wstawianie wierszy
UPDATE
Polecenie wstawiania nowych wierszy do tabeli:
INSERT INTO nazwa_tabeli [(lista_kolumn)]
VALUES (lista_wartości);)
Polecenie UPDATE służy do zmiany wartości w istniejących wierszach:
UPDATE tabela [alias]
SET kolumna= {wyrażenie | podzapytanie }
[, kolumna= {wyrażenie | podzapytanie }]...
[WHERE warunek]
Wstawianie wierszy wybieranych w zapytaniu:
INSERT INTO nazwa_tabeli [(lista_kolumn)]
SELECT lista_wyrażeń FROM....;
Przykład:
Zmienić dane w wierszu pracownika Nazwisko2:
Parametryzowane polecenie INSERT
INSERT INTO nazwa_tabeli [(lista_kolumn)]
VALUES(&wartość1, &wartość2,...)
Przykład:
INSERT INTO dept (deptno, dname, loc)
VALUES (&d_numer, &d_nazwa, &d_miasto)
27
UPDATE pracownik
SET job=‘SPRZEDAWCA’, data_zatrudnienia=TRUNC(SYSDATE),
pensja=pensja*1.1
WHERE nazwisko=‘Nazwisko2’;
28
Przykład
DELETE
Załóżmy, że mamy informacje o dodatkowych prowizjach dla
części pracowników. Są one umieszczone w tabeli
prowizje(id_pracownika, prowizja). Dokonać aktualizacji tabeli
Pracownik na podstawie informacji zawartej w tabeli prowizje.
Polecenie DELETE służy do usuwania jednego lub wielu wierszy
z tabeli.
DELETE [FROM] tabela
[WHERE warunek];
UPDATE pracownik p
SET prowizja=(select c.prowizja+p.prowizja
from prowizje c
where c.id_pracownika = p.id_pracownika)
WHERE id_pracownika in (select id_pracownika from
prowizje);
29
warunek WHERE określa, które wiersze należy usunąć
jeżeli pominiemy klauzulę WHERE wszystkie wiersze zostaną
pominięte.
30