Bazy danych - Instytut Informatyki UwB

Transkrypt

Bazy danych - Instytut Informatyki UwB
2010-10-21
PLAN WYKŁADU
Definicja, historia, cechy SQL
Standardy SQL
 Formy i podzbiory SQL
 Typy danych
 Składnia
 DML
 DDL
 DCL
 Perspektywy
 Definicja dziedziny, asercja


BAZY DANYCH
Wykład 3,4
dr inż. Agnieszka Bołtuć
DEFINICJA SQL
HISTORIA SQL
SQL (ang. Structured Query Language) - strukturalny
język zapytań używany do tworzenia, modyfikowania
baz danych oraz do umieszczania i pobierania
danych z baz danych.
 Strukturalny język zapytań jest zbiorem komend
używanych do wprowadzania, modyfikowania i
przeglądania zawartości relacyjnych baz danych,
 Język SQL pełni trzy główne funkcje: tworzenie bazy
i definiowanie jej struktur, wykonywanie zapytań na
bazie w celu uzyskania danych niezbędnych do
wygenerowania odpowiedzi oraz kontrolowanie
bezpieczeństwa bazy danych.

Historia SQL sięga początku lat 70-tych, gdy w IBM
powstał język Sequel,

Pierwszy SZBD wykorzystujący Sequel powstał w
1973 roku w firmie IBM i nazywał się System R,

Pierwsza komercyjna wersja SZBD (opracowana
dla wojska, CIA i agencji rządowych) została
wypuszczona przez firmę Oracle w 1977 roku;
wykorzystywała język SQL.

1
2010-10-21
STANDARDY JĘZYKA SQL


W 1986 roku Amerykański Narodowy Instytut
Normalizacji (ANSI), a w 1987 Międzynarodowa
Organizacja Normalizacyjna (ISO) oficjalnie przyjęły
standard języka SQL,
Nadal jednak istnieją różnice w wersjach języka
SQL biorąc pod uwagę różnych producentów.
CECHY JĘZYKA SQL
jest językiem wysokiego poziomu (4GL),
 jest językiem deklaratywnym,
 jest językiem ustandaryzowanym,
 jest podjęzykiem danych,
 jest językiem interpretowanym,
 jest językiem zbliżonym konstrukcją do naturalnego
języka angielskiego,
 jest oparty na algebrze relacji,
 zawiera logikę trójwartościową.

STANDARDY JĘZYKA SQL
Rok
Nazwa
Zmiany
1986
SQL-86/SQL-87
Pierwsza publikacja standardu organizacji
ANSI i ISO
1989
SQL-89
Małe udoskonalenia w stosunku do
oryginału
1992
SQL-92/SQL2
Zasadnicze zmiany w stosunku do
oryginału (najbardziej popularny standard
do dziś)
1999
SQL-99/SQL3
Aktualizacja standardu z 1992 poprzez:
nowe sposoby selekcji, nowe reguły
integralności, pewne elementy struktury
obiektowej
2003
SQL-2003
Obsługa formatu XML i pól z
automatycznie generowanymi wartościami
2008
SQL-2008
WADY I ZALETY
Zalety:
 deklaratywny charakter,
 standaryzacja,
 przejrzystość, czytelność,
 dobre podstawy matematyczne,
Wady:
 nie przestrzeganie standardu przez dostawców,
 ograniczenie do danych atomowych.
2
2010-10-21
FORMY SQL

SQL interakcyjny (autonomiczny)

Statyczny kod SQL (Static SQL)
 Osadzony SQL (Embedded SQL)
 Język modułów

Dynamiczny kod SQL (Dynamic SQL)
TYPY DANYCH W STANDARDZIE ANSI (SQL-92)
CHARACTER(n), CHAR(n) - napis znakowy o stałej
długości n,
 CHARACTER VARYING(n), VARCHAR(n) – napis
znakowy o zmiennej długości, nie przekraczającej
podanego rozmiaru n,
 BIT(n) – ciąg bitów długości n, do danych graficznych i
dźwiękowych (usunięto w SQL-2003),
 BIT VARYING(n) - ciąg bitów zmiennej długości
(usunięto w SQL-2003),
 NUMERIC, NUMERIC(p,s), DECIMAL – typ dziesiętny,
liczby o ustalonej precyzji p i skali s,
 INTEGER, INT - typ całkowity,

PODZBIORY SQL

SQL DML (ang. Data Manipulation Language –
„język manipulacji danymi”) – SELECT, INSERT,
UPDATE, DELETE,

SQL DDL (ang. Data Definition Language – „język
definicji danych”) – CREATE, DROP, ALTER,

SQL DCL (ang. Data Control Language – „język
kontroli nad danymi”) – COMMIT, ROLLBACK, etc.
TYPY DANYCH W STANDARDZIE ANSI (SQL-92)










