Podstawy Relacyjnych Baz Danych Wyklad Cz2 SQL

You might also like

You are on page 1of 56

Podstawy SQL

dr in. Maria Sipowicz

Wprowadzenie do SQL

SQL - Structured Query Language -strukturalny jzyk


zapyta
wiatowy standard przeznaczony do definiowania, operowania
i sterowania danymi w relacyjnych bazach danych
Powsta w firmie IBM pod koniec lat 70-tych
Wystpuje w produktach wikszoci firm produkujcych
oprogramowanie do zarzdzania bazami danych
Polecenia SQL maj posta podobn do zda w jzyku
angielskim
Istnieje szereg rnych dialektw SQL
SQL uywany jest jako standardowe narzdzie umoliwiajce
dostp do danych w rnych rodowiskach, z rnym sprztem
komputerowym i rnymi systemami operacyjnymi
Jzyk SQL jest niewraliwy na rejestr czcionki, czyli wielkie i
mae litery nie s rozrniane

Wprowadzenie do SQL
SQL zapewnia obsug:
zapyta - wyszukiwanie danych w bazie
operowania danymi - wstawianie, modyfikowanie i usuwanie
definiowania danych - dodawanie do bazy danych nowych tabel
sterowania danymi - ochrona przed niepowoanym dostpem

Uytkownik okrela operacje jakie maj by wykonane nie wnikajc w to,


jak maj by wykonane
Najprostsza posta zapyta w SQL suy do wybierania rekordw pewnej
tabeli, ktre speniaj okrelony w zapytaniu warunek
Takie najprostsze zapytanie, jak zreszt prawie wszystkie zapytania w tym
jzyku, konstruuje si za pomoc trzech sw kluczowych: SELECT,
FROM i WHERE

Klauzula SELECT FROM


SELECT - podstawowa klauzula SQL - uywana do
wyszukiwania danych w tabeli
Wystpuje wraz z klauzul FROM

SELECT kolumna1,kolumna2
FROM nazwa-tabeli;
W klauzuli SELECT zostaj okrelone nazwy kolumn.
Klauzula FROM suy do okrelenia tabeli (tabel), ktrej
dotyczy zapytanie.

Klauzule SELECT i FROM

SELECT *
FROM nazwa-tabeli;
Gwiazdka oznacza, e naley wyszuka wszystkie kolumny
tabeli
Utwrz zapytanie, ktre wywietli ca tabel KSIKA.

SELECT *
FROM Ksika;

Klauzule SELECT i FROM


Utwrz zapytanie, ktre z tabeli KSIKA wywietli
nastpujce pola: Sygnatura ,Tytu, Nazwisko_A

SELECT Sygnatura, Tytu, Nazwisko_A


FROM Ksika;
SELECT Ksika.Sygnatura,
Ksika.Tytu,
Ksika.Nazwisko_A
FROM Ksika;

Klauzule SELECT i FROM


Utwrz zapytanie, ktre na podstawie tabeli Wypoyczenia
obliczy, ile dni temu ksika zostaa wypoyczona:

SELECT Sygnatura, Date()-[Data_Wypo]


FROM Wypoyczenia;

Gwna posta zapytania

Skada si z klauzuli SELECT i FROM, podanych


w nastpujcej kolejnoci, jedna po drugiej:
SELECT nazwa_kolumny lub lista
nazw_kolumn lub * lub wyraenie
arytm
FROM nazwa_tabeli lub lista
nazw_tabel;

Gwna posta zapytania

List nazw_kolumn oraz list nazw_tabel oddziela si


przecinkami. Naley uywa dokadnych nazw kolumn
i tabel :

[nazwa_tabeli].nazwa_kolumny,[nazwa
_tabeli].nazwa_kolumny

10

Symbol gwiazdki (*) oznacza wybranie wszystkich pl.


Wyraenia arytmetyczne uyte w klauzuli SELECT s
wywietlane tak, jakby wyraenia te byy kolumnami tabeli.
Jeeli w nazwie tabeli lub kolumny wystpuj polskie litery, to
taka nazwa powinna by ujta w nawias kwadratowy

Uporzdkowanie wierszy, klauzula ORDER BY


SELECT ...
FROM ...
ORDER BY nazwy(a)_kolumn(y) lub
wyraenie lub
numer(y)_kolumn(y)
[ASC/DESC];

Klauzula ORDER BY suy do uporzdkowania


wynikw zapytania

Uporzdkowanie wierszy
Utwrz zapytanie, ktre z tabeli KSIKA wywietli
nastpujce pola: Sygnatura,Tytu, Nazwisko_A i posortuje
rekordy wedug Nazwiska autora:

SELECT Sygnatura, Tytu, Nazwisko_A


FROM Ksika
ORDER BY Nazwisko_A;

Uporzdkowanie wierszy
Utwrz zapytanie, ktre wywietli ca tabel CZYTELNIK i
posortuje rekordy wedug Nazwiska czytelnika, raz rosnco, a
raz malejco:
SELECT *
FROM Czytelnik
ORDER BY Nazwisko_Cz ASC ;
SELECT *
FROM Czytelnik
ORDER BY Nazwisko_Cz DESC ;

11

12

Uporzdkowanie wierszy
Utwrz zapytanie, ktre z tabeli CZYTELNIK wywietli
nastpujce dane: ID czytelnika, Nazwisko, imi, typ
czytelnika. Posortuj rekordy wedug Nazwiska i typu
czytelnika:
SELECT ID, Nazwisko_Cz, Imi_Cz, [typ czytelnika]
FROM Czytelnik
ORDER BY Nazwisko_Cz, [typ czytelnika];

Uporzdkowanie wierszy
Utwrz zapytanie, ktre z tabeli CZYTELNIK wywietli
nastpujce dane: ID czytelnika, Nazwisko, imi, typ
czytelnika. Posortuj rekordy wedug Nazwiska i typu
czytelnika, uywajc numerw kolumn:
SELECT ID, Nazwisko_Cz, Imi_Cz, [typ czytelnika]
FROM Czytelnik
ORDER BY 2, 4 ;

13

14

Sortowanie wynikw zapyta

15

Klauzula ORDER BY jest wykorzystywana do sortowania wynikw


Wyniki zapytania bd uporzdkowane wzgldem zawartoci kolumny (lub
kolumn), ktre okrelimy w klauzuli ORDER BY
Sortowanie mona przeprowadzi zarwno alfabetycznie jak i wzgldem
wartoci numerycznych oraz kolumn zawierajcych dane w formacie Date
Kolejno kolumn nie zaley od kolumny uywanej do sortowania
wynikw zapyta - kolumny pozostaj zawsze w tym samym porzdku,
bez wzgldu na kolumn, ktrej uywamy w klauzuli ORDER BY
Dodanie do poprzedniego polecenia:
ORDER BY Stanowisko;
spowoduje, e wyniki zostan posortowane wedug kolumny Stanowisko
(w porzdku rosncym)
Wyniki zapyta mog by posortowane zarwno rosnco (opcja
domylna), jak i malejco
Dla sortowania malejcego, uywamy w klauzuli ORDER BY sowa
kluczowego DESC (dla rosncego sowa ASC normalnie jest pomijane)

SELECT Sygnatura, Tytu, Nazwisko_A


FROM Ksika;

SELECT Sygnatura, Tytu, Nazwisko_A


FROM Ksika
ORDER BY Nazwisko_A;

Wybr wierszy z tabel, klauzula WHERE

Aby zapytanie wybierao dane tylko z


niektrych rekordw naley zastosowa
kryterium wyboru rekordw.
Do tego celu suy klauzula WHERE, po
ktrej nastpuje warunek w postaci
wyraenia.
Zapytanie wybierze tylko te rekordy, dla
ktrych wyraenie to bdzie spenione.

18

operator_porwnania warto

Wybr wierszy z tabel, klauzula WHERE


SELECT ...
FROM ...
WHERE nazwa_kolumny

19

Klauzula WHERE pozwala na wybranie z tabeli tych wierszy, ktre


speniaj okrelone warunki
SELECT *
FROM Ksika
WHERE Nazwisko_A = Boratyn";
Z tabeli zostan wybrane tylko te rekordy, dla ktrych w polu
Nazwisko_A jest wpisane Boratyn

SELECT *, Nazwisko_A
FROM Ksika
WHERE Nazwisko_A = Boratyn;

