bd cz 2 jezyki zapytan do baz danych

background image

1

SYSTEMY BAZ
DANYCH

Część II

Opracowanie : Dr Bożena
Śmiałkowska

background image

Cechy języków zapytań do baz
danych

Deklaratywny charakter,

Zanurzenie w języku programowania,

Wysoki poziom abstrakcji

background image

SQL

Języki zapytań do relacyjnych baz
danych

Języki oparte na

algebrze relacji (ISBL w

Ingresie)

Języki oparte na

predykatach

Języki oparte

na rachunku

dziedzin (QBL)

Języki oparte na

rachunku

krotek (QUEL)

SQL

=

[

język oparty na algebrze relacji

] + [

język oparty na

rachunku krotek

]

background image

Literatura do zagadnienia :
SQL

Celko J.: Zaawansowane techniki programowania.

Mikrom, W-wa, 1999

Connan S.: SQL-The standard Handbook. McGraw-Hill

Book Company, London, 1993

Harrington J.L.: SQL dla każdego. EDU-Mikom, W-wa,

1998

SQL. Język relacyjnych baz danych. Wellesley Software.

WNT, W-wa, 1999

Stephans R.: SQL w 3 tygodnie. LT&P, W-wa, 1999

http://galaxy.uci.agh.edu.pl/chwastek/lectures/db/dbtitl

e.html

http://baszta.iie.ae.wroc.pl/index.html

http://www.cs.put.poznan.pl/kjankiewicz/oracle/sql/inde

x.html

http://www.cs.put.poznan.pl/rwrembel/courses/sbd.htm

l

background image

SQL to:

Strukturalny język zapytań (Ang. Structured

Query Language),

niepełny język obsługi baz danych,

język obsługi baz danych zaimplementowany w

systemach zarządzania relacyjnymi bazami

danych (RDBMS – relacyjny DBMS), przeznaczony

do definiowania struktur danych, wyszukiwania

danych oraz operacji na danych,

Posiada on akceptację ANSI oraz standard ISO.

W praktyce jest to standardowy język zapytań.

background image

Cechy języka SQL

Jest językiem wysokiego poziomu (4GL) opartym na

języku angielskim,

Jest językiem deklaratywnym (nieproceduralnym)

zorientowanym na wynik (użytkownik deklaruj co chce

uzyskać, a nie jak to chce zrealizować),

SQL nie ma instrukcji sterujących wykonanie programu,

Jest często zanurzony w innym języku programowania

(np.: C, Fortran, PL, itp.),

Nie zawiera w sobie rekurencji,

Umożliwia definiowanie struktur danych, wyszukiwanie

danych oraz operacje na danych (np.: kasowanie

danych, modyfikowanie danych itp., o ile użytkownik

ma do tego prawo).

background image

Zalety SQL

background image

Wady i ograniczenia SQL

background image

Historia SQL

Koniec lat 70 – tych – firma ORACLE (Relational

Software Inc.) – pierwsza implementacja praktyczna

(komercyjna),

1981 – IBM – SQL/DS. (RDL – Relational Data Language),

1983 – ISO definicja SQL,

1986 – ANSI – pierwszy standard SQL (SQL-86),

1987 – ISO – pierwszy standard SQL : ISO 9075:1987 (E),

1989 – ISO – następny standard SQL : ISO 9076: 1989

(E), (SQL-98),

1992 – ISO – kolejna, wzbogacona wersja : ISO 9075 :

1992 (E), (SQL 2),

1999 – SQL 3

Grupa ODMG (Object DataBase Management Group) w

oparciu o SQL opracowała język do obiektowych baz

danych OQL.

background image

Historia SQL…cd…

Koncepcja leżąca u podstaw języka SQL powstała w wyniku

prac prowadzonych w laboratorium badawczym IBM w San Jose

w Kalifornii w latach siedemdziesiątych. Tam też została

zbudowana implementacja prototypowa relacyjnych pojęć o

nazwie System/R. Ten wczesny relacyjny SZBD używał języka

znanego wówczas jako SEQUEL. Dlatego właśnie wiele osób

wciąż wymawia nazwę SQL jak SEQUEL (to jest sikłel).

W latach 1973-1979 badacze z IBM opublikowali w

akademickich czasopismach dużo materiałów na temat

budowy System/R. W tym czasie zarówno w USA, jak i w

Europie na konferencjach i seminariach prowadzono ożywione

dyskusje na temat poprawności relacyjnego SZBD. IBM okazał

się

niewątpliwie

nadzwyczaj

powolny

w

dostrzeżeniu

komercyjnego znaczenia systemów relacyjnych. Pierwsze

pomyślne, komercyjne wykorzystanie idei związanych z

relacyjnym modelem danych przypadło korporacji ORACLE,

założonej w 1977 r.

background image

Historia SQL…cd…

System ORACLE był i jest relacyjnym SZBD opartym na

SQL. Wielu innych producentów również

wyprodukowało systemy używające SQL. Z tego

powodu w 1982 r. organizacja ANSI (American National

Standards Committee) przekazała swojemu komitetowi

baz danych (X3H2) sprawę utworzenia standardu

języka relacyjnych baz danych (RDL). Komitet ten

opublikował definicję składni standardu SQL w 1986 r.,

opartą głównie na dwóch dialektach SQL IBM i ORACLE

(ANSI, 1986). W 1987 r. organizacja ISO (International

Standards Organization) opublikowała bardzo podobny

standard (ISO, 1987). Ten standard jest również znany

pod nazwą SQLI. Oryginalny dokument ANSI określa

dwa poziomy dla SQLl: poziom pierwszy i poziom drugi.

Poziom drugi jest pełnym językiem SQL. Poziom

pierwszy, którego pierwotnym założeniem było

pełnienie funkcji przecięcia dla istniejących

implementacji, jest podzbiorem poziomu drugiego.

background image

Historia SQL…cd…

W następstwie powyższych publikacji pojawiło się wiele

krytycznych uwag na temat standardu ANSI/ISO,

zwłaszcza ze strony specjalistów w dziedzinie baz

danych, takich jak E. F. Codd (1988a, 1988b) i C. Dale

(1987). Wiele osób uważało, że wadą standardu jest

fakt, że jest on częścią wspólną istniejących aplikacji.

Inni uważali, że język ma poważniejsze wady, zwłaszcza

w zakresie relacyjnych konstrukcji.

W 1989 r. w odpowiedzi na krytykę ANSI opublikowała

dodatek do standardu, zawierający głównie ulepszenia

cech integralności (ANSI, 1989a). Duża część tego