FLOAT, REAL – typ zmiennopozycyjny,
DATE - data w formacie: YYYY-MM-DD,
TIME - czas w formacie: HH:MM:SS,
TIMESTAMP - data wraz z czasem - znacznik czasu w
formacie: YYYY-MM-DD HH:MM:SS,
INTERVAL - przedział czasu,
LOB – duże obiekty binarne lub znakowe,
BLOB – dane binarne, podtyp LOB (dodano w SQL3),
CLOB – dane znakowe, podtyp LOB (dodano w SQL3),
XML - dane w języku XML (dodano w SQL3),
BOOLEN – wartości logiczne: true, false, unknown.
3
2010-10-21
TYPY DANYCH W RÓŻNYCH SZBD
w Oracle mamy number(p,s)
 w Oracle nie mamy typu TIME
 w Oracle mamy typ LONG – dokumenty tekstowe,
 w MySQL mamy YEAR- rok w formacie YYYY,
 w MS SQL Server mamy typ DATATIME, MONEY,
 etc.
KATEGORIE SKŁADNI

Identyfikatory – nazwy obiektów stworzonych
przez użytkownika lub proces systemowy,

Literały – wartości wprowadzone do systemu, nie
będące wartościami NULL,

Słowa kluczowe i zarezerwowane – słowa mające
specjalne znaczenie dla parsera SQL: nazwy
poleceń i funkcji.

IDENTYFIKATORY
LITERAŁY
Zasady tworzenia nazw (SQL3):

Każda wartość liczbowa, znakowa, łańcuchowa,
czasowa czy logiczna nie będąca identyfikatorem,

Dla typów liczbowych m.in.: 12, -134, 5.67, 3E2,
7E-2,

Dla typów znakowych i łańcuchowych: ‘most’,
‘tekst’,

Przy stosowaniu typów DATE: ‘2003-10-12’
Nie dłuższy niż 128 znaków,
Może zawierać cyfry, litery i symbole,
 Musi zaczynać się od litery (lub innego
dopuszczalnego symbolu)
 Nie może zawierać spacji ani innych znaków
specjalnych,
 Nie może być słowem kluczowym lub
zarezerwowanym,
 Istnieje identyfikator ograniczony (np. „rejestracja
samochodu:”), który może występować spacja.


4
2010-10-21
OPERATORY
OPERATORY

Arytmetyczne: +, -, *, /

Logiczne: NOT, AND, OR

Łączenia napisów: ||

Algebraiczne: UNION, UNION ALL, INTERSECT,

Porównań: =, <, >, <=, >=, <>

Przynależności do listy wartości: IN

SOME, ANY, ALL – „dla pewnego”, „dla każdego”

Przynależności do przedziału: BETWEEN/NOT

EXISTS, NOT EXISTS – sprawdzające czy
EXCEPT(MINUS)
BETWEEN

Wzorca w tekście: LIKE/NOT LIKE

Testujący NULL: IS NULL/IS NOT NULL
otrzymujemy pusty czy pełny zbiór wyników
HIERARCHIA OPERATORÓW
PRZYKŁADOWE FUNKCJE MATEMATYCZNE

()
/, *
 -, +
 =, >, <, >=, <=, <>
 NOT
 AND
 ALL, ANY, BETWEEN, IN, LIKE, OR, SOME



ABS(x) – wartość bezwględna x,
POWER(podstawa,wykładnik) – podnosi wartość
pierwszego argumentu do potęgi,
 SQRT(x) – pierwiastek kwadratowy,
 RAND() – generowanie liczby zmiennoprzecinkowej
z przedziału 0-1
 CEILING(x) – zaokrąglenie liczby do najbliższej
większej liczby całkowitej,
 FLOOR(x) – zaokrąglanie liczby do najbliższej
mniejszej liczby całkowitej,
 ROUND(x) - zaokrąglanie liczby do najbliższej
liczby całkowitej
5
2010-10-21
W YBRANE FUNKCJE PRZETWARZAJĄCE
ŁAŃCUCHY
SUBSTRING(łańcuch, początek, długość) – zwraca
określoną cześć łańcucha,
 UPPER(s), LOWER(s) – zmieniają wielkości
znaków w łańcuchu,
 REVERSE(s) – odwraca kolejność znaków w
łańcuchu,
 TRIM(s) – usuwa niepożądane znaki z początku lub
końca łańcucha,
 LENGTH(s) – wyznacza długość łańcucha,
W YBRANE FUNKCJE PRZETWARZAJĄCE DATY

SKŁADNIA POLECEŃ SQL






Klauzule (SELECT, FROM, etc.),
Wyrażenia,
Predykaty,
Wielkość liter w składni nie ma znaczenia,
„Białe” znaki są pomijane,
Kończymy średnikiem.
Wyrażenia w SQL:
 atrybuty,
 stałe liczbowe i łańcuchowe, konkatenacja łańcuchów,
 działania arytmetyczne,
 funkcje.
CURRENT_DATE(), SYSDATE(), GETDATE(),
NOW() ,etc. – bieżąca data lub data i godzina,
 DAY() – wydobywanie dnia z daty,
 MONTH() – wydobywanie miesiąca z daty,
 YEAR() – wydobywanie roku z daty,
 MONTH_BETWEEN(data1,data2) - ilość miesięcy
pomiędzy wyspecyfikowanymi datami,
 etc.

DML - SELECT

Służy do wydobywania danych z bazy,

Najprostsza postać instrukcji SELECT
SELECT [DISTINCT] wyrażenia
FROM nazwa_tabeli
[WHERE warunki];