Wybr wierszy z tabel, klauzula WHERE

Predykaty (warunki w klauzuli WHERE) skadaj


si z dwch poczonych wyrae.

Logiczne porwnania
IN (lista wartoci)
BETWEEN (przedzia wartoci)
LIKE 'napis wyszukiwania'
NULL test wartoci

Typy predykatw w klauzuli WHERE:

Wybr wierszy z tabel, klauzula WHERE

Typy predykatw w klauzuli WHERE:


Logiczne porwnania

21

22

logiczne operatory porwnania:


Rwne (=) lub nie rwne (!=, ^=, <>)
Wiksze (>) lub wiksze bd rwne (>=, !<, ^<)
Mniejsze (<) lub mniejsze bd rwne (<=, !>, ^>)

Utwrz zapytanie, ktre wybierze wszystkie


ksiki, za wyjtkiem tych wydanych w roku
1995:
SELECT Sygnatura, Tytu, Nazwisko_A,
Imi_A, Wydawnictwo, [Rok wydania]
FROM Ksika
WHERE [Rok wydania] <> 1995;

SELECT *
FROM Ksika
WHERE [Rok wydania] <> 1995;

Wybr wierszy z tabel, klauzula WHERE

Typy predykatw w klauzuli WHERE:


IN (lista wartoci)

Operator IN bdcy operatorem porwnania ze


zbiorem, jest skrtem zapisu "rwny ktrej z tych
wartoci:
NUMDZ IN (30, 40)

NUMDZ = 30 OR NUMDZ = 40

Co jest rwnowane:

Utwrz zapytanie, ktre wybierze czytelnikw z


wydziaw ZiE, ETI lub OiO:
SELECT *
FROM Czytelnik
WHERE Wydzia IN (ZiE, ETI, OiO);

Utwrz zapytanie, ktre wybierze czytelnikw z wydziaw


za wyjtkiem ZiE, ETI lub OiO:
SELECT *
FROM Czytelnik
WHERE Wydzia NOT IN (ZiE, ETI, OiO);

25

Wybr wierszy z tabel, klauzula WHERE

Typy predykatw w klauzuli WHERE:


BETWEEN (przedzia wartoci)
Operator BETWEEN znajduje wiersze w ktrych
wartoci nale do okrelonego przedziau
wartoci:
ZAROB BETWEEN 2000 AND 2500
Co jest rwnowane:

>= 2000 AND ZAROB <= 2500

Utwrz zapytanie, ktre z tabeli KSIKA


wybierze nastpujce pola: Sygnatura, Tytu,
Nazwisko_A, Imi_A, Wydawnictwo i Rok
wydania, dla ksiek wydanych midzy rokiem
1986 a 1995.
SELECT Sygnatura, Tytu, Nazwisko_A,
Imi_A, Wydawnictwo, [Rok wydania]
FROM Ksika
WHERE [Rok wydania] Between 1986 AND 1995;

27

Wybr wierszy z tabel, klauzula WHERE

Typy predykatw w klauzuli WHERE:


LIKE "napis wyszukiwania"

pojedynczy nie okrelony znak


oznacza zero lub wicej znakw

"zaczynajcy si od napisu"
"koczcy si na napisie"
"zawierajcy napis"
Znaki uniwersalne:

29

Predykat LIKE umoliwia wykonywanie czciowych


porwna, takich jak:

"_" lub "?"


"%" lub "*"

Utwrz zapytanie, ktre z tabeli CZYTELNK wybierze


wszystkie osoby, ktrych nazwiska kocz si na "ski:
SELECT *
FROM Czytelnik
WHERE Nazwisko_Cz Like "*ski";

Utwrz zapytanie, ktre z tabeli CZYTELNK wybierze


wszystkie osoby, ktrych nazwiska skadaj si z czterech
liter:
SELECT *
FROM Czytelnik
WHERE Nazwisko_Cz Like "????";

32

31
Formuowanie warunku
Wartoci NULL nie podlegaj adnym operacjom
porwnania, gdy jest ona traktowana jako warto
nieznana
SQL umoliwia testowanie pl w poszukiwaniu wartoci
NULL
Uycie w klauzuli WHERE zwrotu IS NULL jest
wykorzystywane do sprawdzania czy pole zawiera t
warto
Zamiast standardowego operatora porwnania pojawia
si sowo IS
Sowo NULL nie jest zawarte w cudzysowie
Mona dokona przeszukania danych w celu wybrania
obiektw posiadajcych wartoci
W tym celu uywa si wyraenia IS NOT NULL

Wielokrotne warunki wyszukiwa

SELECT ...
FROM ...
WHERE warunek AND warunek;

Wielokrotne warunki wyszukiwa

Utwrz zapytanie, ktre z tabeli CZYTELNIK


wywietli osoby bdce studentami ZiE
SELECT *
FROM Czytelnik
WHERE (Wydzia = ZiE) AND
(Typ czytelnika = student);

33

Alternatywne warunki wyszukiwa

SELECT ...
FROM ...
WHERE warunek OR warunek;

35

czenie predykatw - zasady pierwszestwa


Wszystkie logiczne operatory porwna maj rwny priorytet
NOT
AND
OR

Operacje dotyczce operatorw o rwnym


priorytecie wykonywane s od lewej do prawej.
Wyraenia w nawiasach s zawsze wykonywane
jako pierwsze.

Operatory logiczne w klauzuli WHERE

37

38

Operacje wykonywane w klauzuli WHERE podlegaj zasadom logiki


boolowskiej - wynik przyjmuje zawsze jedn z wartoci: prawda lub fasz
W przypadku, gdy wynik wyraenia to prawda, wiersz jest wybierany, w
przeciwnym przypadku pomijany
Operator AND zwraca wynik prawda, gdy wyraenia po obu stronach
operatora s prawdziwe - jeeli cho jedno z nich jest nieprawdziwe,
wtedy cae wyraenie zwraca jako wynik warto fasz
Operator OR zwraca wynik prawda, gdy jedno z wyrae po prawej lub
po lewej stronie operatora jest prawdziwe - gdy oba wyraenia s
prawdziwe, wynik te przyjmuje warto prawda
Operatora NOT uywamy do zaprzeczenia wartoci wyraenia
Wielokrotne operatory logiczne mog by wykorzystywane do utworzenia
zoonych instrukcji WHERE, w ktrych wykorzystywanych jest kilka
wyrae jednoczenie
Formuujc takie wyraenia naley pamita o priorytecie operatorw w
celu zapewnienia poprawnoci obliczenia wartoci wyraenia

Formuowanie warunku
W wyniku porwnania powstaje warto logiczna TRUE (prawda) lub
FALSE (fasz)
Wartoci logiczne mona czy w wyraenia logiczne za pomoc
operatorw logicznych AND, OR i NOT
Priorytet operatorw wykorzystywanych w budowie wyrae:
operatory porwnania, NOT, AND, OR
Porwnywanie tekstw - dwa teksty s rwne, jeli wystpuj w nich
kolejno te same znaki
Przy tecie nierwnociowym tekstw, tzn. przy wykonywaniu
porwna takich jak < lub >=, o wartoci porwnania decyduje, czy
kolejne znaki z tekstu z lewej strony s alfabetycznie wczeniejsze, czy
dalsze w stosunku do znakw z tekstu umieszczonego po prawej stronie
wyraenia

Przykady
Adamski > Adamowicz
Adam < Adamowicz

Rzutowanie i selekcja
Selekcja - jest to utworzenie poziomego podzbioru wierszy z
pojedynczej tabeli. Ten rodzaj klauzuli SELECT zwraca niektre
wiersze i wszystkie kolumny z tabeli:
SELECT *
FROM Czytelnik
WHERE wydzia=ZiE;
Projekcja - jest to utworzenie pionowego podzbioru z kolumn z
pojedynczej tabeli. Ten rodzaj klauzuli SELECT zwraca niektre
kolumny i wszystkie wiersze z tabeli:
SELECT sygnatura,tytu,nazwisko_A
FROM Ksika;

39

Wykonywanie oblicze na danych

41

42

Jzyk SQL pozwala na wykonywanie oblicze na danych i pokazywanie