dodatku została włączona do roboczej wersji

proponowanej drugiej wersji standardu, również

wydanego przez ANSI w 1989 r. (ANSI, 1989b). ISO,

blisko współpracując z ANSI, wydała w tym samym roku

dokument zatytułowany "Database Language SQL with

Integrity Enhancement" (ISO, 1989).

background image

Historia SQL…cd…

W 1992 r. ANSI i ISO wydały pełną specyfikację rozszerzonej

wersji SQL, znanej jako SQL2. Dla tego standardu określono dwa

podzbiory: poziom minimalny i poziom pośredni. Poziom

minimalny SQL2 jest w zasadzie taki sam jak SQL1 z

udoskonalonymi cechami integralności. Uzgodniono już kolejne

istotne rozszerzenia standardu SQL2 i oczekuje się pojawienia

wersji

standardu

o

nazwie

SQL3

pod

koniec

lat

dziewięćdziesiątych.

Nie ma zatem jednego standardu, a przynajmniej trzy. Oznacza

to, że jakakolwiek implementacja SQL może realizować

wszystkie lub część z tych trzech wersji standardu.  Jest to

jeden z powodów, dla których większość implementacji

komercyjnych uważa się w najlepszym razie za dialekty

standardu SQL. Innymi słowy, pod wieloma względami znajdują

one wspólny grunt wokół definicji podstaw lub poziomu jeden

standardu SQLl. Pod innymi względami różnią się one nie

dostosowując się ani do SQLI, ani do późniejszych standardów

(typy

danych

tu

dobrym

przykładem).

Niektóre

implementacje oferują dodatkowe konstrukcje nie uwzględnione

w standardzie.

background image

Ogólna charakterystyka SQL…

SQL (strukturalny język zapytań - Structured Query
Language

)

Wysoki poziom bezpieczeństwa, integralności i

kompletności

danych,

Praca w konfiguracjach klient-serwer,

Optymalizacja zapytań kierowanych do bazy przez

użytkowników lub ich systemy,

Efektywne przetwarzanie transakcji,

Zdolność manipulowania niestandardowymi

strukturami
danych,

SQL jest zwykle podzielony na trzy główne części:

definicje
danych, operowanie danymi i kontrola danych,

background image

Sposób wykorzystania
SQL

Interaktywny SQL

– bezpośredni dostęp do danych za

pomocą interpretera SQL,

Statyczny SQL

– stały (predefiniowany) kod w SQL –

może to być zanurzony SQL (tzw. embedded SQL) – kod
znajdujący się wewnątrz innego języka programowania
lub modułowy SQL, tzn. samodzielne moduły w języku
SQL mogą być łączone z modułami innych języków,

Dynamiczny SQL

– kod SQL generowany dynamicznie

przez programy użytkowe – często generowany jest za
pomocą interfejsów graficznych lub z poziomu WWW,

Definicyjny SQL

– kod w SQL generowany przy pomocy

narzędzi CASE (Computer Aided Software Enginnering).

background image

SQL – postać poleceń
(zapytań)

background image

Przykładowe pełne
określenie zapytania

background image

Przykładowe zapytanie
sparametryzowane

background image

Przykładowe zapytanie
sparametryzowane

background image

Zapytania dynamiczne -
przykład

background image

Zapytania dynamiczne -
przykład

background image

Komponenty SQL

background image

Podstawowe struktury danych w
SQL

background image

Podstawowe struktury danych cd..

background image

Alfabet SQL

Obejmuje:

Zestaw znaków SQL charakterystyczny dla

implementacji

litery duże i małe, cyfry, znaki specjalne , ; ( ) . %

_ > < = „ + * / - ? : ! spacja,

Literały (stałe), zapisywane w cudzysłowiu np.:

‘Warszawa’

Identyfikatory (nazwy), np.: nazwy tabel, kolumn

(atrybutów), widoków, schematów, itp.,

Nazwy poleceń i funkcji - każda instrukcja w SQl

zaczyna się słowem kluczowym, może zawierać

modyfikatory i kończy się średnikiem,

Znak * oznacza wszystkie kolumny (atrybuty)

tabeli,

background image

Zasady konstrukcji wyrażeń

background image

Podstawowe typy danych w
SQL

Wyróżnia się następujace typy danych:

Typy napisowe (String)

Character(N)

- Napis znakowy o stałej długości.

Jeżeli na wejściu znajdzie się napis o mniejszej

długości niż N, to na końcu napisu są dodawane

spacje,

Character Varying (N)

- Napis znakowy o

minimalnej długości 1 i maksymalnej długości

określonej przez system. Jeżeli na wejściu pojawi

się napis o mniejszej długości niż N, to jest

przechowywana tylko właściwa długość napisu.

Bit

- Napisy bitowe głównie używane dla danych

graficznych i dźwięku. d. Bit Varying. Napisy

bitowe zmiennej długości,

background image

Podstawowe typy danych w
SQL

Typy liczbowe:

Numeric

- Synonim dla Decimal,

Decimal(M, N)

- Liczba dziesiętna o długości M z N

miejscami po przecinku dziesiętnym,

Integer

- Liczba całkowita z zakresu wartości

określonych przez system,

Smallint

- Liczba całkowita z mniejszego zakresu

wartości określonych przez system,

Float

- Liczba przechowywana w reprezentacji

zmiennopozycyjnej,

Real

- Jest synonimem Float,

Double Precision

.

background image

Podstawowe typy danych w
SQL

Typy daty i godziny (Datetime) :

Date

- Daty określone przez system,

Time

- Godziny określone przez system,

Timestamp

- Daty i godziny z uwzględnieniem ułamków

sekund

Interval

- Przedziały między datami.

Konkretne implementacje
różnią się realizacją typów
danych.

background image

Obiektowy model SQL3

background image

Rozszerzenie typów o obiekty w
SQL3

background image

Zakładanie tabel bazy danych

CREATE TABLE

<nazwa tabeli>

    (<nazwa kolumny><typ danych>(<długość>),
    <nazwa kolumny><typ danych>(<długość>),
                 ...          
[

PRIMARY KEY

(nazwa atrubutu [ , nazwa

atrubutu ]…)],

FOREIGN KEY

 (nazwa atrubutu [, nazwa

atrybutu ] …)

REFERENCES

<nazwa tabeli> (<nazwa

atrybutu>)]);

background image

Zakładanie tabel bazy danych -

Opcje NOT NULL i UNIQUE

Każda kolumna w tabeli może być zdefiniowana

jako

NOT NULL.

Oznacza to, że użytkownik nie może