Klauzule SELECT i FROM są obowiązkowe,
DISTINCT i WHERE opcjonalne,
6
2010-10-21
KLAUZULA SELECT
KLAUZULA FROM, WHERE

Określa jakie kolumny znajdą się w relacji wynikowej,
Słowo DISTINCT oznacza eliminację powtarzających
się wierszy,
 * oznacza wypisanie danych ze wszystkich kolumn
tabeli,



SELECT * FROM samochody;
SELECT rejestracja, marka FROM samochody;
SELECT DISTINCT marka, kolor FROM samochody;
FROM - określa tabele z których będą pobierane dane,
WHERE – określa warunki jakie muszą spełniać wiersze
relacji wyjściowej,
SELECT * FROM samochody WHERE marka=‘mercedes’;
SELECT * FROM samochody WHERE marka=‘mercedes’
AND kolor=‘srebrny’;
SELECT * FROM samochody WHERE rocznik>’1980’;
SELECT * FROM samochody WHERE rejestracja LIKE ‘BI%’;
SELECT - ALIASY


Wyrażeniom na liście SELECT mogą zostać nadane nazwy
– aliasy,
Aliasem mogą być proste identyfikatory oraz ograniczone
identyfikatory,
SELECT [DISTINCT] wyrażenie [[AS] alias]
FROM nazwa_tabeli
[WHERE warunki];
SELECT marka, Sysdate()-rocznik AS ile FROM samochody;
SELECT marka, Sysdate()-rocznik AS „ile lat” FROM
samochody;
SELECT - SORTOWANIE