ich wynikw w postaci wykonanych zapyta
Wykonanie oblicze polega na zastpieniu pozycji z listy nazw kolumn
(w klauzuli SELECT) przez odpowiednie wyraenia
Wyraenie nie musi koniecznie zawiera nazw kolumn, mona uywa
tylko liczb, albo wyrae algebraicznych lub acuchw znakw
Posta polecenia:
SELECT 'Tekst objaniajcy', Stanowisko, Pensja*2
FROM NAZWISKA
WHERE Pensja >= 900;
Wyr1
Stanowisko
Wyr2
Wynik zapytania
Tekst objaniajcy urzdnik
1 800,00 z
Tekst objaniajcy kierownik
6 000,00 z
Tekst objaniajcy urzdnik
2 200,00 z
Tekst objaniajcy ksigowy
4 000,00 z

Wykonywanie oblicze w klauzuli WHERE


Podobnie jak mona wykonywa obliczenia na danych wybranych z
tabeli, mona rwnie wykonywa obliczenia w klauzuli WHERE, aby
pomc w filtrowaniu rekordw
Przykad polecenia
SELECT 'Tekst objaniajcy' AS KOMENTARZ,
Stanowisko, Pensja*2 AS PODWYZKA
FROM NAZWISKA
WHERE Pensja*2 >= 2*900;

Cech charakterystyczn relacyjnych baz danych jest to, e kolejno


kolumn i wierszy nie jest istotna - nie s one traktowane sekwencyjnie
Mona wybiera rekordy z bazy danych w dowolnym porzdku
Domylnie pojawiaj si w kolejnoci, w jakiej byy wprowadzone
Jednak czsto przegldajc rekordy chcemy t kolejno okreli, np.
wzgldem zawartoci jednej z kolumn

Operator DISTINCT i UNIQUE


Aby wyeliminowa dublujce si wiersze naley doczy sowo
kluczowe DISTINCT lub jego synonim UNIQUE na pocztku
listy w klauzuli SELECT:

SELECT DISTINCT Tytu,


Nazwisko_A, Imi_A
FROM [KSIKA];
Zastosowanie operatora DISTINCT bd UNIQUE pozwala na
wybranie unikalnych wartoci spord wszystkich wystpujcych
w danej kolumnie.

Operator DISTINCT i UNIQUE


Posta polecenia z powtarzajcymi si
rekordami
SELECT tytu
FROM Ksika;

Wynik zapytania

Tytu
MSAccess 2.0 System. Oblicze. Ku aplikacjom
MSAccess 2.0 System. Oblicze. Ku aplikacjom
MSAccess 2.0 System. Oblicze. Ku aplikacjom
MSAccess 2.0 System. Oblicze. Ku aplikacjom
MSAccess 2.0 System. Oblicze. Ku aplikacjom
Alchemia pamici
Alchemia pamici
Alchemia pamici
Spjrz w okna Windows
Spjrz w okna Windows
Spjrz w okna Windows
Spjrz w okna Windows
Obiektowe bazy danych
Obiektowe bazy danych
Obiektowe bazy danych
Obiektowe bazy danych
Obiektowe bazy danych
Podstawy rachunkowoci
Podstawy rachunkowoci
Wprowadzenie do psychologii matematycznej
Wprowadzenie do psychologii matematycznej
Wprowadzenie do psychologii matematycznej
Wprowadzenie do psychologii matematycznej
Wprowadzenie do psychologii matematycznej
Wprowadzenie do filozofii
Wprowadzenie do filozofii
Wprowadzenie do filozofii

44

Operator DISTINCT i UNIQUE


Przykad jeeli chcemy dowiedzie si jakie wystpuj
tytuy (bez powtrze) w tabeli KSIKA, to mona
sformuowa zapytanie:
SELECT DISTINCT tytu
FROM Ksika
ORDER BY tytu;

Wynik zapytania

Tytu
Alchemia pamici
MSAccess 2.0 System. Oblicze. Ku aplikacjom
Obiektowe bazy danych
Podstawy rachunkowoci
Spjrz w okna Windows
Wprowadzenie do filozofii
Wprowadzenie do psychologii matematycznej

Funkcje agregujce

Funkcja COUNT(nazwa_kolumny)
Funkcja SUM(nazwa_kolumny)
Funkcja AVG(nazwa_kolumny)
Funkcja MIN(nazwa_kolumny)
Funkcja MAX(nazwa_kolumny)

45

46

W SQL dostpnych jest kilka funkcji agregujcych dziaajcych na grupie


wartoci zwracanych przez zapytanie a nie na pojedynczej wartoci pola
Na przykad moemy w tabeli policzy liczb wierszy speniajcych
okrelone kryteria lub mona wyliczy warto redni dla wszystkich
wartoci z wybranej kolumny
Funkcje te dziaaj na wszystkich wierszach w tabeli, na pewnej grupie
wierszy wybranej klauzul WHERE lub na grupach danych wybranych
klauzul GROUP BY

Grupowanie rekordw, klauzula GROUP BY


SELECT nazwy_kolumn, funkcje_agregujce
FROM nazwa_tabeli
[WHERE warunek]
GROUP BY nazwy_kolumn
[ORDER BY nazwy_kolumn / numery_kolumn
[ASC/DESC]];
W nawiasach kwadratowych podane s klauzule wystpujce opcjonalnie. W
klauzuli SELECT mog wystpowa tylko te nazwy kolumn, ktre wystpuj
na licie GROUP BY, funkcje agregujce dotyczce innych kolumn w tabeli
oraz wyraenia stae.

Grupowanie rekordw, klauzula GROUP BY

GROUP BY

Alchemia pamici
Alchemia pamici
Alchemia pamici
Podstawy rachunkowoci
Podstawy rachunkowoci
Obiektowe bazy danych
Wprowadzenie do filozofii
Wprowadzenie do filozofii
Spjrz w okna Windows
Spjrz w okna Windows

SELECT Tytu, Count(sygnatura), Sum(cena)


FROM Ksika
GROUP BY Tytu;
Alchemia pamici
Alchemia pamici
Podstawy rachunkowoci
Obiektowe bazy danych
Wprowadzenie do filozofii
Alchemia pamici
Podstawy rachunkowoci
Spjrz w okna Windows
Wprowadzenie do filozofii
Spjrz w okna Windows

47

48

Grupowanie rekordw, klauzula GROUP BY

Spjrz w okna Windows

Obiektowe bazy danych


Wprowadzenie do filozofii

Podstawy rachunkowoci

Alchemia pamici

1
2

60

20
40

100

50

SELECT Tytu, Count(sygnatura), Sum(cena)


FROM Ksika
GROUP BY Tytu;
Alchemia pamici
Alchemia pamici
Alchemia pamici
Podstawy rachunkowoci
Podstawy rachunkowoci
Obiektowe bazy danych
Wprowadzenie do filozofii
Wprowadzenie do filozofii
Spjrz w okna Windows
Spjrz w okna Windows

Wybieranie grup rekordw, klauzula HAVING


SELECT nazwy_kolumn, funkcje_agregujce
FROM nazwa_tabeli
[WHERE warunek]
GROUP BY nazwy_kolumn
[HAVING warunek]
[ORDER BY nazwy_kolumn / numery_kolumn
[ASC/DESC]];
Klauzula HAVING suy jako kryterium wyboru grup rekordw.

49

50

Wybieranie grup rekordw, klauzula HAVING

GROUP BY

Alchemia pamici
Alchemia pamici
Alchemia pamici
Podstawy rachunkowoci
Podstawy rachunkowoci
Obiektowe bazy danych
Wprowadzenie do filozofii
Wprowadzenie do filozofii
Spjrz w okna Windows
Spjrz w okna Windows

SELECT Tytu, Count(sygnatura), Sum(cena)


FROM Ksika
GROUP BY Tytu
HAVING Tytu = Alchemia pamici;
Alchemia pamici
Alchemia pamici
Podstawy rachunkowoci
Obiektowe bazy danych
Wprowadzenie do filozofii
Alchemia pamici
Podstawy rachunkowoci
Spjrz w okna Windows
Wprowadzenie do filozofii
Spjrz w okna Windows

Wybieranie grup rekordw, klauzula HAVING

Spjrz w okna Windows

Obiektowe bazy danych


Wprowadzenie do filozofii

Podstawy rachunkowoci

Alchemia pamici

1
2

60

20
40

100

50

SELECT Tytu, Count(sygnatura), Sum(cena)