wprowadzić wartości null do tej kolumny.

Domyślną specyfikacją dla kolumny jest

NULL

.

To
znaczy wartości null są dozwolone w
kolumnie.

Każda kolumna może być również zdefiniowana

jako

UNIQUE

(jednoznaczna). Ta klauzula zabrania

użytkownikowi wprowadzania powtarzających
się
wartości do kolumny.

Kombinację NOT NULL i UNIQUE możemy użyć

do
zdefiniowania cech klucza głównego.

background image

Zakładanie tabel bazy danych -
przykłady

Do definicji kolumny możemy dodać klauzulę określającą

wartość, którą system automatycznie wpisuje do

kolumny,

jeżeli

użytkownik

wprowadzi

niepełną

informację. Na przykład do kolumny poziom w tabeli

Moduły

możemy

dodać

specyfikację

DEFAULT

<wartość> wskazującą, że domyślnym poziomem

powinien być 1:

CREATE TABLE Moduły

    (NazwaModułu Character( 30) NOT NULL

UNIQUE,

    Poziom Smallint DEFAULT 1,

    KodKursu Character(3),

    NrPrac Integer) ;

background image

Zakładanie tabel bazy danych -
przykłady

CREATE TABLE

sale

(id_sali

short not null,

kod_kursu

text(10) not null,

nazwa_kursu

text(30),

wymiar_godz

byte,

czas_od

text(12),

id_kierunku

text(4),

Primary key

(id_sali),

Foreign key

(id_kierunku)

references

KIERUNKI

(

nr_kierunek

));

background image

Zakładanie tabel bazy danych-
przykłady

background image

Instrukcja DROP TABLE –
usuwanie definicji tabeli

Usuwa definicję tabel.

Aby usunąć tabelę z bazy danych,
używamy następującego polecenia:

DROP TABLE

<nazwa tabeli>

Na przykład

DROP TABLE Moduły

background image

Modyfikacja struktury tabel bazy
danych

Przy założeniu idealnej niezależności danych administrator danych

powinien móc modyfikować strukturę bazy danych bez wywierania

wpływu na użytkowników lub programy użytkowe, które mają dostęp

do bazy danych. W praktyce produkty oparte na SQL realizują tylko

ograniczoną postać niezależności danych. Administrator może dodać

dodatkową kolumnę do tabeli, zmodyfikować maksymalną długość

istniejącej kolumny lub usunąć kolumnę z tabeli. Każdą z tych operacji

określamy używając polecenia

ALTER TABLE.

Na przykład:

 

ALTER TABLE Wykładowcy

ADD COLUMN NrPokoju Smallint


ALTER TABLE Wykładowcy

ALTER COLUMN NazwiskoPrac Varchar(20)

ALTER TABLE Wykładowcy

DROP COLUMN NazwiskoPrac

dodanie

kolumny

zmiana

wymiaru

 

usuniecie

wymiaru

 

background image

Operacje w SQL na danych bazy
danych

Wstawianie danych do bazy danych (

INSERT INTO

),

Aktualizacja bazy danych (

UPDATE

),

Kasowanie danych z bazy danych (

DELETE

),

Operacje teoriomnogościowe na bazie danych: suma, różnica,
iloczyn mnogościowy i kartezjański (

UNION,

INTERSECT,

EXCEPT

),

Selekcja danych (

SELECT

),

Projekcja (rzutowanie) danych (realizowane przez

SELECT

),

Łączenie tabel bazy danych: naturalne, warunkowe, zewnętrzne
(

JOIN, NATURAL JOIN, LEFT OTHER JOIN, RIGHT OTHER JOIN

FULL

OTHER JOIN

oraz realizowane przez

SELECT

),

Dzielenie tabel (

DIVISION

).

background image

Wstawianie danych do bazy danych

Polecenie INSERT dodaje dodatkowy wiersz do podanej
tabeli. Na przykład instrukcja:

INSERT INTO Moduly
VALUES ('Wstęp do zarządzania',I,'BSD',123)

dodaje dodatkowy wiersz do tabeli Moduly. Porządek, w
jakim powinny być podane wartości w poleceniu INSERT,
musi się zgadzać z porządkiem, w jakim pierwotnie
określono kolumny dla tabeli w poleceniu CREATE
TABLE. Jeżeli chcemy wypisać wartości w jakimś innym
porządku niż pierwotnie określony lub jeśli chcemy
ominąć jakieś kolumny przed wstawianiem, to musimy
dodać listę nazw kolumn do polecenia INSERT. Na
przykład:

INSERT INTO Moduty (Poziom, KodKursu,
NrPrac, NazwaModulu) VALUES
(2,'CSD',237,'Tworzenie systemów
informacyjnych')

background image

Wstawianie danych do bazy danych

background image

Wstawianie danych do bazy danych

Specjalna wersja polecenia INSERT umożliwia dodanie
wielu wierszy do tabeli. Jest zwykle używana, aby
umieścić wyniki jakiegoś zapytania w podanej tabeli.
Przypuśćmy na przykład, że chcemy utworzyć tabelę
wykładowców

pracujących

na

wydziale

studi6w

informatycznych. Możemy to zrobić, jak następuje:

CREATE TABLE WykladowcyInformatyki
(NrPrac Number(5),
NazwiskoPrac Varchar(15),
Status Varchar(10),
Pensja Decimal(7, 2))

INSERT INTO WykladowcyInformatyki(NrPrac,
NazwiskoPrac, Status, Pensja)

SELECT NrPrac, NazwiskoPrac, Status, Pensja
FROM Wykladowcy
WHERE NazwaWydzialu = 'Studia informatyczne'

background image

Usuwanie danych z bazy danych

Polecenia DELETE używamy do usuwania wierszy z tabeli.
Wiersze do usunięcia podajemy w klauzuli WHERE,
podobnie jak w poleceniu SELECT.

DELETE FROM Wykładowcy
WHERE NazwaWydziału = 'Studia
informatyczne'

np.:

background image

Aktualizowanie danych w bazie
danych

Polecenia

UPDATE

używamy do zmodyfikowania zawartości

jednego lub więcej wierszy tabeli. Wiersze do modyfikacji
są określane w opcjonalnej klauzuli WHERE, a zmianę lub
zmiany do wykonania podajemy w klauzuli

SET

.

UPDATE Wykładowcy SET Pensja =
Pensja*1.1
WHERE Status = 'PL'

Na przykład następujące polecenie zwiększy o 10% pensję
wszystkich wykładowców o statusie PL:

background image

Operacje w SQL na danych bazy
danych

Selekcja

projekcja

Łączenie (join) dwóch tabel

background image

Operacje „mnogościowe” w
SQL na danych bazy danych

S

44

Kos

z

34

Znak

a

11

Dos

w

32

Bios

a

11

Dos

w

32

Bios

w

32

Bios

z

43

Znak

a

11

Dos

w

32

Bios

w

32

Bios

z

43

Znak

A

11

Dos

w

32

Bios

S

44

Kos

z

34

Znak

a

11

Dos

w

32

Bios

Suma tabel

Różnica tabel

Iloczyn tabel

background image

Selekcja

background image

Struktura typowego zapytania
selekcyjnego

Proste wyszukiwanie jest wykonywane dzięki kombinacji klauzul
SELECT, FROM i WHERE:

SELECT <nazwa atrybutul.>, <nazwa atrybutu2>,...

FROM <nazwa tabeli>

[WHERE <warunek>]

Klauzula

SELECT

wskazuje na kolumny, z których wartości mają

być wydobyte. Klauzula

FROM

określa tabele, z których mają

pochodzić dane. Klauzula

WHERE

określa warunek lub warunki,

które mają być spełnione przez sprowadzane dane. W

następującym poleceniu gwiazdka "

*

" pełni funkcję symbolu

uniwersalnego. Oznacza to, że zostaną wypisane wszystkie

atrybuty z tabeli, której nazwa znajduje się po słowie FROM.

Klauzula WHERE jest opcjonalna

Opcja

DISTINCT

w wyniku daje różne (niepowtarzalne) wyniki

SELECT DISTINCT stanowisko
FROM pracownicy

;

background image

Warunki w zapytaniach
selekcyjnych

background image

Like w Access

Znak

Opis

0

Cyfra (Od 0 do 9, pozycja wymagana, znaki plus [+] i minus [–] nie są dozwolone).

9

Cyfra lub spacja (pozycja nie jest wymagana, znaki plus i minus nie są dozwolone).

#

Cyfra lub spacja (pozycja nie jest wymagana, w trybie edycji spacje wyświetlane są jako puste miejsca, lecz

podczas zapisywania danych spacje są usuwane; znaki plus i minus są dozwolone).

L

Litera (od A do Z, pozycja wymagana).

?

Litera (od A do Z, pozycja wymagana).

A

Litera lub cyfra (pozycja wymagana).

a

Litera lub cyfra (pozycja wymagana).

&

Dowolny znak lub spacja (pozycja wymagana).

C

Dowolny znak lub spacja (pozycja wymagana).

. , : ; - /

Dziesiętny symbol zastępczy oraz separator tysięcy, dat i godzin. (Znak, który zostanie użyty w charakterze

separatora zależy od ustawień w oknie dialogowym Właściwości: Ustawienia regionalne w Panelu
sterowania systemu Windows).

<

Powoduje, że wszystkie litery zostaną zmienione na małe.

>

Powoduje, że wszystkie litery zostaną zmienione na wielkie.

!

Powoduje, że wszystkie dane są wyświetlane od strony prawej do lewej zamiast od lewej do prawej. Znaki

wpisane do maski wprowadzania zawsze będą ją wypełniać od strony lewej do strony prawej. Wykrzyknik

może pojawić się w dowolnym miejscu maski wprowadzania

\

Powoduje, że znak, który po nim występuje, zostanie wyświetlony jako znak literałowy (na przykład, \A będzie

wyświetlone po prostu jako A).

background image

Struktura typowego zapytania
selekcyjnego - przykłady

SELECT * FROM Moduły

WHERE NazwaModułu = 'Dedukcyjne bazy danych’

background image

Selekcja - przykłady

SELECT

w.nr_w,
p.nazwisko,

p.stanowisko,

p.dzial,
m .miasto,

m.ulica

FROM

pracownicy p, miejsca

m,wypozyczenia w
WHERE

p.nr_m=m.nr_m

AND

p.nr_p=
w.prac_wyp

AND

m.miasto = ‘WARSZAWA’

W celu

połączenia
w jeden dwóch
łańcuchów
znaków
należy
wykorzystać
znak
konkatenacji
‘||’

Kolumny

wyliczone
mogą
być nazwane
przez
zastosowanie
klauzuli AS

SELECT

k.imie || ‘ ‘ || k.nazwisko AS

Klient,

‘ul. ‘ || k.ulica || ‘ ‘ || k.numer

AS
Ulica,

k.kod || ‘ ‘ || k.miasto

AS

Miasto
FROM

klienci k

background image

Obliczenia w zapytaniach
selekcyjnych

1

2

3

4

Ilosc)

background image

54

Selekcja – przykłady cd..

SELECT k.imie, k.nazwisko, k.miasto ,
CASE k.miasto
WHEN ‘Warszawa’ THEN ‘Klient oddziału

macierzystego’
ELSE ‘Klient z przedstawicielstwa’
END
FROM

klienci k

Wyrażenie CASE pozwala na wybranie pewnej
wartości w zależności od wartości w innej
kolumnie. W przykładzie sprawdzamy czy klient
pochodzi z Warszawy, jeśli tak to wpisywana jest
wartość „Klient oddziału macierzystego”, w
przeciwnym razie jest to Klient z
przedstawicielstwa”.

background image

Rzut (projekcja)

background image

Rzut (projekcja)

background image

Rzut (projekcja)

background image

Selekcja jako rzut (projekcja)

Jeżeli określimy nazwy kolumn w zapytaniu selekcyjnym, to
instrukcja SELECT języka SQL staje się kombinacją operatorów
selekcji (RESTRICT) i rzutu (PROJECT) algebry relacyjnej.

SELECT Poziom
FROM Moduły

    

Poziom
1
1

3
3
2
1
1

Wynik

selekcji

Jeśli w zapytaniu selekcyjnym pominięto warunki selekcji
(warunek po słowie kluczowym WHERE), to mamy do czynienia z
rzutem (projekcją
).

background image

Struktura typowego zapytania
selekcyjnego - przykłady

Powtarzające się wartości są dozwolone w SQL ale są

niedozwolone w relacyjnym modelu danych. Aby
uzyskać prawdziwie relacyjny wynik na powyższe
zapytanie, musimy do klauzuli SELECT dodać słowo
kluczowe

DISTINCT

(różne). Usuwa to powtarzające się

wartości w tabeli.

SELECT DISTINCT Poziom
FROM Moduły

Poziom

1
3

2

Wynik

selekcji z

poprzedniego

zapytania

background image

Wybór krotek z uporządkowaniem
wyniku wyszukiwania

SELECT

