Professional Documents
Culture Documents
Spis treści
1 DML - modyfikacja 1
3 Dodatkowe obiekty 14
5 Źródła 17
1 DML - modyfikacja
Polecenie UPDATE
Polecenie UPDATE
służy do aktualizacji zawartości wierszy tabel. W klauzuli SET wymieniamy atrybuty,
których wartości będą zmieniane. Opcjonalna klauzula WHERE wyznacza kryterium, ja-
kie muszą spełnić wiersze tabeli aby podlegać zmianie. Brak ograniczającego warunku
oznacza, że wszystkie wiersze będą zmienione.
Składnia:
UPDATE {tabela | perspektywa}
SET {{atrybut = wartosc | DEFAULT | NULL | (SELECT...)},
{atrybut = wartosc | DEFAULT | NULL | (SELECT...)},
...}
[WHERE predykat];
Przykłady:
UPDATE pracownicy
SET placa = placa * 1.1;
UPDATE pracownicy
SET placa = placa * 1.1
WHERE nr_akt IN
(SELECT kierownik FROM pracownicy);
Polecenie INSERT
Polecenie INSERT
pozwala wstawiać do tabeli nowe wiersze. Opcjonalnie można określić listę uzupełnianych
atrybutów, w przeciwnym razie należy wypełnić wszystkie. Klauzula VALUES określa war-
tości jakie będą przypisane atrybutom. Wiersz można wypełnić wartościami zwróconymi
przez podzapytanie.
Składnia:
1
INSERT INTO {tabela | perspektywa | (SELECT...)}
[(atrybut1 [,...] )]
{DEFAULT VALUES |
VALUES (wartosc1 [,...]) |
SELECT... };
Przykłady:
Tworzenie skryptu
2
INSERT wielowierszowy
• Użyj INSERT ... SELECT celem wstawienia wielu wierszy do wielu tabel
• typy:
– bezwarunkowy INSERT
– warunkowy INSERT ALL
– warunkowy INSERT FIRST
– “obrotowy” INSERT
INSERT [conditional_insert_clause]
[insert_into_clause values_clause] (SELECT...)
Składnia conditional_insert_clause:
[ALL|FIRST]
[WHEN condition THEN] [insert_into_clause
values_clause]
[ELSE] [insert_into_clause values_clause]
bezwarunkowy INSERT
INSERT ALL
INTO historia_plac VALUES (prac_id, datazatr, placapod)
INTO historia_kier VALUES (prac_id, kier_id, placapod)
SELECT nr_akt prac_id, data_zatr datazatr,
placa placa_pod, kierownik kier_id
FROM pracownicy
WHERE nr_akt > 200;
INSERT ALL
WHEN datazatr < To_date('01-01-1995','DD-MM-YYYY') THEN
INTO historia_prac VALUES (prac_id, datazatr, placapod)
WHEN prow IS NOT NULL THEN
INTO historia_plac VALUES (prac_id, placapod, prow)
SELECT nr_akt prac_id, data_zatr datazatr,
placa placa_pod, prowizja prow
FROM pracownicy;
3
warunkowy INSERT FIRST
INSERT FIRST
WHEN placa < 1900 THEN
INTO niskieplace VALUES (nr_akt, nazwisko, placa)
WHEN placa BETWEEN 1900 AND 4000 THEN
INTO srednieplace VALUES (nr_akt, nazwisko, placa)
ELSE
INTO wysokieplace VALUES (nr_akt, nazwisko, placa)
SELECT nr_akt, nazwisko, placa
FROM pracownicy;
obrotowy INSERT
Każda krotka relacji wejściowej jest transformowana (“obracana”) tak by utworzyć
wiele wierszy wyjściowych - szczególny przykład operacji bezwarunkowej. Instrukcja przy-
datna przy transformacji obiektowo-relacyjnej.
INSERT ALL
INTO place VALUES (nr_akt, id_tyg, pl_pon)
INTO place VALUES (nr_akt, id_tyg, pl_wt)
INTO place VALUES (nr_akt, id_tyg, pl_sr)
INTO place VALUES (nr_akt, id_tyg, pl_czw)
INTO place VALUES (nr_akt, id_tyg, pl_pt)
INTO place VALUES (nr_akt, id_tyg, pl_nad)
SELECT nr_akt, id_tyg, pl_pon, pl_wt,
pl_sr, pl_czw, pl_pt, pl_nad
FROM place_tygodniowe;
Polecenie DELETE
Polecenie DELETE
usuwa wiersze ze wskazanej tabeli, zawiera opcjonalną klauzule WHERE ograniczającą liczbę
usuniętych wierszy do tych, które spełniają zadany warunek.
Składnia:
Przykłady:
Polecenie MERGE
Polecenie MERGE
polecenie umożliwiające wykonanie warunkowej modyfikacji, wstawienia lub kasowania
danych. Pozwala uniknąć oddzielnych modyfikacji, podwyższa wydajność, ułatwia złożone
modyfikacje.
Składnia:
MERGE INTO table_name table_alias
USING (table|view|subquery) alias
ON (join condition)
WHEN MATCHED THEN
4
UPDATE SET
atr1 = val1 [,atr2 = val2 [,...]]
DELETE ...
WHEN NOT MATCHED THEN
INSERT ...;
SQL DDL
Dla relacyjnych baz danych narzędziem fizycznej realizacji będzie część SQL’a nazywa-
na DDL (ang. Data Definition Language) zawierająca niezbędne polecenia do tworzenia
(CREATE), usuwania (DROP) i modyfikacji (ALTER) struktur danych. Nigdy nie należy mylić
DML DDL
INSERT CREATE
UPDATE ALTER
DELETE DROP
5
Np.:
CREATE TABLE mieszkancy (
PESEL NUMBER(11),
nazwisko VARCHAR2(30),
imiona VARCHAR2(30),
data_zameldowania DATE DEFAULT CURRENT_DATE
);
6
CREATE TABLE - własności fizyczne
{ segment_attributes_clause [ table_compression ]
| ORGANIZATION
{ HEAP [ segment_attributes_clause ]
[ table_compression ]
| INDEX [ segment_attributes_clause ]
index_org_table_clause
| EXTERNAL external_table_clause
}
| CLUSTER cluster (column [, column ]...)
}
[ column_properties ]
[ table_partitioning_clauses ]
[ CACHE | NOCACHE ]
[ parallel_clause ]
[ ROWDEPENDENCIES | NOROWDEPENDENCIES ]
[ MONITORING | NOMONITORING]
[ enable_disable_clause ]...
[ row_movement_clause ]
[ flashback_archive_clause ]
[ AS subquery ]
7
)
PARTITION BY LIST (nls) (
PARTITION azja VALUES ('CHINY', 'TAJLANDIA'),
PARTITION europa VALUES ('NIEMCY', 'WLOCHY'),
PARTITION zachod VALUES ('USA'),
PARTITION wschod VALUES ('ROSJA'),
PARTITION reszta VALUES (DEFAULT)
);
DROP TABLE
Usuwanie tabeli:
Polecenie TRUNCATE
Polecenie TRUNCATE
usuwa wszystkie krotki tabeli pozostawiając strukturę nienaruszoną.
Składnia:
8
2.2 Więzy integralności
Definiowanie ograniczeń
Sposoby definicji ograniczeń:
• ograniczenia kolumny - definiowane “inline” lub “out of line” (za wyjatkiem NOT NULL)
• ograniczenia tworzone w trakcie tworzenia struktury tabeli (“inline” lub “out of line”)
Typy ograniczeń
Typy ograniczeń:
CONSTRAINT “inline”
Definicja ograniczeń “inline”:
CREATE TABLE nazwa_tabeli (
kol1 typ[(rozmiar)]
[DEFAULT wyrazenie1][SORT]
[[CONSTRAINT nazwa_ogr_kolumny] {
[NOT] NULL
| UNIQUE
| PRIMARY KEY
| REFERENCES tabela(kol1 [, kol2]...)
[ON DELETE { CASCADE | SET NULL }]
| CHECK (warunek_logiczny)
} [DISABLE|ENABLE]
[USING INDEX { [schemat.]indeks
| (create_index_statement)
| wlasnosci_indeksu
}
]], ... );
9
CONSTRAINT “out of line”
Definicja ograniczeń “out of line”:
CREATE TABLE nazwa_tabeli (
...,
[[CONSTRAINT nazwa_ogr_tabeli] {
UNIQUE ( kol1 [, kol2]... )
| PRIMARY KEY ( kol1 [, kol2]...)
| FOREIGN KEY ( kol1 [, kol2]...)
REFERENCES tabela(kol1 [,kol2]...)
[ON DELETE { CASCADE | SET NULL }]
| CHECK (warunek_logiczny)
} [DISABLE|ENABLE]
[USING INDEX { [schemat.]indeks
| (create_index_statement)
| wlasnosci_indeksu
}], ...);
NOT NULL
NOT NULL
- dla kolumn o wartościach obowiązkowych.
CHECK
CHECK
- wartości kolumny dla każdego wiersza spełnią zadany warunek (warunek nie może za-
wierać podzapytań, ani funkcji zmiennych w czasie).
CREATE TABLE osoby(
nazwisko VARCHAR2(30) NOT NULL,
data_urodzenia DATE CONSTRAINT data_nn NOT NULL,
plec CHAR(1) CHECK (plec IN ('K','M')),
wiek NUMBER(3),
...,
CONSTRAINT wiek_ch CHECK (wiek BETWEEN 0 AND 120)
);
UNIQUE
UNIQUE
- wartości w kolumnie będą niepowtarzalne.
CREATE TABLE osoby(
pesel NUMBER(11)
CONSTRAINT pesel_u UNIQUE,
nip NUMBER(10),
nazwisko VARCHAR2(30) NOT NULL,
data_urodzenia DATE CONSTRAINT data_nn NOT NULL,
...,
UNIQUE(nip)
);
10
PRIMARY KEY I
PRIMARY KEY
- więzy klucza głównego oznaczają, że kolumna/kolumny przyjmą wartości jednoznaczne i nie-
puste. Dla klucza głównego tworzony jest automatycznie indeks.
PRIMARY KEY II
CREATE TABLE mieszkancy(
pesel NUMBER(11)
CONSTRAINT mieszy_pk PRIMARY KEY,
nazwisko VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu VARCHAR2(20)
);
CREATE TABLE mieszkancy(
pesel NUMBER(11),
nazwisko VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu VARCHAR2(20),
PRIMARY KEY (pesel)
);
CREATE TABLE mieszkancy(
pesel NUMBER(11),
nazwisko VARCHAR2(30) NOT NULL,
data_urodzenia DATE NOT NULL,
nr_dokumentu VARCHAR2(20),
CONSTRAINT mieszy_pk PRIMARY KEY (pesel)
);
FOREIGN KEY I
FOREIGN KEY
- więzy klucza obcego - wartości z kolumn klucza istnieją we wcześniej zdefiniowanym kluczu
kandydującym innej lub tej samej tabeli (może przyjąć wartość pustą).
11
CREATE TABLE rachunki(
nr_rachunku NUMBER(10) PRIMARY KEY,
kwota NUMBER(6,2) NOT NULL,
termin DATE,
odsetki NUMBER(6,2),
id_mieszkania NUMBER(10) REFERENCES mieszkania(id_mieszkania)
);
FOREIGN KEY II
12
• DROP - usunięcie kolumn lub ograniczeń
• RENAME - zmiana nazwy tabeli, kolumny lub ograniczeń
• ENABLE - włączenie ograniczenia
• DISABLE - wyłączenie ograniczenia
• i wiele innych...
Np.:
ALTER TABLE mieszkancy ADD
CONSTRAINT nr_dok_u UNIQUE (nr_dokumentu);
13
3 Dodatkowe obiekty
Indeksy
Indeks może być tworzony jawnie lub niejawnie. Jawnie jest realizowany przez użyt-
kownika poleceniem CREATE INDEX:
CREATE [UNIQUE | BITMAP] INDEX nazwa_indeksu ON
nazwa_tabeli (kol1 [ASC|DESC] [, kol2 [ASC|DESC]]);
niejawnie może być automatycznie zakładany przez system, np. dla klucza głównego.
Modyfikacja indeksu:
Usuwanie indeksów:
DROP INDEX nazwa;
Klastry I
Tworzenie kontenera na tabele odbywa się za pomocą polecenia CREATE CLUSTER:
CREATE CLUSTER [ schema. ] cluster
(column datatype [ SORT ]
[, column datatype [ SORT ] ]...
)
[ { physical_attributes_clause
| SIZE size_clause
| TABLESPACE tablespace
| { INDEX
| [ SINGLE TABLE ]
HASHKEYS integer [ HASH IS expr ]
}
}...
]
[ parallel_clause ]
[ NOROWDEPENDENCIES | ROWDEPENDENCIES ]
[ CACHE | NOCACHE ] ;
Klastry II
Np.:
CREATE CLUSTER prac_dzialu_cl
(nazwa VARCHAR2(20), id_dzialu NUMBER(2),
nazwisko VARCHAR2(30))
SIZE 500
TABLESPACE users;
Perspektywy
• widoki, wirtualne tabele - reprezentujące wybraną zawartość tabel lub innych per-
spektyw
• wyrażenia nie będące kolumnami, z klauzuli SELECT podzapytania, muszą być za-
opatrzone w aliasy lub perspektywa musi przewidzieć nowe nazewnictwo wszystkich
kolumn wyniku podzapytania
14
• istnieje możliwość modyfikacji danych za pośrednictwem perspektyw pod warun-
kiem, że polecenie będzie dla systemu jednoznaczne (uniemożliwiają to grupowania,
funkcje, podzapytania, porządkowanie, DISTINCT, wyrażenia złożone, brak klucza
głównego i atrybutów obowiązkowych, brak uprawnień, ograniczenie WITH READ ONLY)
CREATE VIEW
Perspektywy tworzy się za pomocą polecenia CREATE VIEW:
CREATE [OR REPLACE]
[[NO] FORCE] VIEW [schema.] view
[ ( { alias [ inline_constraint... ]
| out_of_line_constraint
}
[, { alias [ inline_constraint...]
| out_of_line_constraint
}
]
)
| object_view_clause
| XMLType_view_clause
]
AS subquery [WITH CHECK OPTION|WITH READ ONLY];
Sekwencje
Sekwencje tworzy się za pomocą polecenia CREATE SEQUENCE:
CREATE SEQUENCE nazwa
[START WITH st]
[INCREMENT BY i]
[MAXVALUE max]
[MINVALUE min]
[CYCLE|NOCYCLE]
[CACHE c|NOCACHE];
• st min i st ¬ max
15
• c 2, c < (Ceil(max − min)/Abs(i)), domyślnie c = 20
Synonimy
Synonimy
to alternatywna nazwa dla tabel, perspektyw, sekwencji, operatorów, procedur, funkcji,
pakietów, materializowanych perspektyw, obiektów Java, typów użytkownika, lub innych
synonimów. Synonim staje się niepoprawny jeżeli obiekt na który wskazuje został zmie-
niony lub zniszczony.
Synonimy tworzy się za pomocą polecenia CREATE SYNONYM:
CREATE [PUBLIC] SYNONYM nazwa FOR [schemat.]nazwa_ob;
• sekwencji: %_SEQUENCES
• synonimów: %_SYNONYMS
16
5 Źródła
Źródła
W wykładzie wykorzystano materiały:
• http://download.oracle.com/docs/cd/B10501_01/nav/sql_keywords.htm?remark=
homepage
• http://wazniak.mimuw.edu.pl/index.php?title=Bazy_danych
17