FROM Ksika
GROUP BY Tytu
HAVING Tytu = Alchemia pamici;
Alchemia pamici
Alchemia pamici
Alchemia pamici
Podstawy rachunkowoci
Podstawy rachunkowoci
Obiektowe bazy danych
Wprowadzenie do filozofii
Wprowadzenie do filozofii
Spjrz w okna Windows
Spjrz w okna Windows

51

52

Wybieranie grup rekordw, klauzula HAVING

50

SELECT Tytu, Count(sygnatura), Sum(cena)


FROM Ksika
GROUP BY Tytu
HAVING Tytu = Alchemia pamici;

Alchemia pamici

Grupowanie rekordw i Wybieranie grup


rekordw

Utwrz zapytanie, ktre poda sumaryczn


liczb osb korzystajcych z biblioteki:
SELECT Count(*)
FROM Czytelnik;

53

54

Grupowanie rekordw i Wybieranie grup


rekordw

Utwrz zapytanie, ktre na podstawie tabeli


CZYTELNIK poda liczb czytelnikw obu
kategorii
SELECT [Typ czytelnika],Count(ID)
FROM Czytelnik
GROUP BY [Typ czytelnika];

Grupowanie rekordw i Wybieranie grup


rekordw

Utwrz zapytanie, ktre poda sumaryczn


liczb studentw korzystajcych z biblioteki:
SELECT [typ czytelnika],Count(ID)
FROM Czytelnik
GROUP BY [typ czytelnika]
HAVING [typ czytelnika]=student;

55

56

Grupowanie rekordw i Wybieranie grup


rekordw

Utwrz zapytanie, ktre na podstawie tabeli


CZYTELNIK poda ilo osb danego typu
na kadym wydziale
SELECT Wydzia,[Typ czytelnika],Count(ID)
FROM Czytelnik
GROUP BY Wydzia, [Typ czytelnika];

Grupowanie rekordw i Wybieranie grup


rekordw

Utwrz zapytanie, ktre na podstawie tabeli


CZYTELNIK obliczy ilu jest studentw z
wydziau ZiE
SELECT Wydzia,[Typ czytelnika],Count(ID)
FROM Czytelnik
GROUP BY Wydzia
Having Wydzia=ZiE AND
[Typ czytelnika]=student;

57

58

Grupowanie rekordw i Wybieranie grup


rekordw
Obliczy rednie zarobki i liczb osb na danym
stanowisku, wyczajc osob na stanowisku
prezesa:
SELECT stanowisko, AVG(zarob),COUNT(*)
FROM pracownicy
WHERE stanowisko <> prezes
GROUP BY stanowisko;

Podzapytania
Podzapytania to oddzielna instrukcja SELECT, ujta w nawiasy,
zawierajca wszystkie konstrukcje SQL, za wyjtkiem UNION i
ORDER BY:
SELECT ....
FROM ...
WHERE warunek (podzapytanie)
Podzapytanie jest wykonywane jako pierwsze i jego wynik jest
zapisywany do pamici. Warto lub wartoci s przekazywane do
warunku w zapytaniu gwnym.

59

60

NAZWP
Szymaski
Andrzejewski
Walczak
J asiski
Marcinkowski
Bielecki
Ceglarek
Szkutnik
Szefowicz
Turek
Adamski
J aneczko
Felek
Miler

ZATRUD
ZAROB PROW
NUMDZ
1999-12-17
800
20
1991-02-20
1600
300
30
1991-02-22
1250
500
30
1991-04-02
2975
20
1991-09-28
1250
1400
30
1991-05-01
2850
30
1994-06-09
2450
10
1992-12-09
3000
20
1991-11-17
5000
10
1991-09-08
1500
0
30
1993-01-12
1100
20
1991-12-03
950
30
1991-12-03
3000
20
1992-01-23
1300
10

Podzapytania

NAZWDZ
KSIGOWO
BADANIA
SPRZEDA
OPERACJ E

LOKALIZACJA
WARSZAWA
GDASK
KRAKW
POZNA

Podzapytania

STANOWISKO KIER
URZDNIK
7902
SPRZEDAWCA
7698
SPRZEDAWCA
7698
KIEROWNIK
7839
SPRZEDAWCA
7698
KIEROWNIK
7839
KIEROWNIK
7839
ANALITYK
7566
PREZES
SPRZEDAWCA
7698
URZDNIK
7788
URZDNIK
7698
ANALITYK
7566
URZDNIK
7782

Tabela PRACOWNIK
NUMP
7369
7499
7521
7566
7654
7698
7782
7788
7839
7844
7876
7900
7902
7934

Tabela DZIA

NUMDZ
10
20
30
40

61

62

Podzapytania
Wybra pracownikw, ktrzy pracuj w
Warszawie:
SELECT *
FROM pracownicy
WHERE numdz IN
(SELECT numdz
FROM dzia
WHERE lokalizacja = Warszawa);

Podzapytania
Wybra pracownikw, ktrzy zarabiaj mniej
ni wynosi rednia pensja:
SELECT *
FROM pracownicy
WHERE zarob <
(SELECT AVG(zarob)
FROM pracownicy);

63

64

Podzapytania
Podzapytanie samo w sobie moe zawiera jedno lub wicej
podzapyta. Mwimy, e podzapytania s zagniedone.
Podzapytania uyte w wicej ni jednym predykacie:

SELECT ....
FROM ...
WHERE warunek1 (podzapytanie1)
AND warunek2 (podzapytanie2)

Podzapytania
SELECT *
FROM pracownicy
WHERE numdz IN

(SELECT numdz FROM dzia


WHERE lokalizacja = Warszawa)
AND zarob =

(SELECT MAX(zarob) FROM


premia);

65

66

Podzapytania
Ktrzy pracownicy z tego samego miejsca
pracy co Kowalski zarabiaj mniej ni
wynosi rednia pensja?

SELECT * FROM pracownicy


WHERE zarob < (SELECT AVG(zarob) FROM
pracownicy)
AND numdz IN
(SELECT numdz FROM dzia
WHERE lokalizacja =
(SELECT lokalizacja FROM dzia
WHERE numdz =
(SELECT numdz FROM Pracownicy
WHERE nazwp = Kowalski)));

67

68

Podzapytania
ANY
Suy do porwnywania wartoci z kad wartoci zwracan przez podzapytanie.
Liczba > ANY (lista liczb) wiksze ni przynajmniej jeden element z
listy.
<
=
ALL
Suy do porwnywania wartoci ze wszystkimi wartociami zwracanymi przez
podzapytanie:
Liczba > ALL (podzapytanie zwracajace list liczb)
>=
<=
predykat jest prawdziwy, gdy liczba po lewej stronie jest wiksza ni kada liczba
na licie.

Podzapytania
Kto zarabia wicej ni ktokolwiek o nazwisku Nowak?

SELECT * FROM pracownicy


WHERE zarob > ANY
(SELECT zarob FROM pracownicy
WHERE nazwp = Nowak);

69

70

Podzapytania

#rwnowany zapis z IN

Liczba = ALL (lista)


Predykat jest faszywy, zalenie od tego, jaka warto znajduje si po lewej stronie.
Jeeli lista zawiera co najmniej dwie rne wartoci, np. (5,5,6), to predykat jest
faszywy, bo liczba po lewej stronie nie moe by jednoczenie rwna 5 i 6.
Gdy lista zwraca jedn warto lub wicej takich samych wartoci, np. (5,5,5),
to predykat jest prawdziwy.
STANOWISKO IN (podzapytanie)
STANOWISKO = ANY (podzapytanie)
STANOWISKO NOT IN (podzapytanie)
STANOWISKO <> ALL (podzapytanie) #rwnowany zapis z NOT IN

Podzapytania
Wskaza wszystkich pracownikw (NUMP, NAZWP, NUMDZ,
STANOWISKO, ZAROB), ktrych pensja jest wysza ni pensja
wszystkich kierownikw

SELECT NUMP, NAZWP, STANOWISKO, ZAROB


FROM pracownicy
WHERE zarob > ALL
(SELECT ZAROB FROM PRACOWNICY
WHERE STANOWISKO = "KIEROWNIK");

71

72