Nazwisko

,

Imię

,

Zarobki

FROM

pracownicy

WHERE

Zarobki>1000)

ORDER BY

Nazwisko

;

Wybierz pola

Nazwisko

,

Imię

,

Zarobki

z rekordów tabeli

o nazwie

pracownicy

dla których pole

Zarobki

ma wartość

większą niż 1000
i posortuj je wg pola

Nazwisko

Aby uzyskać listę w porządku malejącym, do klauzuli

ORDER BY
musimy dodać słowo kluczowe

DESC

po nazwie atrybutu

.

background image

Grupowanie krotek do obliczeń
klauzula GROUP BY

Klauzula

(instrukcja)

GROUP

BY

dzieli

dane

wyselekcjonowane z bazy danych na grupy, biorąc za

podstawę wartości w określonej kolumnie lub zbiorze

kolumn,

i

umożliwia

wykonanie

obliczeń

podsumowujących (agregujących) na wartościach w każdej

grupie,

Ta instrukcja dzieli dane na grupy, biorąc za podstawę

wartości w określonej kolumnie lub zbiorze kolumn, i

umożliwia

wykonanie

obliczenia

podsumowującego

wartości w każdej grupie. W powyższym wypadku dla

każdej grupy wykonujemy zliczenie liczby wierszy w grupie

i obliczenie średniej pensji w grupie.

do grupy funkcji agregujących należą następujące funkcje:

Count( )

– oblicza ilość wystąpień,

Max( )

- wyznacza wartość największą w grupie,

Min( )

- wyznacza wartość najmniejszą w grupie wartości,

Avg()

- wyznacza wartość średnią w grupie

Sum()

- suma wartości w grupie

background image

Funkcje agregujące -
przykłady

background image

Funkcje agregujące -
przykłady

background image

Grupowanie krotek do
obliczeń klauzula GROUP
BY - przykład

SELECT NazwaWydziału, avg(Pensja), count(*)
FROM Wykładowcy
GROUP BY NazwaWydziału

Studia informatyczne
22000.00 3

Studia biznesu
20000.00   2

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     

 

DaviasT

L

Studia

informatyczne

16000.00

345 

Evans R

PL

Studia
informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

237     
 

Jones S      

SL

Studia
informatyczne

23500.00

145     

 

Thomas P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

wynik

background image

Grupowanie krotek do
obliczeń klauzula HAVING
- przykład

Klauzula GROUP BY może również mieć swoją własną klauzulę
ograniczającą "WHERE ' -

HAVING.

Następująca instrukcja

wyszukuje z naszej bazy danych tylko te wydziały, które mają
więcej niż dwóch wykładowców:

S

tudia informatyczne

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     

 

DaviasT

L

Studia

informatyczne

16000.oo

345 

Evans R

PL

Studia
informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

237     
 

Jones S      

SL

Studia
informatyczne

23500.00

145     

 

Thomas P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

wynik

SELECT NazwaWydziału
FROM Wykładowcy

GROUP BY

NazwaWydziału
HAVING count(*) > 2

background image

Funkcje agregujące -
przykłady

background image

Kolejność klauzul w
zapytaniu selekcyjnym

Select … From … Where …

Group
by

Having

Order by

background image

Przykłady zapytań
selekcyjnych

1

2

3

background image

Przykłady zapytań
selekcyjnych

1

2

3

background image

Przykłady zapytań
selekcyjnych

background image

Zapytania zagnieżdżone -
przykład

background image

Zapytania zagnieżdżone -
przykład

Wykonywanie podzapytania może być powtarzane. W takim
wypadku otrzymujemy ciąg wartości do porównywania z
wynikami najbardziej zewnętrznego zapytania. Rozważmy na
przykład

następujące

zadanie:

Wypisz

listę

nazwisk

pracowników,

nazw

wydziałów

i

pensji

wszystkich

wykładowców, którzy zarabiają więcej niż wynosi średnia
pensja pracownika ich wydziału.

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     
 

DaviasT

L

Studia
informatyczne

16000.oo

237     

 

Jones S      

SL

Studia

informatyczne

23500.00

345 

Evans R

PL

Studia

informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

145     
 

Thomas P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

SELECT NazwiskoPrac,
NazwaWydziału, Pensja
FROM Wykładowcy L
WHERE Pensja>
      

 (SELECT AVG(Pensja)

        FROM Wykładowcy
        WHERE
L.NazwaWydziału
=
NazwaWydziału)

background image

Zapytania zagnieżdżone -
przykład

Słowo "strukturalny" w strukturalnym języku zapytań (SQL)
pierwotnie odnosiło się do możliwości zagnieżdżania zapytań w
instrukcjach SELECT.

Na przykład, aby znaleźć osobę, która zarabia więcej niż Jones

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     

 

DaviasT

L

Studia

informatyczne

16000.oo

237     
 

Jones S      

SL

Studia
informatyczne

23500.00

345 

Evans R

PL

Studia

informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

145     
 

Thomas P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

SELECT Nrprac,
NazwiskoPrac
FROM Wykładowcy
        WHERE Pensja >
        (

SELECT

Pensja

        FROM

Wykładowcy

        WHERE

NazwiskoPrac

=
'Jones S’

'

)

SQL wykonuje

na początku najbardziej

wewnętrzne zapytanie

, którego wynik

jest

porównywany

z

wynikiem

zwracanym przez najbardziej zewnętrzne
zapytanie.

background image

Złączenia tabel - przykład

SQL wykonuje

złączenia relacyjne

przez wskazanie

wspólnych
atrybutów w klauzuli WHERE instrukcji SELECT. Na przykład
poniższa
instrukcja SELECT wydobywa dane z tabel Wykładowcy i
Moduły, które
są istotne dla osób pracujących na wydziale ‘studia
informatyczne’.

Konkretny warunek (lub warunki) użyty do określenia

złączenia jest
nazywany warunkiem złączenia. W powyższym przykładzie
warunkiem
złączenia jest L.NrPrac = M.NrPrac.

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     
 

DaviasT

L

Studia
informatyczne

16000.oo

237     

 

Jones S      

SL

Studia

informatyczne

23500.00

345 

Evans R

PL

Studia
informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

145     

 

Thomas P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

SELECT NazwiskoPrac,
Pensja, NazwaModulu
FROM

Wykladowcy L,

Modufiy M

WHERE L.NrPrac =
M.NrPrac

background image

Inne złączenia tabel

background image

Złączenie (złączenie naturalne)
tabel

background image

Złączenie (złączenie naturalne)
tabel

background image