Wyniki zapytania mogą być posortowane w porządku
rosnącym – ASC (domyślnym) lub malejącym DESC,
W klauzuli ORDER BY mogą występować atrybuty relacji
wejściowej, aliasy, numer na liście wyrażeń SELECT,
SELECT [DISTINCT] wyrażenie [[AS] alias]
FROM nazwa_tabeli
[WHERE warunki]
[ORDER BY wyrażenie [ASC|DESC];
SELECT * FROM samochody ORDER BY rocznik DESC;
7
2010-10-21
SELECT - GRUPOWANIE

W SQL istnieje możliwość podziału wynikowych
wierszy na grupy i wykonania funkcji sumarycznych
na wartościach należących do tych grup,
SELECT [DISTINCT] wyrażenie [[AS] alias]
FROM nazwa_tabeli
[WHERE warunki]
[GROUP BY wyrażenie
[HAVING warunki]]
[ORDER BY wyrażenie [ASC|DESC];
SELECT - GRUPOWANIE
Na liście GROUP BY mogą być tylko nazwy
kolumn,
 Na liście klauzuli SELECT mogą znaleźć się
jedynie: stałe, kolumny grupujące, funkcje
sumaryczne oraz wyrażenie zawierające wszystkie
powyższe,
 Dwa wiersze o takich samych wartościach kolumn
grupujących wliczając w to NULL idą do tej samej
grupy,

FUNKCJE SUMARYCZNE
SELECT – GROUP BY - PRZYKŁADY
COUNT
AVG
 SUM
 MAX, MIN
SELECT rocznik, COUNT (*) FROM samochody
GROUP BY rocznik;


Argumentami funkcji może być wyrażenie, bądź
DISTINCT wyrażenie,
 W przypadku COUNT możemy użyć także * - będą
to wszystkie wiersze spełniające warunek WHERE,
 Wyrażenia o wartości NULL nie są brane pod
uwagę przy obliczaniu wartości funkcji (oprócz
COUNT),

SELECT marka, kolor, COUNT(rejestracja) FROM
samochody
GROUP BY marka, kolor;
SELECT marka, SUM(cena) FROM samochody
GROUP BY marka;
8
2010-10-21
KLAUZULA HAVING

Określa warunki jakie muszą być spełnione aby
podzbiór trafił do relacji wynikowej (dotyczy tylko
danych po agregacji),
SELECT marka, SUM(cena), COUNT(*) FROM
samochody
GROUP BY marka
HAVING COUNT(*)>=3;
OPERATORY ALGEBRAICZNE NA ZAPYTANIACH
instrukacja_SELECT operator instrukcja_SELECT
Operatory:
 UNION, UNION ALL – sumowanie zbiorów będących
wynikami zapytań,
 INTERSECT – przecięcie zbiorów wyników,
 EXCEPT – różnica zbiorów wyników.
Dodajemy ALL jeśli chcemy otrzymać wyniki bez eliminacji
powtarzających się wierszy.
OPERATORY ALGEBRAICZNE NA ZAPYTANIACH
Mogą być stosowane gdy liczba i typy kolumn w
składowych zapytania są takie same,
 Relacja wynikowa nie posiada nazw kolumn, a
nazwy atrybutów w zbiorze wynikowym pochodzą z
listy pierwszej klauzuli SELECT,
 Zapytania wykonywane są w kolejności ich
wystąpienia,
 Klauzula ORDER BY może wystąpić jedynie na
samym końcu całego zapytania, a do wynikowych
kolumn odwołujemy się używając kolejnych
numerów,

OPERATORY ALGEBRAICZNE NA ZAPYTANIACH
SELECT wlasciciel FROM samochody
WHERE marka=‘mercedes’
EXCEPT
SELECT wlasciciel FROM samochody
WHERE marka=‘fiat’;
SELECT marka FROM samochody
WHERE data_rejestracji=‘1999’
INTERSECT
SELECT marka FROM samochody
WHERE data_rejestracji=‘1998’;
9
2010-10-21
OPERATORY ALGEBRAICZNE NA ZAPYTANIACH
ZŁĄCZENIA RELACJI W ZAPYTANAICH
Złączenie tabel odbywa się poprzez wstawienie
więcej niż jednej relacji w klauzuli FROM,
 Najczęściej złączenie uzyskujemy biorąc pod
uwagę naturalne powiązania między wierszami
tabel klucz główny <-> klucz obcy,

SELECT rejestracja||’*’ FROM samochody
WHERE marka=‘mercedes’
UNION
SELECT rejestracja FROM samochody
WHERE marka<>’mercedes’
ORDER BY 1;
ILOCZYN KARTEZJAŃSKI



Daje w wyniki wszystkie możliwe kombinacje wierszy,
Liczba krotek wynikowych jest iloczynem ilości krotek w
obu relacjach wejściowych,
Rzadko stosowany gdyż ze względu na ogrom rozmiaru
może wystąpić błąd zapytania,
SELECT *
FROM relacja1 CROSS JOIN relacja2
[WHERE warunki]
[ORDER BY wyrażenie];
SELECT * FROM samochody CROSS JOIN wypadki;
SELECT * FROM samochody, wypadki;

Typy złączeń:
 iloczyn kartezjański (CROSS JOIN)
 złączenie naturalne (NATURAL JOIN)
 złączenie zewnętrzne (RIGHT|LEFT|FULL
JOIN)
 samozłączenie (JOIN)
ZŁĄCZENIE NATURALNE


daje w wyniku iloczyn kartezjański łączonych relacji
ograniczony do tych krotek, dla których atrybuty o tych
samych nazwach i typach w obu relacjach miały równe
wartości,
Można wprowadzać aliasy nazw relacji, wówczas należy
pamiętać o tym, że nazw oryginalnych nie można już
używać,
SELECT * FROM samochody JOIN wypadki w ON
rejestracja=w.rejestracja;
SELECT * FROM samochody NATURAL JOIN wypadki;
SELECT * FROM samochody JOIN wypadki USING
(rejestracja);
10
2010-10-21
ZŁĄCZENIE ZEWNĘTRZNE
ZŁĄCZENIE ZEWNĘTRZNE
Złączenie zewnętrzne rozszerza wynik prostego
złączenia o te wiersze z jednej tabeli, dla których w
trakcie złączania nie znaleziono odpowiadających
wierszy w drugiej tabeli,
 Jest to możliwe dzięki „wirtualnym krotkom”
wypełnionym wartością NULL,
 Wyróżniamy złączenie: lewostronne (LEFT JOIN),
prawostronne (RIGHT JOIN) i pełne – będące
sumą wyników dwóch pierwszych złączeń (FULL
JOIN),
SELECT *
FROM relacja1 [alias1]
[NATURAL] {LEFT|RIGHT|FULL}
[OUTER] JOIN relacja2 [alias2]
{ON (warunek_połączenia) | USING (atrybut) }
[WHERE warunki]
[ORDER BY wyrażenia];
ZŁĄCZENIE ZEWNĘTRZNE - PRZYKŁADY
SAMOZŁĄCZENIE


SELECT w.data,w.strata, s.model
FROM samochody s LEFT JOIN wypadki w ON
s.rejestracja=w.rejestracja
WHERE w.rejestracja IS NULL;
SELECT s.marka, COUNT(w.rejestracja)
FROM wypadki w RIGHT JOIN samochody s ON
s.rejestracja=w.rejestracja
GROUP BY s.marka;

Złączenie tabeli z nią samą,
Ta sama tabela występuje w dwóch (lub więcej) rolach
wskazywanych przez aliasy dołączone do nazwy tabeli
w klauzuli FROM,
SELECT prac.nazwisko, kier.nazwisko
FROM pracownicy prac JOIN pracownicy kier ON
prac.nrboss=kier.nrpracownika;
SELECT s.rejestracja
FROM samochody s JOIN samochody c ON
s.cena>c.cena
WHERE c.rejestracja=‘BID123’;
11
2010-10-21
PODZAPYTANIA
PODZAPYTANIA WIERSZOWE I TABLICOWE
Podzapytania mogą występować wewnątrz klauzul
WHERE, HAVING, SELECT i FROM,
 Maja taką samą postać jak zapytania, są ujęte w
nawiasy,
 Mogą być częścią wyrażeń,
 Mogą być wielokrotnie zagnieżdżane,
 Podzapytanie może wystąpić jako argument
predykatów porównań oraz przynależności do listy
wartości,
 W podzapytaniu nie można używać klauzul ORDER
BY, UNION.
 Często używa się operatorów IN, NOT IN, SOME,
ALL, EXISTS, NOT EXIST

OPERATORY ANY I ALL
OPERATORY ANY I ALL - PRZYKŁAD

stosowane w zapytaniach z podzapytaniami
tablicowymi,
 warunek z operatorem ANY jest prawdziwy, jeśli
jest spełniony dla chociaż jednej wartości,
zwracanej przez podzapytanie do zapytania
zewnętrznego,
 warunek z operatorem ALL jest prawdziwy wtedy,
gdy spełniony jest dla wszystkich wartości
odczytywanych przez podzapytanie.

Wierszowe – zwraca jeden rekord wynikowy
SELECT * FROM samochody
WHERE rocznik= (SELECT DISTINCT max(rocznik)
FROM samochody WHERE marka=‘fiat’);

Tablicowe – zwraca zbiór wynikowy złożony z
jednego lub wielu rekordów
SELECT rejestracja FROM samochody
WHERE (marka, cena) IN (SELECT marka,
max(cena) FROM samochody GROUP BY marka);
SELECT rejestracja FROM samochody
WHERE cena >
ANY (SELECT cena FROM samochody WHERE
marka=‘mercedes’);
SELECT rejestracja FROM samochody
WHERE cena >
ALL (SELECT cena FROM samochody WHERE
marka=‘mercedes’);
12
2010-10-21
PODZAPYTANIE ZWYKŁE


Zbiór wynikowych wierszy nie zmienia się i nie zależy do
wierszy w głównym zapytaniu,
Wykonywane w pierwszej kolejności (tylko raz), jako wynik
pośredni trafiają do zapytania zewnętrznego.
SELECT rejestracja FROM samochody
WHERE cena <
(SELECT avg(cena) FROM samochody);
SELECT rejestracja FROM samochody
WHERE cena <
(SELECT avg(cena) FROM samochody)
AND rocznik = (SELECT min(rocznik) FROM samochody) ;
OPERATOR EXIST



Występuje w podzapytaniach skorelowanych,
Przyjmuje wartość prawdy gdy podzapytanie zwróci
przynajmniej jeden rekord,
Podzapytanie może zwracać również literał.
SELECT nazwisko FROM pracownicy p
WHERE EXISTS
(SELECT * FROM pracownicy WHERE
id_szefa = p.id_prac);
SELECT nazwisko FROM pracownicy p
WHERE EXISTS
(SELECT 1 FROM pracownicy WHERE
id_szefa = p.id_prac);
PODZAPYTANIE SKORELOWANE
Zbiór wyników podzapytania zależy od wartości
występujących w wierszach w głównym zapytaniu,
 Wykonywane dla każdego wiersza z zapytania
zewnętrznego (wielokrotnie).

SELECT rejestracja, cena FROM samochody s
WHERE cena >
(SELECT avg(cena) FROM samochody z WHERE
z.marka=s.marka);
PODZAPYTANIA W KLAUZULI HAVING

obowiązują te same zasady co w przypadku klauzuli
WHERE
SELECT marka, AVG(cena)
FROM samochody
GROUP BY marka
HAVING
AVG(cena) > (SELECT AVG(cena) FROM samochody);
13
2010-10-21
PODZAPYTANIA W KLAUZULI FROM
PODZAPYTANIE W KLAUZULI SELECT
Podzapytanie tworzy zbiór danych dla zapytania
zewnętrznego:
Takie podzapytanie jest źródłem danych dla nowego
atrybutu w wyniku zapytania zewnętrznego.
Podzapytanie musi zwracać co najwyżej jedną wartość
dla rekordu przeglądanego przez zapytanie zewnętrzne.
Należy również zdefiniować alias dla atrybutu
definiowanego przez podzapytanie.
SELECT marka, srednia_cena
FROM
(SELECT marka, avg(cena) FROM samochody
GROUP BY marka);
SELECT s.wlasciciel,
(SELECT COUNT(*) FROM samochody z
WHERE z.wlasciciel=s.wlasciciel) AS L_sam
FROM wlasciciele s;
DDL – CREATE TABLE
CREATE TABLE
Najprostsza postać deklaracji schematu relacyjnego
przyjmuje następującą postać:
CREATE TABLE samochody(
rejestracja Char(7),
rocznik Date DEFAULT Sysdate,
właściciel Numeric,
marka Varchar(10) DEFAULT ‘Fiat’);
CREATE TABLE nazwa_tabeli
(nazwa_kolumny typ_danych (rozmiar)
[DEFAULT wartośc_domyślna]);
- PRZYKŁAD
CREATE TABLE zwierzeta (
gatunek CHARACTER VARYING (100),
jajorodny CHAR(1) DEFAULT ‘T’,
liczba_konczyn NUMERIC(2),
data_odkrycia DATE);
14
2010-10-21
CREATE TABLE
- WIĘZY
CREATE TABLE
– PRIMARY KEY
CREATE TABLE nazwa_tabeli
(nazwa_kolumny typ_danych (rozmiar)
[ [CONSTRAINT nazwa] więzy_atr]
…
[ [CONSTRAINT nazwa] więzy_rel]);
Podstawowe rodzaje więzów:
 PRIMARY KEY
 NOT NULL
 REFERENCES nazwa_tabeli ()
 UNIQUE
 CHECK
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
właściciel Numeric,
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date);
CREATE TABLE - UNIQUE
CREATE TABLE – NOT NULL
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
właściciel Numeric,
marka Varchar(10) DEFAULT ‘Fiat’,
vin char(13) UNIQUE);
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
właściciel Numeric,
marka Varchar(10) DEFAULT ‘Fiat’,
vin char(13),
UNIQUE (vin));
CREATE TABLE samochody(
rejestracja Char(7),
rocznik Date,
właściciel Numeric,
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date,
PRIMARY KEY (rejestracja));
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
właściciel Numeric NOT NULL,
marka Varchar(10) DEFAULT ‘Fiat’,
vin char(13) UNIQUE NOT NULL);
15
2010-10-21
CREATE TABLE – KLUCZ OBCY
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
właściciel Numeric REFERENCES właściciele(nr),
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date NOT NULL);
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
właściciel Numeric,
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date NOT NULL
FOREIGN KEY właściciel REFERENCES właściciele(nr));
KLUCZ OBCY
– INTEGRALNOŚĆ REFERENCYJNA
ON UPDATE SET NULL – modyfikacja wartości
klucza głównego w krotce spowoduje zapisanie do
wskazujących na nią atrybutów tworzących klucz
obcy wartości NULL,
 ON UPDATE CASCADE – modyfikacja wartości j.w.