Podzapytania skorelowane
W tym typie podzapytania warto z gwnego
zapytania jest przekazywana do podzapytania,
aby mogo by ono wykonane.
Wynik podzapytania skorelowanego uywany
jest do obliczenia wartoci predykatu gwnego
zapytania i do znalezienia wierszy, ktre maj
by wywietlane. Nowy wynik jest obliczany dla
kadego wiersza tabeli z gwnym zapytaniu.

Podzapytania skorelowane
Podzapytania skorelowane s wykonywane
za pomoc etykiet tabelowych (nazw
skorelowanych) i odwoa skorelowanych.
Etykieta dodawana jest do nazw tabel w gwnym zapytaniu i
podzapytaniu.
Odwoanie skorelowane dodaje si do klauzuli WHERE
podzapytania , aby powiza podzapytanie z wartoci
(wartociami) w wierszu tabeli gwnego zapytania, ktry jest
aktualnie rozpatrywany.

73

74

Podzapytania skorelowane
Ktrzy ludzie zarabiaj mniej ni wynosi rednia pensja wszystkich na
tym samym stanowisku co on lub ona?

SELECT * FROM pracownicy gwne


WHERE zarob <
(SELECT AVG(zarob)
FROM pracownicy pod
WHERE pod.stanowisko = gwne.stanowisko;

Podzapytania skorelowane
W wyniku dziaania podzapytania skorelowanego
zostanie obliczona warto AVG(zarob), ale nie dla
wszystkich wierszy z tabeli. Musi by wiadomo, ktre
wiersze maj t sam warto STANOWISKO co wiersz
tabeli rozpatrywany w gwnym zapytaniu.
Jeeli wiersz w tabeli ma np. warto URZEDNIK", to
warto ta zostaje przekazana do podzapytania po to, aby
dla wszystkich wierszy z wartoci STANOWISKO
rwn URZDNIK mogo by obliczone wyraenie
AVG(zarob).

75

76

Podzapytania skorelowane
Warto STANOWISKO z gwnego
zapytania jest przekazywana do
podzapytania, aby mg by obliczony wynik
podzapytania
Podzapytanie jest wykonywane dla kadego
wiersza wybranego w gwnym zapytaniu.

Podzapytania skorelowane

Wyniki
podzapytania
Wyniki podzapytania dla
kadego wiersza s
sprawdzane z predykatem
gwnego zapytania

WHERE zarob <


(SELECT AVG(zarob)
FROM pracownicy pod
WHERE pod.stanowisko = gwne.stanowisko);

Predykat gwnego
Zapytania
Wiersz 1 zarob < A
Wiersz 2 zarob < B
................................
Wiersz n zarob < N

77

78

Podzapytania skorelowane
W tego typu zapytaniach podzapytanie
trzeba wykona wielokrotnie, za kadym
razem, gdy zmienia si przypisanie wartoci
wyraenia w podzapytaniu, ktre zaley z
kolei od wartoci zmiennych w krotkach
tworzonych za zewntrz podzapytania.

Podzapytania skorelowane
Wska pracownikw (NUMP, NAZWP, NUMDZ, STANOWISKO,
ZAROB), ktrzy maj najwysz pensj w swoim dziale.

SELECT NUMP, NAZWP, NUMDZ, STANOWISKO,


ZAROB
FROM pracownicy Z
WHERE zarob =
(SELECT MAX (ZAROB) FROM PRACOWNICY W
WHERE W.NUMDZ = Z.NIMDZ);

79

80

Podzapytania skorelowane
Wska dziay (NUMDZ, NAZWDZ, LOK), ktre maj kierownika lub
kierownikw przyjtych do pracy pniej ni jeden z jego podwadnych

SELECT NUMP, NAZWDZ, LOKALIZACJA


FROM DZIA D
WHERE EXISTS
(SELECT K.* FROM PRAC K, PRAC P
WHERE K.NUMP = P.KIER
AND K.NUMDZ = P.NUMDZ
AND K.ZATRUD > P.ZATRUD);

Podzapytania skorelowane
Wska pracownikw na stanowisku KIEROWNIK, ktrzy nie maj
pracownikw na stanowisku ANALITYK.

SELECT * FROM PRACOWNICY K


WHERE K.STANOWISKO = "KIEROWNIK"
AND NOT EXISTS
(SELECT P.* FROM PRACOWNICY P
WHERE K.NUMP = P.KIER
AND P.STANOWISKO = "ANALITYK");

81

82

Wykorzystanie EXISTS

SELECT lista FROM nazwa_tabeli


WHERE EXISTS (podzapytanie);

Sowo kluczowe EXISTS zostao zaprojektowane specjalnie do


wykorzystania w podzapytaniach
Skadnia instrukcji wykorzystujcej sowo EXISTS jest nastpujca:

W przypadku, gdy podzapytanie zwraca dowoln warto, to klauzula


EXISTS zwraca warto logiczn prawda
Klauzula EXISTS moe by wykorzystana rwnie w zapytaniu
niepowizanym
W takim przypadku, gdy podzapytanie zwraca jakiekolwiek wiersze,
klauzula daje wynik prawda, w przeciwnym przypadku fasz
Klauzula EXISTS jest bardzo przydatna w poczeniu z zapytaniami
powizanymi
Wykonywane s one dla kadego wiersza tabeli, a wartoci aktualnie
wybranego wiersza s przekazywane do klauzuli WHERE podzapytania
Wykorzystujc klauzul WHERE mona porwnywa dane z kadego
wiersza tabeli z danymi z innych tabel

Wykorzystanie EXISTS

83

84

Nazwisko
Kowalski

Adam

Marian

Nowak

Malinowski

Waldemar Pawlak

Jan

Imi

Zapytanie wyszukujce dane osb, ktre realizoway prace na zlecenia


SELECT Imi, Nazwisko
FROM NAZWISKA
WHERE EXISTS
Wynik dziaania zapytania
(SELECT Nr_prac
FROM ZLECENIA
WHERE Nazwiska.Numer = Zlecenia.Nr_prac);

Klauzula NOT EXISTS jest wykorzystywana do znajdowania wierszy,


dla ktrych powizane podzapytanie nie zwraca adnych wartoci
Przydaje si to do znajdowania wierszy, ktre nie zawieraj powizanych
danych w innych tabelach
Zapytanie wyszukujce dane osb, ktre nie realizoway prac na zlecenia
SELECT Imi, Nazwisko
FROM NAZWISKA
WHERE NOT EXISTS
(SELECT Nr_prac
FROM ZLECENIA
WHERE Nazwiska.Numer = Zlecenia.Nr_prac);

Tworzenie, zmienianie i usuwanie rekordw

85

86

Dane wprowadza si przy pomocy instrukcji INSERT


Do wprowadzania zmian su instrukcje UPDATE i DELETE (do
kasowania)
Do usuwania tabeli z bazy danych suy instrukcja DROP
Instrukcja INSERT - jest to jedyna instrukcja jzyka SQL suca do
dopisywania nowych rekordw do tabel
Podstawowa struktura instrukcji INSERT jest nastpujca:
INSERT INTO nazwa_tabeli
[(lista kolumn)]
VALUES
(lista wartoci)
Nazwa_tabeli okrela tabel, do ktrej wprowadza si nowy rekord
W przypadku, gdy wprowadza si wartoci tylko dla niektrych kolumn,
naley poda nazwy kolumn, do ktrych maj by wprowadzone wartoci
Pominicie listy kolumn w instrukcji INSERT wymusza podanie wartoci
dla wszystkich kolumn w tabeli

Tworzenie, zmienianie i usuwanie rekordw


INSERT INTO Archiwum
SELECT *
FROM czytelnik;

INSERT INTO Archiwum ( ID, Nazwisko_Cz, Imie_Cz )


SELECT ID, Nazwisko, Imie
FROM czytelnik;

INSERT INTO Archiwum_K ( sygnatura, tytu, nazwisko_A, imi_A )


SELECT SYGNATURA, [tytu], NAZWISKO_A, imi_A
FROM [ksika]
WHERE [NAZWISKO A]="Boratyn";

Tworzenie, zmienianie i usuwanie rekordw


Posta polecenia wprowadzajcego peny rekord danych
INSERT INTO NOWA
VALUES (3, 'prawnik', '345 89 98', '1999-08-05', 1200, 1,
'wyjazd w grudniu');

Posta polecenia wprowadzajcego dane do wybranych kolumn


INSERT INTO NOWA
(Nr_ident, Zawd, Data_rozp)
VALUES (4, 'ekonomista', '2002-01-01');

Tworzenie, zmienianie i usuwanie rekordw


Instrukcja DELETE - suy do usuwania rekordw z tabeli.
Podstawowa struktura instrukcji DELETE:
DELETE FROM tabela
[WHERE warunek]

Opcjonalna cz z klauzul WHERE jest wykorzystywana do


ograniczania rekordw, ktre zostan usunite
Pominicie tej czci powoduje, e wszystkie rekordy s usuwane
Posta polecenia usuwajcego z tabeli NOWA, wszystkie rekordy
pracownikw nie bdcych ekonomistami:
DELETE FROM NOWA
WHERE Zawd <> 'ekonomista';

Posta polecenia usuwajcego wszystkie rekordy z tabeli NOWA:


DELETE FROM NOWA

87

88

Tworzenie, zmienianie i usuwanie rekordw


Instrukcja UPDATE - jest wykorzystywana do wprowadzania zmian w
istniejcych rekordach
Struktura instrukcji jest nastpujca:
UPDATE tabela
SET kolumna = warto, ...
[WHERE warunek]

Instrukcja skada si z trzech czci:


W pierwszej czci okrela si, jaka tabela bdzie aktualizowana
Druga cz klauzula SET suy do podania listy kolumn, ktre bd
zmieniane i nowych wartoci, ktre zostan przypisane tym kolumnom
W ostatniej czci za pomoc klauzuli WHERE okrela si wiersze tabeli, w
ktrych nastpi zmiana

Tworzenie, zmienianie i usuwanie rekordw


Posta polecenia zmieniajcego zawarto pola Premia (byo 1200) na
500 dla pracownika o Nr_ident rwnym 3:
UPDATE NOWA
SET Premia = 500
WHERE Nr_ident = 3;

Przy ustalaniu nowych wartoci okrelonego pola mona zastosowa


wyraenia arytmetyczne
Przykadowe polecenie spowoduje zwikszenie wszystkim pracownikom
premii o 100 z
UPDATE NOWA
SET Premia = Premia+100;

Instrukcja DROP - suy do usuwania tabel z bazy danych


Posta polecenia usuwajcego tabel z bazy:
DROP TABLE Nazwa_tabeli

89

90

Tworzenie nowej tabeli


Do zdefiniowania nowej tabeli na podstawie innej tabeli uywamy
instrukcji:

SELECT KSIKA.* INTO Stare_ceny


FROM [KSIKA];

Tworzenie nowej tabeli


CREATE TABLE Nazwa_tabeli
(nazwa_kolumny
typ_danych[(rozmiar)],
nazwa_kolumny
typ_danych[(rozmiar)],
...)

Do zdefiniowania nowej tabeli uywamy instrukcji CREATE TABLE,


ktrej najprostsza instrukcja wyglda nastpujco:

91

92

Kada kolumna musi mie okrelony typ danych


Dla wikszoci typw danych wymagane jest take okrelenie rozmiaru
W instrukcji CREATE TABLE istnieje moliwo zdefiniowania klucza
gwnego, okrelenie relacji z innymi tabelami, wprowadzenie ogranicze
na wartoci kolumn itp.
Typy danych w definiowaniu tabel w SQL
Do zdefiniowania tabeli konieczne jest podanie typu danych
Nie mona stosowa nazw typw uywanych w Accessie, takich jak:
Autonumerowanie, Tekst, Nota, Liczba, Data/godzina, Walutowy,
Tak/Nie, Obiekt OLE, Hipercze

Typy danych

93

94

Typ danych determinuje nie tylko sposb przechowywania danych na


dysku, ale co waniejsze, sposb interpretacji tych danych
Niemniej wane s wymagania dotyczce zajmowania pamici
Marnotrawstwem byoby zarezerwowanie 255 bajtw dla pola, ktre
wykorzystuje tylko 2 bajty, a z drugiej strony zarezerwowanie 5 bajtw
dla numeru telefonu, moe nie by wystarczajce
Relacyjne bazy danych dostarczaj bardzo bogaty zestaw typw danych
Istniej typy danych tekstowych, liczby, typy okrelajce czas oraz
obiekty, dane binarne czy due teksty
Kada baza danych posiada swoje wasne zestawy typw danych, mogce
si rni pomidzy sob nazwami
Niektre systemy baz danych udostpniaj rwnie podtypy, jak np. dla
typu liczbowego, moe to by liczba cakowita, zmiennoprzecinkowa czy
waluta
Wikszo baz danych obsuguje podstawowe typy, cho pomidzy
rnymi produktami nie ma penej zgodnoci

Typy danych

Cztery kategorie typw: dane acuchowe, numeryczne, okrelajce czas i


due obiekty
Dane acuchowe mog przechowywa waciwie kady typ danych z
zastrzeeniem, e dane te s traktowane tylko jako acuch znakw
Dane numeryczne i okrelenia czasu umoliwiaj wykonywanie dziaa
matematycznych oraz innych funkcji do przetwarzania danych
Due obiekty, su do gromadzenia duych iloci informacji - s one
traktowane odmiennie od innych typw danych, np. nie mona
porwnywa takich obiektw
Wana rnica midzy typami danych polega na sposobie traktowania ich
przez jzyk SQL - dane acuchowe, okrelenia czasu i due obiekty
musz by w instrukcjach SQL zawarte w pojedynczych cudzysowach,
natomiast dane numeryczne nie s zapisywane w cudzysowach
W wikszoci baz danych mamy do dyspozycji dwa rodzaje typw
acuchowych o ustalonej dugoci i o zmiennej dugoci
Ustalona dugo powoduje zawsze rezerwacj takiej samej iloci
pamici, bez wzgldu na wymagania danych, natomiast zmienna dugo
zuywa tylko tyle pamici, ile jest potrzebne dla konkretnej wartoci

Typy danych dane znakowe


Typy acuchowe
CHAR jest typem danych o ustalonej dugoci - CHAR(wymiar)
W polu typu CHAR miejsce nie zuyte przez dane jest automatycznie
uzupeniane spacjami
VARCHAR jest typem danych o zmiennej dugoci
VARCHAR(wymiar)
Przy deklaracji tego typu danych okrelamy maksymaln dugo
Rnica midzy VARCHAR(50) a CHAR(50) polega na tym, e pole o
zmiennej dugoci dostosowuje potrzebn pami do rzeczywistej
dugoci acucha danych
W przypadku, gdy chcemy zapamita wiksz ilo danych znakowych
mamy do dyspozycji specjalny typ dla duych obiektw tekstowych
W Oracle jest to CLOB Character Large Object a w Microsoft SQL
Server jest typ TEXT.
W Accessie jest to typ MEMO lub NOTA

Typy danych - dane numeryczne


Czasami dane numeryczne przechowuje si w polu znakowym, np. kod
pocztowy, czy numer telefonu lepiej zapamita w polu tekstowym,
mimo, e skadaj si z cyfr
Wikszo baz danych dostarcza dwch typw numerycznych, jeden dla
liczb cakowitych, drugi dla zmiennoprzecinkowych
Czasami mamy jeszcze bardziej szczegowe jak MONEY, ktry
automatycznie przydziela dwa miejsca po przecinku i znak waluty
Liczba cyfr obsugiwana przez pole numeryczne moe si rni w
zalenoci od bazy danych, a w wielu przypadkach mona o tym
zadecydowa przy definicji, podobnie jak w typie CHAR
Typ danych
Definicja
DECIMAL
Liczba zmiennoprzecinkowa
FLOAT
Liczba zmiennoprzecinkowa
INTEGER(rozmiar) Liczba cakowita o okrelonej dugoci
MONEY
Liczba posiadajca dwie pozycje dziesitne
NUMBER
Standardowa liczba zmiennoprzecinkowa
Kolejny typ danych okrela dat i czas - w Accessie jest to typ DATE

95

96

Okrelanie kluczy

97

98

Tworzc tabel, mona zdefiniowa zarwno klucz gwny jak i klucze


kandydujce
Sowo UNIQUE suy do okrelenia, ktra kolumna (lub grupa kolumn)
musi by unikalna i jest przez to kluczem kandydujcym
Uycie ograniczenia UNIQUE powoduje, e prba powtrzenia danych w
tych kolumnach bdzie przez baz danych powstrzymana
Definicja klucza gwnego znajduje si po definicjach pl, jeeli klucz
gwny skada si z kilku pl podaje si list nazw pl oddzielon
przecinkami
Zdefiniowanie klucza gwnego wymaga uycia klauzuli PRIMARY
KEY
Oczywicie w tabeli moe by zidentyfikowany jeden klucz gwny
Kolejny przykad przedstawia polecenie tworzce tabel o nazwie NOWA
zawierajc osiem pl rnych typw oraz zdefiniowany klucz gwny

Przykad tworzenia nowej tabeli


definicja nazwy tabeli
pole typu cakowitego
pole znakowe o staej dugoci
pole znakowe o zmiennej dugoci
pole zapamitujce dat i czas
pole walutowe
pole typu logicznego
pole duego obiektu znakowego
definicja klucza kandydujcego
definicja klucza gwnego

Posta polecenia, tworzcego tabel o nazwie NOWA, w ktrej kluczem


gwnym jest pole Nr_ident, a kluczem kandydujcym jest pole Telefon:
CREATE TABLE NOWA
(Nr_ident INTEGER,
Zawd CHAR(20),
Telefon VARCHAR(15),
Data_rozp DATE,
Premia MONEY,
Prawo_jazdy LOGICAL,
Uwagi MEMO,
UNIQUE (Telefon),
PRIMARY KEY(Nr_ident))

Mona definiowa klucze rwnie w linii definiujcej kolumn


np.: (Nr_ident INTEGER PRIMARY KEY,
Klucze obce - klauzula REFERENCES suy do ustalenia relacji midzy
pomidzy tabelami

Przykad tworzenia nowej tabeli

99

Odrzucanie wartoci NULL - zapobiega wprowadzaniu wartoci NULL


do kolumny. Uycie NOT NULL w definicji kolumny wymusza podanie
wartoci dla takiej kolumny przy kadym wprowadzaniu nowego wiersza
Zapobiega to zmianie wartoci na NULL przy aktualizacji danych w tabeli
Taki sam efekt daje zdefiniowanie klucza gwnego.
Posta polecenia tworzcego tabel z ustaleniem relacji midzy polem
Nr_ident z tabeli NOWA z polem Numer z tabeli NAZWISKA oraz
zabezpieczeniem przed wartociami NULL dla pl Zawd i Data_rozp:

100

CREATE TABLE NOWA


(Nr_ident INTEGER PRIMARY KEY REFERENCES Nazwiska(Numer),
Zawd CHAR(20) NOT NULL,
Telefon VARCHAR(15),
Data_rozp DATE NOT NULL,
Premia MONEY,
Prawo_jazdy LOGICAL,
Uwagi MEMO)

czenie tabel

W wielu przypadkach w trakcie wyszukiwania informacji z bazy danych


okazuje si, e potrzebne dane przechowywane s w kilku tabelach
W celu poczenia danych z wielu tabel w jednym zapytaniu wymagane
jest zczenie
Poczenia i normalizacja
Efektem normalizacji jest rozbicie bazy danych na wiele tabel
Uywajc zcze midzy tabelami mona wybiera informacje z wielu
tabel za pomoc pojedynczej instrukcji SELECT
Daje to efekt ponownego poczenia danych, ktre zostay rozdzielone do
wielu tabel w trakcie normalizacji
Zczenie to zapytanie, ktre czy dane z wielu tabel
Struktura standardowego zapytania jest nastpujca:
SELECT lista_kolumn
FROM tabela1, [tabela2, ...]
WHERE warunek;

W czci FROM pojawiaj si deklaracje kilku tabel, reszta nie rni si


od polecenia dziaajcego na jednej tabeli

czenie tabel
Problem z instrukcj SELECT polega na tym, e zwraca ona kad
kombinacj wierszy z dwch tabel - jeeli jedna tabela zawiera 8 wierszy
a druga 10 wierszy to zapytanie zwrci 80 wierszy
Zapytanie poniej, przy zaoeniu 9 wierszy w pierwszej i 9 w drugiej
tabeli da w wyniku tabel z 81 wierszami
SELECT *
FROM NAZWISKA, NOWA;

czenie tabel

Tworzenie sensownych zcze wymaga spenienia dwch warunkw


Naley wybra w kadej tabeli kolumny, ktre s ze sob w logiczny
sposb powizane z kolumnami z drugiej tabeli
Musi by zdefiniowane kryterium okrelajce warunki zczenia
dwch tabel
Zgodne kolumny - aby poczenie dwch tabel miao sens, musz one
mie jakie wsplne dane
W przypadku tabel Nazwiska i Nowa mog to by kolumny okrelajce
numer identyfikacyjny pracownika Numer i Nr_ident odpowiednio

101

102

Klauzula WHERE okrela drugi warunek wymagany w zczeniu


Zwykle najefektywniejsze poczenia osiga si poprzez kolumny bdce
kluczami w czonych tabelach, np. zawsze mona dokona poczenia
tabel, jeli klucz gwny jednej tabeli jest kluczem obcym w drugiej
W przypadku, gdy czymy tabel, w ktrej klucz gwny stanowi kilka
kolumn, naley uy wszystkich kolumn klucza przy okrelaniu
warunkw poczenia
Warunki zwykle okrela si w klauzuli WHERE, inaczej naley okreli,
jakie wiersze tabeli pierwszej maj by poczone z wierszami z tabeli
drugiej
Wartoci NULL nigdy nie s traktowane jako speniajce warunek
zczenia - wiersze, dla ktrych w obu kolumnach czcych znajduj si
wartoci NULL s pomijane w wyniku zapytania.
Wynika to std, e NULL traktowane s jak wartoci nieokrelone i w
zwizku z tym nie mog podlega operacjom porwnania

czenie tabel

czenie tabel

Zenon

Ewa

Adam

Marian

Waldemar

Jan

Davies

Miler

Musia

Nowak

Malinowski

Pawlak

Kowalski

Nazwisko

3 000,00 z

8 000,00 z

2 000,00 z

1 100,00 z

3 000,00 z

900,00 z

Pensja

1 000,00 z

5 000,00 z

4 000,00 z

900,00 z

1 200,00 z

200,00 z

600,00 z

Premia

4 500,00 z

8 000,00 z

12 000,00 z

2 900,00 z

2 300,00 z

3 200,00 z

1 500,00 z

WYPATA

103

104

Wybieranie kolumn - tworzc zapytanie czce kilka tabel rzadko


wybieramy wszystkie kolumny przy pomocy szablonu *
Uycie go powoduje, e wszystkie kolumny ze wszystkich tabel pojawiaj
si w zestawieniu wynikowym
Skracanie nazw tabel aliasy - zamiast uywa penych nazw tabel
mona utworzy aliasy dla nazw
Polega to na podaniu zaraz za nazw tabeli jej skrconej nazwy
poprzedzonej sowem AS (jeeli sowo kluczowe AS nie zostanie
wpisane, system doda je automatycznie)
Zadaniem jest sformuowanie zapytania wybierajcego z tabeli
NAZWISKA kolumn Numer, Imi, Nazwisko i Pensja a z tabeli
NOWA kolumny Premia z dodaniem pola wyliczajcego sum do
wypaty (Pensja z tabeli NAZWISKA i Premia z tabeli NOWA) pole
to zostao nazwane WYPATA
Zastosowano aliasy N dla tabeli NAZWISKA i P dla tabeli NOWA

Posta zapytania:
SELECT N.Numer, N.Imi, N.Nazwisko, N.Pensja, P.Premia,
N.Pensja+P.Premia AS WYPATA
FROM NAZWISKA AS N, NOWA AS P
WHERE N.Numer = P.Nr_ident;

Paul

Dobija

3 500,00 z

Wynik dziaania polecenia:

Mieczysaw

Norton

Imi

Peter

Numer

czenie tabel

Z-008

Z-007

Z-006

Z-005

Z-004

Z-003

Z-002

Z-001

1 000,00 z

900,00 z

500,00 z

400,00 z

300,00 z

700,00 z

3 000,00 z

500,00 z

Waldemar

Waldemar

Jan

Jan

Malinowski

Pawlak

Pawlak

Kowalski

Kowalski

Z-006

Z-007

Z-002

Z-008

Z-001

Z-005

700,00 z

500,00 z

900,00 z

3 000,00 z

1 000,00 z

500,00 z

400,00 z

105

106

Zczenia i relacje - relacja jeden do wiele zachodzi, gdy jednemu z


dwch obiektw relacji odpowiada wiele pozycji drugiego obiektu, ale
kadej pozycji drugiego obiektu odpowiada tylko jedna pozycja obiektu
pierwszego
Przykadem jest tabela zawierajca list nazwisk NAZWISKA oraz tabela
ZLECENIA, w ktrej rejestrowane s dane o zleceniach realizowanych
przez poszczeglnych pracownikw
Zawarto tabeli ZLECENIA:

7
2

Nr_zlec Nr_prac Kod_zlecenia Warto_zlecenia

czenie tabel
Posta polecenia czcego tabele NAZWISKA i ZLECENIA:

Marian

Malinowski

Z-003

300,00 z

Jest to przykad
relacji jeden do
wiele: pole Numer
jest kluczem
gwnym tabeli
Nazwiska a pole
Nr_prac w tym
przypadku jest
kluczem obcym w
tabeli Zlecenia

SELECT N.Numer, N.Imi, N.Nazwisko, P.Kod_zlecenia,


P.Warto_zlecenia
FROM Nazwiska AS N, Zlecenia AS P
WHERE N.Numer = P.Nr_prac
ORDER BY N.Numer;

Wynik dziaania polecenia:

Marian

Malinowski

Z-004

Imi

Marian

Nowak

Numer

Adam

Nazwisko Kod_zle Warto_zle


cenia
cenia

czenie tabel

107

108

Na wyniki kocowe zapytania skada si kilka etapw przetwarzania


danych
Poszczeglne kroki s szczeglnie wane w przypadku zapyta czcych,
poniewa ilustruj problemy zwizane z wydajnoci takich zapyta
Na pocztku pojawia si iloczyn kartezjaski z wierszy czonych tabel
Jest to kombinacja wszystkich wierszy z pierwszej tabeli, z wszystkimi
wierszami z drugiej tabeli
Dla trzech tabel o 50, 100 i 10 wierszach wynikowa tabela ma 50 000
wierszy co jest przyczyn spadku wydajnoci instrukcji SELECT
Iloczyn kartezjaski stanowi tabel dla dalszego zapytania, ktra
zachowuje kolejno wierszy z tabel czonych
Kolejny krok polega na wykonaniu ogranicze wynikajcych z klauzuli
WHERE - wszystkie wiersze, dla ktrych wynik wyraenia w klauzuli
WHERE jest prawdziwy, s wybierane
Do tej pory nie bya wykonana selekcja kolumn z tabeli wic w klauzuli
WHERE mog znajdowa si odwoania do dowolnej kolumny tabeli

czenie tabel

Kolejny krok, jeli w zapytaniu obecna jest klauzula GROUP BY, polega
na sortowaniu pozostaych wierszy w tabeli wedug wybranych kolumn
Jeli na licie SELECT znajduj si funkcje agregujce, to w tym
momencie s one wykonywane, a tabela zostaje zastpiona przez now,
zawierajc wyniki funkcji agregujcych dla grup (jeli GROUP BY jest
uyte)
Nastpnie klauzula HAVING jest stosowana dla tabeli podzielonej na
grupy, wiersze nie speniajce warunkw okrelonych w tej czci s
odrzucane
Na kocu wybrane s z tabeli kolumny zawarte na licie SELECT,
wyliczone odpowiednie wyraenia i tak powstaje wynik kocowy
Przykad zapytania z funkcj agregujc i grupowaniem suma zlece
poszczeglnych pracownikw
SELECT N.Numer, N.Imi, N.Nazwisko,
SUM(P.Warto_zlecenia) AS SUMA_ZLECE
FROM Nazwiska AS N, Zlecenia AS P
WHERE N.Numer=P.Nr_prac
GROUP BY N.Numer, N.Imi, N.Nazwisko
ORDER BY N.Numer;

czenie tabel

2 100,00 z

4 000,00 z

900,00 z

Nazwisko SUMA_ZLECE

Wynik dziaania poprzedniego polecenia:


Imi
Jan

Numer
1
Waldemar Pawlak

Kowalski

2
Marian

Malinowski

1 000,00 z

109

110

Warunki zczenia mog by formuowane w sposb zoony, np. mona


wybra zlecenia poszczeglnych pracownikw, ktre przekraczaj 900 z:
SELECT N.Numer, N.Imi, N.Nazwisko, P.Kod_zlecenia,
P.Warto_zlecenia
FROM Nazwiska AS N, Zlecenia AS P
WHERE N.Numer=P.Nr_prac AND P.Warto_zlecenia >= 900
ORDER BY N.Numer;

Z-008
3 000,00 z

Nazwisko Kod_zlecenia Warto_zlecenia

Waldemar Pawlak
Z-002

Imi

1
Waldemar Pawlak

Numer
2

900,00 z

Marian

Malinowski Z-007

czenie wicej ni dwch tabel


Przykadem jest zapytanie o dane pracownika, wysoko pensji oraz
premii oraz sum zlece i sum do wypaty
Dane te zawarte s w trzech tabelach NAZWISKA, NOWA i
ZLECENIA
Posta zapytania:
SELECT N.Numer, N.Imi, N.Nazwisko, N.Pensja, R.Premia,
SUM(P.Warto_zlecenia) AS SUMA_ZLECE,
Suma_zlece+N.Pensja+R.Premia AS WYPATA
FROM Nazwiska AS N, Zlecenia AS P, Nowa AS R
WHERE N.Numer = P.Nr_prac AND N.Numer = Nr_ident
GROUP BY N.Numer, N.Imi, N.Nazwisko, N.Pensja, R.Premia
ORDER BY N.Nazwisko;

2 100,00 z 4 400,00 z

SUMA_ZLECE WYPATA

300,00 z 3 200,00 z

Premia
Malinowski 1 100,00 z 1 200,00 z

Kowalski

900,00 z

Pensja

Jan

2 000,00 z

4 000,00 z 7 200,00 z

Numer
Wynik zapytania:
Imi
Nazwisko
1

Marian

Nowak

200,00 z

900,00 z 2 400,00 z

Adam

3 000,00 z

600,00 z

Waldemar Pawlak

900,00 z

Unie

111

prawnik

Malinowski

Pawlak

ekonomista

Kowalski

ekonomista

1200

Marian

Waldemar

200

Jan

600

112

Unia umoliwia czenie wynikw kilku zapyta w jednym zestawieniu


Wyniki pojawiaj si jakby zostay wybrane z jednej tabeli, podczas gdy
pochodz z wielu tabel
Dziaanie operatora UNION
Przykad zapytania, ktre powinno pobra z tabeli NAZWISKA kolumny
Numer, Nazwisko i Imi oraz z tabeli NOWA kolumny Nr_ident,
Zawd i Premia dla trzech pierwszych pracownikw (na podstawie
numeru identyfikacyjnego pracownika)
Posta zapytania:
Numer
Nazwisko
Imi
SELECT Numer, Nazwisko, Imi
FROM NAZWISKA
WHERE Numer <= 3
UNION
Wynik zapytania
SELECT Nr_ident, Zawd, Premia
FROM NOWA
WHERE Nr_ident <= 3;

Wyniki posortowane wedug kolumn idc od lewej

Unie

Aby wyniki byy bardziej czytelne mona zmieni nazwy kolumn i doda
opcj ALL do operatora UNION
Uycie operatora UNION do poczenia kilku zapyta powoduje, e
adne powtarzajce si wiersze nie s wybierane, a wyniki s
automatycznie sortowane wedug kolumn od lewej do prawej
Wszystkie wiersze bez sortowania pojawiaj si po uyciu opcji ALL
Ilustruje to zapytanie sformuowane poniej:

prawnik

ekonomista

1200

200

SELECT Numer, Nazwisko AS Kolumna_1, Imi AS Kolumna_2


FROM NAZWISKA
Numer
Kolumna_1
Kolumna_2
WHERE Numer <= 3
1
Kowalski
Jan
UNION ALL Wynik zapytania
2
Pawlak
Waldemar
SELECT Nr_ident, Zawd, Premia
3
Malinowski
Marian
FROM NOWA
1
ekonomista
600
WHERE Nr_ident <= 3;
3

You might also like