Złączenie (złączenie naturalne)
tabel

background image

Złączenie (złączenie naturalne)
tabel

background image

Złączenie (złączenie naturalne)
tabel

NATURAL JOIN

lub

JOIN

wykonuje złączenie dwóch tabel,

korzystając ze związku klucz główny - klucz obcy
(wtórny), o których informacja jest przechowywana w
definicji tabel, przy założeniu, ze kolumny złączenia mają
tę samą nazwę w obu tabelach.
Operator złączenia naturalnego może być użyty w klauzuli
FROM. Jeżeli nazwa klucza głównego-klucza obcego są
rożne, to zapytanie może mieć następującą postać:

SELECT NazwaModułu, NazwiskoPrac
FROM Wykładowcy

NATURAL JOIN

Moduły

Jeżeli nazwa jest różna, musielibyśmy przepisać
zapytanie w następujący sposób:

SELECT NazwaModulu, NazwiskoPrac

FROM Wykładowcy L

JOIN

Moduły M

ON L.NrPrac = M.KodPrac

background image

Złączenie (złączenie naturalne)
tabel

background image

Własności złączenia
naturalnego

background image

Własności złączenia
naturalnego

background image

Złączenie Θ-join

background image

Złączenie Θ-join

background image

Złączenie warunkowe -
przykład

background image

Złączenie zewnętrzne tabel

background image

Złączenie zewnętrzne
lewostronne

background image

Złączenie zewnętrzne
lewostronne

background image

Złączenie zewnętrzne
prawostronne

background image

Złączenie zewnętrzne
prawostronne

background image

Złączenie zewnętrzne pełne
FULL OUTER JOIN

background image

93

Przykłady złączeń

Tabele:

Kobiety Faceci

imie

Wiek

Anna

23

Maria

34

Sabina

43

Teresa

55

Wanda

33

Edyta

56

Zofia

23

Mirosława

33

Imie

Wiek

Jan

33

Henryk

55

Józef

21

Marian

18

Tomasz

44

Zbigniew

76

SELECT Faceci.Imie AS Pan, Faceci.Wiek AS
WiekPana,
Kobiety.Imie AS Pani, Kobiety.Wiek AS
WiekPani
FROM Faceci

NATURAL JOIN

Kobiety;

WYNIK=Zbiór pusty, bo złączenie naturalne
wymaga równości wszystkich kolumn

background image

94

Przykłady złączeń cd..

SELECT Faceci.Imie AS Pan, Faceci.Wiek AS WiekPana,
Kobiety.Imie AS Pani, Kobiety.Wiek AS WiekPani

FROM Faceci

JOIN

Kobiety ON Faceci.Wiek = Kobiety.Wiek

ORDER BY WiekPana, Pan, WiekPani;

Pan

WiekPana

Pani

WiekPani

Jan

33

Wanda

33

Jan

33

Mirosława

33

Henryk

55

Teresa

55

SELECT Faceci.Imie AS Pan, Faceci.Wiek AS WiekPana,
Kobiety.Imie AS Pani, Kobiety.Wiek AS WiekPani
FROM Faceci

NATURAL JOIN

Kobiety;

Wynik=zbiór pusty

background image

95

Przykłady złączeń cd..

SELECT Faceci.Imie AS Pan, Faceci.Wiek AS WiekPana,
Kobiety.Imie AS Pani, Kobiety.Wiek AS WiekPani

FROM Faceci

JOIN

Kobiety ON Faceci.Wiek <= Kobiety.Wiek

ORDER BY WiekPana, Pan, WiekPani;

Pan

WiekPana

Pani

WiekPani

Marian

18

Anna

23

Marian

18

Zofia

23

Marian

18

Mirosława

33

Marian

18

Maria

34

…………..

…………..

…………..

…………..

Henryk

55

Teresa

55

Henryk

55

Edyta

56

background image

96

Złączenie RIGHT JOIN

SELECT … FROM
T1

RIGHT JOIN

T2

ON

<warunek złączenia>

WHERE <warunek wyboru>;

WYNIK=Prawie jak „zwykłe” złączenie, z tym, że
wiersze z

prawej

tabeli nie mające odpowiedników

w lewej tabeli są uzupełniane wartościami NULL

Kolejność tabel jest istotna!

background image

97

Przykłady złączeń cd..

SELECT * FROM Faceci

RIGHT JOIN

Kobiety
ON Faceci.Wiek= Kobiety.Wiek;

Pan

WiekPana

Pani

WiekPani

Null

Null

Anna

23

Null

Null

Maria

34

Null

Null

Sabina

43

Henryk

55

Teresa

55

Jan

33

Wanda

33

Null

Null

Edyta

56

Null

Null

Zofia

23

Jan

33

Mirosława

33

background image

98

Przykłady złączeń cd..

SELECT * FROM Kobiety

LEFT JOIN

Faceci

ON Faceci.Wiek= Kobiety.Wiek;

Pani

WiekPani

Pan

WiekPana

Anna

23

Null

Null

Maria

34

Null

Null

Sabina

43

Null

Null

Teresa

55

Henryk

55

Wanda

33

Jan

33

Edyta

56

Null

Null

Zofia

23

Null

Null

Mirosława

33

Jan

33

background image

99

Przykłady złączeń cd..

SELECT * FROM Kobiety

RIGHT JOIN

Faceci
ON Faceci.Wiek = Kobiety.Wiek

;

Pani

WiekPani

Pan

WiekPana

Wanda

33

Jan

33

Teresa

55

Henryk

55

Null

Null

Józef

21

Null

Null

Marian

18

Null

Null

Tomasz

44

Null

Null

Zbigniew

76

Mirosława

33

Jan

33

background image

100

Przykłady złączeń cd..

Konstrukcje

JOIN

i

LEFT JOIN

są często traktowane

jako synonimy, ale to nieprawda:

Jeżeli w tabeli znajdującej się

po prawej

stronie ON w

konstrukcji LEFT JOIN nie ma żadnych wierszy, dla
prawej tabeli użyty zostanie wiersz z samymi
wartościami NULL;

SELECT Kobiety.* FROM Kobiety

JOIN

Faceci

ON Kobiety.Wiek = Faceci.Wiek
WHERE Faceci.Wiek IS NULL;

Wynik jest zbiorem pustym

background image

101

Przykłady złączeń cd..

SELECT Kobiety.* FROM Kobiety

LEFT JOIN

Faceci

ON Kobiety.Wiek = Faceci.Wiek
WHERE Faceci.Wiek IS NULL;

Znajdź wiersze
tabeli Kobiety
nie mające
odpowiedników
w tabeli Faceci

