SQL TECHNOLOGIE BAZ DANYCH Wykład 5: Język DDL i DML. SQL (ang. StructuredQueryLanguage) strukturalny język zapytań używany do tworzenia, modyfikowania relacyjnych baz danych oraz do umieszczania i pobierania danych z baz danych. Małgorzata Krętowska Wydział Informatyki PB Typy zapytań SQL: DML (ang. Data Manipulation Language) język manipulowania danymi DDL (ang. Data DefinitionLanguage) język definiowania danych DCL (ang. Data Control Language) język kontroli na danymi 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: 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ń Najważniejsze polecenia: 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). 3 4
DCL 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 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: 5 6 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)); 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. 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" date do reprezentacji dat i czasu long rozszerzenie typu varchar2, które pozwala przechowywać napisy do 2GB 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]...); 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...); 7 8
Klauzula CONSTRAINT Typy ograniczeń [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 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. 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. 9 10 Przykład PRIMARY KEY W tabeli pracownik żądamy, aby nazwiska były wpisywane wielkimi literami 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 ) ); 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,...).. 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, ); Ustalić klucz w tabeli zlecenie. CREATE TABLE zlecenie ( definicje kolumn CONSTRAINT zlecenie_pk PRIMARY KEY(nr_projektu, id_pracownika)); 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,...).. 13 14 Przykład FOREIGN KEY W tabeli departament nazwy departamentów nie są kluczem głównym ale też nie powinny się powtarzać. CREATE TABLE departament ( nazwa NUMBER(4) NOT NULL CONSTRAINT d_nazwa_u UNIQUE, ); 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. Jeżeli klucz obcy stanowi jedna kolumna:... Kolumna typ CONSTRAINT nazwa_ogr REFERENCES nazwa tabeli (kolumna1), 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: 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ąć 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. Utworzyć klucze obce w tabeli pracownik. Jakie to będą klucze? 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 ); 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. 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 19 20
Przykład Utworzyć tabelę zawierającą nazwisko, pensję i grupę zaszeregowania każdego pracownika. 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; Zmiana definicji tabeli Dodawanie kolumn Zmiana definicji tabeli: ALTER TABLE Dodawanie kolumn: ALTER TABLE nazwa_tabeli ADD (kolumna typ [(rozmiar)], kolumna typ [(rozmiar)],...); 21 22 Zmiana definicji tabeli Zarządzanie więzami integralności Dodawanie więzów integralności: ALTER TABLE nazwa_tabeli ADD (CONSTRAINT nazwa_ogr [warunek])...); 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; Modyfikacja definicji kolumny ALTER TABLE nazwa_tabeli MODIFY (kolumna typ [(rozmiar)] [NULL NOT NULL]); 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 23 24
Usuwanie tabel Zmiana nazwy tabeli DROP TABLE nazwa_tabeli; 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. RENAME stara_nazwa TO nowa_nazwa 25 26 Wstawianie wierszy UPDATE 27 Polecenie wstawiania nowych wierszy do tabeli: INSERT INTO nazwa_tabeli [(lista_kolumn)] VALUES (lista_wartości);) Wstawianie wierszy wybieranych w zapytaniu: INSERT INTO nazwa_tabeli [(lista_kolumn)] SELECT lista_wyrażeń FROM; 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) 28 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] Przykład: Zmienić dane w wierszu pracownika Nazwisko2: UPDATE pracownik SET job= SPRZEDAWCA, data_zatrudnienia=trunc(sysdate), pensja=pensja*1.1 WHERE nazwisko= Nazwisko2 ;
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. 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); Polecenie DELETE służy do usuwania jednego lub wielu wierszy z tabeli. DELETE [FROM] tabela [WHERE warunek]; warunek WHERE określa, które wiersze należy usunąć jeżeli pominiemy klauzulę WHERE wszystkie wiersze zostaną pominięte. 29 30