w krotce spowoduje zapisanie do wskazujących na
nią atrybutów tworzących klucz obcy nowej
wartości klucza głównego lub wartości unikalnej,
 ON UPDATE SET DEFAULT - modyfikacja j.w. w
krotce spowoduje zapisanie do wskazujących na
nią atrybutów tworzących klucz obcy ich wartości
domyślnych.
KLUCZ OBCY
– INTEGRALNOŚĆ REFERENCYJNA
ON DELETE SET NULL – usunięcie krotki z relacji
z kluczem głównym spowoduje zapisanie do
wskazujących na nią atrybutów tworzących klucz
obcy wartości NULL,
 ON DELETE CASCADE – usunięcie krotki j.w.
spowoduje usunięcie wszystkich krotek, które
zawierają klucz obcy wskazujący na usuwaną
krotkę,
 ON DELETE SET DEFAULT – usunięcie krotki j.w.
spowoduje zapisanie do wskazujących na nią
atrybutów tworzących klucz obcy ich wartości
domyślnych,

KLUCZ OBCY
– INTEGRALNOŚĆ REFERENCYJNA

CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date,
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date NOT NULL,
właściciel Numeric REFERENCES właściciele(nr),
ON DELETE SET NULL,
ON UPDATE CASCADE
);
16
2010-10-21
CREATE TABLE – OGRANICZENIE ATRYBUTU
CREATE TABLE – OGRANICZENIE RELACJI
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date CHECK (rocznik>’1970’),
właściciel Numeric REFERENCES właściciele(nr),
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date NOT NULL);
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date NOT NULL,
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date,
CHECK (rocznik<data_rejestracji));
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date CHECK (rocznik>’1970’),
właściciel Numeric REFERENCES właściciele(nr),
marka Varchar(10) DEFAULT ‘Fiat’,
rodzaj Char(1) CHECK (rodzaj IN (‘s’ , ’h’))
);
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date NOT NULL,
marka Varchar(10) DEFAULT ‘Fiat’,
rodzaj Char(1),
CHECK (rodzaj=‘h’ OR rejestracja NOT LIKE ‘BI%’));
CREATE TABLE – NADAWANIE NAZW WIĘZOM
CREATE TABLE – PODZAPYTANIE (ORACLE)
CREATE TABLE samochody(
rejestracja Char(7) CONSTRAINT numer_sam PRIMARY
KEY,
marka Varchar(10) DEFAULT ‘Fiat’,
data_rejestracji Date);
CREATE TABLE nazwa_tabeli
(nazwa_kolumny [DEFAULT wartosc]
[ [CONSTRAINT nazwa] więzy_atr]
…
[ [CONSTRAINT nazwa] więzy_rel])
AS SELECT zapytanie;
CREATE TABLE samochody(
rejestracja Char(7) PRIMARY KEY,
rocznik Date NOT NULL,
marka Varchar(10) DEFAULT ‘Fiat’,
rodzaj Char(1),
CONSTRAINT rodzaj_rej CHECK (rodzaj=‘h’ OR
rejestracja NOT LIKE ‘BI%’));
CREATE TABLE auta (rejestracja PRIMARY KEY,
marka, kolor,cena)
AS SELECT rejestracja, marka, kolor, 1.25*cena
FROM samochody;
17
2010-10-21
RENAME
Zmiana nazwy relacji
DROP TABLE
DROP TABLE nazwa_tab [CASCADE];
RENAME stara_nazwa TO nowa_nazwa;
Gdy inne tabele zawierają klucze obce do usuwanej tabeli to
usunięcie nie powiedzie się,
RENAME samochody TO auta;
Np. DROP TABLE samochody;
- nie powiedzie się,
DROP TABLE samochody CASCADE;
- usunie tabele razem z
wiązami spójności referencyjnej
dla odpowiedniej kolumny.
ALTER TABLE
ALTER TABLE nazwa_tab klauzula_zmiany_schem;
Możliwości:
 dodanie nowej kolumny wraz z ograniczeniami atrybutu lub