imie

Wiek

Anna

23

Maria

34

Sabina

43

Edyta

56

Zofia

23

background image

Złączenie zewnętrzne pełne
FULL OUTER JOIN

background image

Złączenie zewnętrzne tabel

W SQL2 występuje również standardowa składnia złączeń
zewnętrznych. Na przykład lewostronne, prawostronne i
obustronne złączenia zewnętrzne zostałyby określone w
SQL2 w następujący sposób:

SELECT *
FROM Wykladowcy L

LEFT OUTER JOIN

Moduly M

ON L.NrPrac = M.KodPrac

SELECT *
FROM Wykladowcy L

RIGHT OUTER

JOIN

Moduly M

ON L.NrPrac = M.KodPrac

SELECT NazwaModulu, NazwiskoPrac
FROM Wykladowcy L

FULL OUTER

JOIN

Moduly M

ON L.NrPrac = M.KodPrac

background image

Iloczyn kartezjański krotek

background image

Iloczyn kartezjański krotek

background image

Suma tabel - przykład

Operator

sumy

języka SQL odpowiada operatorowi sumy

algebry
relacyjnej.

Daje on możliwość połączenia wyników dwóch zgodnych

zapytań.

Na przykład poniższe zapytanie produkuje wynik łączący

informacje na
temat modułów ‘studia informatyczne’ z modułami na
‘wydziale
elektrycznym’.

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     
 

DaviasT

L

Studia
informatyczne

16000.oo

237     

 

Jones S      

SL

Studia

informatyczne

23500.00

345 

Evans R

PL

Studia

informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

145     
 

Thomas
P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

SELECT

NazwaModulu,

Poziom

FROM

Moduly

WHERE KodKursu = 'CSD'

UNION
SELECT

NazwaModulu,

Poziom

FROM

Moduly

WHERE

KodKursu = 'EED'

background image

Suma tabel - przykład

background image

Suma tabel - przykład

background image

Suma tabel - przykład

np.:

background image

Różnica tabel - przykład

Np.:

background image

Różnica tabel - przykład

background image

Różnica tabel z
wykorzystaniem EXCEPT -
przykład

lub

Np.:

background image

Różnica tabel z
wykorzystaniem złączeń -
przykład

Np.:

background image

Iloczyn tabel - przykład

Operator

iloczynu

języka SQL odpowiada operatorowi

iloczynu algebry
relacyjnej.

Daje on możliwość porównywania wyników dwóch zgodnych

zapytań.

Na przykład poniższe zapytanie produkuje wynik wspólnych

informacje na temat modułów ‘studia informatyczne’ z
modułami na
‘wydziale elektrycznym’.

NrPrac

NazwiskoPrac

Status

NazwaWydziału

Pensja

234     
 

DaviasT

L

Studia
informatyczne

16000.oo

237     

 

Jones S      

SL

Studia

informatyczne

23500.00

345 

Evans R

PL

Studia

informatyczne

26500.00

123     

Smith J

L

Studia biznesu

16500.00

145     
 

Thomas
P        

SL

Studia biznesu

23500.00

Tabela

Wykładowcy

SELECT

NazwaModulu,

Poziom

FROM

Moduly

WHERE KodKursu = 'CSD'

INTERSECT
SELECT

NazwaModulu,

Poziom

FROM

Moduly

WHERE

KodKursu = 'EED'

background image

Iloczyn tabel - przykład

background image

Podzielenie tabel (division)

background image

Podzielenie tabel (division)

background image

Operacje z wykorzystaniem
kursora

background image

Operacje z wykorzystaniem
kursora

background image

Operacje pozycyjne
UPDATE, DELETE z
wykorzystaniem kursora

background image

Perspektywy – widoki
(views)

background image

Perspektywy – widoki
(views)

background image

Modyfikacja perspektyw

background image

Modyfikacja perspektyw
cd..

background image

Modyfikacja perspektyw
cd..

background image

Modyfikacja perspektyw
cd..

background image

Modyfikacja perspektyw
cd..

background image

Modyfikacja perspektyw
cd..

background image

129

Zabezpieczenia baz
danych

background image

130

Zabezpieczenia baz
danych cd..

background image

131

Spójność bazy danych

background image

132

Rodzaje spójności bazy
danych

background image

133

Integralność referencyjna -
przykład

Integralność referencyjną definiujemy już w SQL89
przez specyfikację klucza obcego. Poniższe
definicje określają, że

NrPrac

w tabeli

Moduły

ma

zostać ustawione na

null

, jeżeli powiązany rekord

wykładowcy

jest usuwany.

Więzy

integralności

referencyjnej

określają

również, że jeśli dokonamy jakiejkolwiek zmiany w
numerze pracownika w rekordzie

wykładowcy

, to

zmiana ta powinna zostać odzwierciedlona w
powiązanych rekordach

modułów

.

background image

134

Integralność referencyjna
cd..przykładu

CREATE TABLE

Wykładowcy

          (Nrprac Number(5),
           Nazwiskoprac Varchar(15),
            Status Varchar(10),
            NazwaWydziału(Varchar(20),
            Pensja Decimal(7, 2),
            PRIMARY KEY (Nrprac))

background image

135

Integralność referencyjna
cd..przykładu

CREATE TABLE

Moduły

(NazwaModulu Char(15),
    Poziom Smallint,

 KodKursu Char(3),
 NrPrac Number(5),
PRIMARY KEY (NazwaModutu)

FOREIGN KEY (Nrprac) references

Wykladowcy)

   

ON DELETE SET NULL

ON UPDATE CASCADE

)

background image

136

Integralność referencyjna
cd..

W SQL2 opcjami propagacji są

NO ACTION

,

CASCADE, SET DEFAULT i SET NULL

.

Opcje

CASCADE

i

SET NULL

odpowiadają

odpowiednio operacji kaskadowej propagacji

(CASCADES) i ustawienia NULL (NULLIFIES).

Opcja

NO ACTION

częściowo odpowiada, ale

nie do końca, operacji RESTRICTED.

Opcja

SET DEFAULT

wymusza na systemie

używanie zadeklarowanej wartości domyślnej

background image

137

Integralność dziedziny

Integralność dziedziny możemy częściowo
określać podając odpowiedni typ danych
dla kolumny.

Możemy tez użyć klauzuli

CHECK

, aby

wymusić poprawne modyfikacje.

Możemy na przykład wymusić, aby
wartość wstawiana do kolumny poziom
była w określonym zbiorze lub aby numery
pracowników mieściły się w podanym
zakresie:

background image

138

Integralność dziedziny -
przykłady

CREATE TABLE Moduły

                                (NazwaModułu Char(IS),

                                Poziom Smallint,

                                KodKursu Char(3),

                                Nrprac Number(5),

                                PRIMARY KEY (NazwaModułu)

                                FOREIGN KEY (Nrprac IDENTIFIES

Wykładowcy)

                                ON DELETE RESTRICT

                                ON UPDATE CASCADE

                               

CHECK (Poziom IN 1, 2, 3))

              CREATE TABLE Wykładowcy

                                NrPrac Number(5),

                                NazwiskoPrac Varchar(15),

                                Status Varchar( 10),

                                NazwaWydziatu(Varchar(20),

                                Pensja Decimal(7, 2),

                                PRIMARY KEY (NrPrac)

                               

CHECK (NrPrac BETWEEN 100 AND

10999

))

background image

139

Integralność danych cd..

Mówimy, że baza danych ma

właściwość

integralności,

kiedy istnieje odpowiedniość

między faktami przechowywanymi w bazie danych

a światem rzeczywistym modelowanym przez tą

bazę.

Tą właśnie integralność zapewniają

reguły

integralności,

które można podzielić na dwa

rodzaje:

integralność encji

oraz

integralność

referencyjną

.

Integralność encji

dotyczy kluczy głównych. Mówi

ona, że każda tabela musi mieć klucz główny i że

kolumna lub kolumny wybrane jako klucz główny

powinny być jednoznaczne i nie zawierać wartości

null. Wynika stąd, że w tabeli są zabronione
powtórzenia wierszy.

background image

140

Integralność danych cd..

Integralność referencyjna

dotyczy

kluczy obcych

.

Mówi ona, że wartość klucza obcego może się

znajdować tylko w jednym z dwóch stanów.

Wartość klucza obcego odwołuje się do wartości

klucza głównego w tabeli w bazie danych.

Czasami wartość klucza obcego może być null, co

oznacza że nie ma związku między

reprezentowanymi obiektami w bazie danych albo

że ten związek jest nieznany.

Utrzymywanie integralności referencyjnej oprócz

określenia czy klucz obcy jest null, czy nie

obejmuje również określenie

więzów propagacji

.

Mówią one co powinno się stać z powiązaną

tabelą, gdy modyfikujemy wiersz lub wiersze w

tabeli docelowej.

background image

141

Integralność danych cd..

Są trzy możliwości, które określają co się będzie
działo z docelowymi i powiązanymi krotkami dla
każdego związku między tabelami w naszej
bazie:

Ograniczone usuwanie

(Restricted). Podejście

ostrożne – nie dopuszcza do usuwania
rekordu nadrzędnego, jeśli istnieją rekordy
podrzędne.

Kaskadowe usuwanie

(Cascades). Podejście

ufne – przy usuwaniu rekordu nadrzędnego
usuwa także rekordy podrzędne.

Izolowane usuwanie

(Isolated). Podejście

wyważone – usuwa jedynie rekord nadrzędny.

background image

142

Asercje

Więzy mogą być nazywane i określane niezależnie od

jakiejkolwiek tabeli lub dziedziny. W takim wypadku
więzy są
nazywane asercjami.

Możemy

na

przykład

zadeklarować

asercję,

określającą
następujące sprawdzanie niezależnie od tabeli
Wykładowcy:

CREATE ASSERTION NrPracCheck
CHECK (NrPrac BETWEEN 100 AND 10999)

background image

143

Asercje

Za każdym razem, gdy instrukcja SQL dokonuje wstawienia,

modyfikacji
bądź usunięcia wiersza tabeli, istnieje możliwość, że więzy
mogą zostać
naruszone.

SQL89 wymaga, aby system sprawdzał naruszanie więzów

pod koniec
wykonywania każdej instrukcji.

SQL2 umożliwia sprawdzanie więzów pod koniec transakcji.

Jeżeli
więzy są sprawdzane po każdej instrukcji, to mówimy , ze
sprawdzanie
odbywa się w trybie natychmiastowym. Jeżeli sprawdzenie
następuje
pod koniec transakcji, to mówimy, że sprawdzanie odbywa
się w trybie
opóźnionym.

Dlatego dla każdej definicji więzów możemy dołączyć

specyfikację tego,
czy więzy są sprawdzane z opóźnieniem (DEFERRABLE), czy
sprawdzane natychmiast (NOT DEFERRABLE).

Początkowy tryb więzów może być określony jako INITIALLY

DEFERRED lub INITIALLY IMMEDIATE. Tryb sprawdzania
więzów może
być następnie w czasie sesji zmieniony za pomocą instrukcji
SET
CONSTRAINTS, która określa, czy dla listy nazwanych
więzów
wykonywać sprawdzanie opóźnione czy natychmiastowe.

background image

144

Zatwierdzanie zmian w bazie
danych

Instrukcje

INSERT, DELETE, UPDATE

nie

dokonują same trwałych zmian w bazie
danych. Aby zmiany wprowadzone przez nie
utrwalić, należy wykonać instrukcję

COMMIT

.

Można również zrezygnować z wprowadzania
zmian do bazy danych, wycofując je za
pomocą instrukcji

ROLLBACK.

W PostgreSQL domyślnie jest włączona opcja
auto-zatwierdzania więc nie trzeba przy
pojedynczych instrukcjach wykonywać

COMMIT

.


Document Outline


Wyszukiwarka

Podobne podstrony:
cz 3 Języki zapytań do baz danych
cz 2 Języki zapytań do baz danych
BD Wykˆad 1 Wprowadzenie do baz danych
BD Wykad 1 Wprowadzenie do baz danych id 8 (2)
problematyka masoowego dostepu do baz danych mity i fakty mqsixoztwl26gv7afh6a6hsnoalkzz6a5q7na7a M
dostep uzytkownikow mobilnych do baz danych wap, pqa, mbts zkpjy2ly76foe7e2jm5bgz7ytxqqyaxaghe36ha
lab1Wstęp teoretyczny do baz danych, bazy danych
Wprowadzenie do baz danych, Bazy Danych
problematyka masoowego dostepu do baz danych mity i fakty mqsixoztwl26gv7afh6a6hsnoalkzz6a5q7na7a M
Wprowadzenie do baz danych
Dostep uzytkownikow mobilnych do baz danych WAP, PQA, MBTS
Wprowadzenie do baz danych wpbada
Wprowadzenie do baz danych wpbada
Do Baz Danych
Wprowadzenie do baz danych 2

więcej podobnych podstron