definicji ograniczenia relacji– ADD,
 modyfikacja definicji atrybutu – ALTER COLUMN/ MODIFY,
 usunięcie kolumny lub ograniczenia integralnościowego –
DROP COLUMN.
ALTER TABLE - ADD
ALTER TABLE nazwa_tabeli
ADD [COLUMN nazwa typ(rozmiar) [DEFAULT
wartość] ograniczenia |
CONSTRAINT nazwa ograniczenie];
ALTER TABLE samochody ADD COLUMN vin Char
(17) UNIQUE;
ALTER TABLE samochody ADD CONSTRAINT
ogr_mark CHECK (marka IN (‘fiat’, ‘seat’));
18
2010-10-21
ALTER TABLE - DROP
ALTER TABLE – ALTER COLUMN
ALTER TABLE nazwa_tabeli
DROP [ COLUMN ( nazwa ) |
CONSTRAINT ( nazwa ) ];
ALTER TABLE nazwa_tabeli
MODIFY ( nazwa typ(rozmiar)
[DEFAULT wartość] ograniczenia );
ALTER TABLE samochody DROP CONSTRAINT
numer_sam;
ALTER TABLE samochody ALTER COLUMN vin
CHARACTER VARYING (20) NOT NULL;
ALTER TABLE samochody DROP COLUMN cena;
DML- INSERT INTO
INSERT INTO
Wstawianie wierszy do tabeli,
Można ograniczyć się do kolumn o podanych nazwach
(w reszcie wstawiamy NULL),
 Wiersz można wypełnić wartościami zwróconymi przez
podzapytanie.
INSERT INTO samochody VALUES (‘BIR5678’,
‘2002’, 2, ‘2002-10-09’, ‘biały’, ‘opel’);


INSERT INTO nazwa_tabeli [(nazwy_kolumn)]
VALUES (wartości [DEFAULT] [NULL]);
INSERT INTO samochody (rejestracja, kolor, marka)
VALUES (‘BIR5678’, ‘biały’, NULL);
INSERT INTO samochody_new
(SELECT * FROM samochody
WHERE cena<20000);
19
2010-10-21
UPDATE
Modyfikacja (aktualizacja) wartości zapisanych w bazie danych,
UPDATE nazwa_tabeli
SET nazwy_kolumn=wyrażenia [DEFAULT] [NULL]
[WHERE warunek];
UPDATE - PODZAPYTANIE
UPDATE nazwa_tabeli
SET nazwy_kolumny=
(SELECT nazwa_kolumny2 FROM
nazwa_tabeli2 [WHERE warunki])
[WHERE warunek];
UPDATE samochody SET cena=cena*1.05;
UPDATE samochody SET cena=cena*1.05
WHERE marka=‘mercedes’;
UPDATE samochody SET właściciel=3, kolor=‘czerwony’
WHERE rejestracja=‘SER2345’;
DELETE

Usuwanie danych z tabeli,
UPDATE samochody
SET cena=cena+
(SELECT avg(cena) FROM
samochody)
WHERE marka=‘mercedes’;
COMMIT, ROLLBACK

DELETE FROM nazwa_tabeli
[WHERE warunek];
DELETE FROM samochody;
DELETE FROM samochody
WHERE data_rej IS NULL;
Utrwalenie zmian wprowadzonych przez polecenia
INSERT, DELETE, UPDATE, inaczej wyniki
wykonanych poleceń są widoczne jedynie w
ramach bieżącej sesji,
COMMIT;

Rezygnacja z wprowadzenia zmian do bazy
danych,
ROLLBACK;
20
2010-10-21
PERSPEKTYWY




Są zapytaniami zapewniającymi użytkownikowi właściwe widoki na dane
składowane w bazie danych,
Są wyrażeniami języka SQL przechowywanymi w bazie danych i
określonymi nazwą,
Wyniki zapytania tworzącego perspektywę nie są fizycznie składowane
na dysku, ale są generowane za każdym razem, gdy do perspektywy
zostanie skierowane zapytanie,
Umożliwiają wykonywanie podobnych operacji jakie są wykonywane na
tabelach: przeglądanie, wyszukiwanie – zawsze, wstawianie,
modyfikowanie i usuwanie danych – pod pewnymi warunkami.
Perspektywy pozwalają na:
 definiowanie struktur, które umożliwią wygodne korzystanie z systemu
pojedynczym użytkownikom lub ich klasom,
 ograniczenie dostępu do danych,
 uproszczenie pracy administratora,
 podsumowywania składowych danych.
PERSPEKTYWY – KONKRETNE ZASTOSOWANIA
Zapewnienie bezpieczeństwa przez ograniczenie
zbiorów wynikowych do tych danych, które
rzeczywiście są potrzebne użytkownikowi,
 Mogą stanowić podstawę dla innych perspektyw, co
pozwala na swobodne operowanie danymi,
 Oferowanie danych użytkownikowi w bardziej
przystępnej formie.

PERSPEKTYWY - TWORZENIE
PERSPEKTYWY - USUWANIE
CREATE VIEW nazwa [ (nazwa1, nazwa2, ...)] AS
SELECT zapytanie definiujące perspektywę
[ WITH CHECK OPTION ];
DROP VIEW nazwa [RESTRICT | CASCADE];
CREATE VIEW kabriolety AS
SELECT rejestracja, marka, kolor, cena
FROM samochody;
CREATE VIEW terenowe (marka, data, cena) AS
SELECT marka, data, cena*1.2
FROM samochody WHERE kolor=‘czerwony’;
DROP VIEW terenowe;
DROP VIEW terenowe CASCADE;
- usunięcie razem wszystkich
perspektyw zależnych,
DROP VIEW terenowe RESTRICT;
- odrzucenie usunięcia perspektywy,
jeśli istnieją inne zależne.
21
2010-10-21
PERSPEKTYWY MODYFIKOWALNE







oparte na jednej relacji ( w Oracle i Access może być więcej niż
jedna),
bez słowa DISTINCT,
bez wywołań funkcji podsumowujących,
bez funkcji operujących na zbiorach,
bez operatorów zbiorów,
bez klauzuli ORDER BY, GROUP BY, HAVING,
Klauzula WHERE nie może zawierać podzapytań.
PERSPEKTYWY Z OPCJĄ SPRAWDZANIA
Zapewnia ograniczenie danych operowanych przy użyciu
perspektywy do danych określonych przez jej warunek WHERE.
CREATE VIEW drogie (rejestracja, marka, data, cena) AS
SELECT marka, data, cena
FROM samochody WHERE cena>100000
WITH CHECK OPTION;
są modyfikowane przez polecenia UPDATE i DELETE,
aby można było korzystać z INSERT, konieczne jest, aby
perspektywy udostępniały wszystkie atrybuty klucza podstawowego
oraz wszystkie atrybuty obowiązkowe relacji bazowej,
 jeżeli perspektywa zawiera atrybuty stanowiące wynik wyrażeń, to
polecenia INSERT i UPDATE nie mogą dotyczyć tych atrybutów.
INSERT INTO drogie (rejestracja, marka, data, cena) VALUES
(‘TY789’,’seat’,2007,45000);
DEFINICJA DZIEDZINY ATRYBUTÓW
DEFINICJA ASERCJI



Są to typy danych definiowane łącznie z więzami spójności.
CREATE DOMAIN nazwa typ (rozmiar)
[CHECK (VALUE warunek)]
[DEFAULT wartosc];
CREATE DOMAIN rej CHAR(6)
CHECK (VALUE LIKE ‘BI____’)
DEFAULT ‘BI1111’;
CREATE TABLE samochody
(rejestracja DOMAIN rej PRIMARY KEY,
…);

ALTER DOMAIN, DROP DOMAIN
UPDATE drogie
SET cena=30000
WHERE marka=‘fiat’;

Więzy spójności definiowane poza instrukcjami
CREATE TABLE, ALERT TABLE.
CREATE ASSERTION nazwa
CHECK (warunek);
CREATE ASSERTION suma_ceny
CHECK ( 1000000>=ALL
(SELECT SUM(cena) FROM samochody GROUP BY
marka));
DROP ASSERTION
22
2010-10-21
TWORZENIE SYNONIMÓW NAZW

Konstrukcja pozwalająca na tworzenie synonimów
nazw tabel i perspektyw.
CREATE SYNONYM nazwa
FOR nazwa_tabeli_lub_perspektywy;
CREATE SYNONYM pomoc FOR samochody;

DROP SYNONYM
TWORZENIE SEKWENCJI

Niektóre SZDB (np. Oracle) oferują konstrukcję
(przechowywana jako obiekt) służącą do
generowania jednoznacznych numerów dla
wartości kluczy głównych i jednoznacznych.
CREATE SEQUENCE nazwa
[INCREMENT BY k]
[START WITH n];
n – pierwsza generowana liczba naturalna,
k – wartość o jaką wzrasta każdy kolejno generowany
numer.
UŻYCIE SEKWENCJI
W YKŁAD PRZYGOTOWANO NA PODSTAWIE
nazwa_sewkwencji.NextVal – generowanie kolejnej
wartości w sekwencji,
 nazwa_sewkwencji.CurrVal – ostatnio
wygenerowana wartość w sekwencji,


CREATE SEQUENCE numery_prac
INCREMENT BY 3
START WITH 10;
L. Banachowski, E. Mrówka-Matejewska, K.
Stencel, Systemy baz danych. Wykłady i ćwiczenia,
PJWSTK, 2004,
 K. Kline, D. Kline, SQL. Almanach. Opis poleceń
języka, Helion, 2004,
 P. Wilton, J. Colby, SQL od podstaw, Helion, 2006,
 J. D. Ullman, J. Widom, Podstawowy wykład z
systemów baz danych, WNT, 1999,
 http://wazniak.mimuw.edu.pl/
INSERT INTO pracownicy (nr, nazwisko, stanowisko)
VALUES (numery_prac.NextVal, ‘adam’,’bobrowski’);
23

Podobne dokumenty