Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
1
Rozdzia 1. Jak korzysta z wicze
wiczenia te s
kierowane do osób, które chc
si
nauczy
j zyka SQL i mam nadziej ,
#e w znacznym stopniu oka# si one pomocne. Do nauki j zyka SQL potrzebny jest jego interpreter,
czyli baza danych. Do studiowania j zyka SQL zosta)y wykorzystane:
baza danych InterBase firmy Inprise (Borland) oraz baza danych DB2 firmy IBM.
Dlaczego InterBase? Dlaczego IBM DB2? Po pierwsze s to systemy relacyjnej bazy danych,
w których zosta)a zaimplementowana pe)na sk)adnia j zyka SQL. Po drugie zarówno InterBase firmy
Inprise (Borland) i DB2 firmy IBM w wersji Personal Edition s dost pne za darmo. Po trzecie s to w
pe)ni profesjonalne i popularne systemy, które dodatkowo s )atwe w obs)udze i administrowaniu.
Oba systemy bazy, jak ju# wspomnia)em s dost pne w Internecie za darmo. Na pewno wi kszo7
z czytelników wybierze InterBase'a z powodów obj to7ci wersji instalacyjnej. Prawd jest, #e DB2
firmy IBM posiada wi cej mo#liwo7ci, ale je7li chodzi o zakres interpretowanego j zyka SQL oba
systemy s sobie równe. Dla osób nie posiadaj cych ) cza do Internetu o wi kszej ni przeci tna
przepustowo7ci, InterBase b dzie lepszym wyborem.
Dlaczego nie MS Access
Nie chc umniejsza mo#liwo7ciom MS Access. W pewnych zastosowaniach, jest to w pe)ni
funkcjonalny i wystarczaj cy system bazy danych. MS Access zosta) szczelnie obudowany
pomocniczymi narz dziami, które u)atwiaj zarz dzanie danymi oraz u)atwiaj zarz dzanie samym
systemem bazy MS Access. Pomimo ze istnieje mo#liwo7 „rozmowy" z MS Access za pomoc
j zyka SQL, jest ona niewygodna do tego stopnia, #e
staje si
nieprzyjemna
i zniech caj ca.
Studiowanie wicze z InterBase
Aby móc pracowa z InterBase, musimy go najpierw zainstalowa . Instalacja InterBase zosta)a
opisana w rozdziale 13. Tam równie# znajdziemy informacje o miejscu sk d mo#na skopiowa wersj
instalacyjn . Serwer bazy danych InterBase dost pny jest równie# z wi kszo7ci produktów, narz dzi
programistycznych firmy Inprise (Borland), min: Delphi, JBuilder, C++ Builder. W rozdziale 13.
znajduje si równie# opis narz dzi InterBase, które umo#liwiaj na prac z baz danych i które
oczywi7cie umo#liwi wykonywanie wicze@. Przed rozpocz ciem studiowania wicze@, ale ju# po
zainstalowaniu InterBase nale#y:
1. Stworzy baz WYPAUT. Informacje o tym, jak to zrobi znajdziemy w sekcji „Tworzenie bazy
danych w Interbase" w rozdziale 13.
2. Po stworzeniu bazy WYPAUT musimy uruchomi skrypty tworz ce i wype)niaj ce danymi tabele
w bazie WYPAUT. Skrypty te mo#na skopiowa
z serwera ftp wydawnictwa Helion
(ftp://ftp.helion.com.pl/przyklady/cwsql.zip - znajdziesz skrypty dla DB2 i InterBase'a). Skrypty te
znajduj si równie# na ko@cu tych wicze@. Zosta)y one jednak opublikowane dla DB2.
Informacje o tym, jak je dostosowa dla InterBase'a znajdziesz w rozdziale 14. w sekcji „Skrypty
tworz ce struktur bazy WYPAUT".
3. Po zainstalowaniu InterBase'a oraz stworzeniu bazy WYPAUT i jej struktury jeste7my gotowi do
pracy z wiczeniami, które polegaj na wykonywaniu polece@ SQL.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
2
Studiowanie wicze z DB2
Poni#ej zamieszone informacje pozwol nam na usystematyzowanie czynno7ci, jakie musimy
wykona , aby móc swobodnie korzysta z wicze@, pracuj c z systemem DB2. Nale#y przej7 przez
nast puj ce kroki:
1. Musimy zainstalowa DB2. Zosta)o to opisane w rozdziale 10. W tym rozdziale znajdziemy
równie# informacje o tym, sk d zdoby kopi instalacji DB2 w wersji 7.1 Personal Edition.
2. Nast pnie musimy uruchomi mened#era DB2. Do tego celu s)u#y polecenie db2start, które nale#y
wyda w wierszu polece@ systemu operacyjnego lub z poziomu menu Start | Uruchom. W wersji
DB2 dla Windows 95 lub 98 mened#er DB2 startuje automatycznie. W Windows NT równie#
mo#e okaza si to niekonieczne, gdy podczas instalacji DB2 wyraOnie zaznaczymy, #e mened#er
DB2 ma startowa automatycznie podczas startu systemu operacyjnego. Je#eli posiadamy system
Windows NT, mo#emy u#y narz dzia Us)ugi z Panelu sterowania. Tam równie# mo#emy
uruchomi mened#era DB2.
3. Po upewnieniu si , #e mened#er DB2 zosta) uruchomiony, tworzymy baz danych WYPAUT
w aplikacji Command Lin Processor. Opis procesu tworzenia bazy WYPAUT znajduje si
w rozdziale 12. Narz dzia DB2 w sekcji „Tworzenie bazy" opisuj cej narz dzie Command Lin
Processor.
4. Teraz musimy dokona pewnych ustawie@ w narz dziu Tools Settings. Musimy okre7li znak
7rednika jako znak oddzielaj cy poszczególne wyra#enia SQL wprowadzane m.in. w aplikacji
Command Center oraz w skryptach tworz cych struktur bazy danych. Wi cej informacji na temat
tych ustawie@ znajdziesz w rozdziale 12. „Narz dzia DB2" w sekcji „Ustawienia narz dzi DB2".
5. Po stworzeniu bazy WYPAUT i ustaleniu znaku 7rednika jako znaku oddzielaj cego poszczególne
zapytania w skrypcie, musimy uruchomi skrypty tworz ce i wype)niaj ce danymi tabele w bazie
WYPAUT. Skrypty te mo#na skopiowa z serwera ftp://ftp.helion.com.pl/przyklady/cwsql.zip.
Skrypty te znajduj si równie# na ko@cu tych wicze@. Je#eli nie mamy dost pu do Intemetu,
nale#y skrypty przepisa do plików, a nast pnie je uruchomi . Wykonywanie skryptów zosta)o
opisane w rozdziale 12. „Narz dzia DB2" w sekcji opisuj cej narz dzie Command Center.
6. Po wykonaniu powy#szych zada@ jeste7my gotowi do pracy z wiczeniami, które polegaj na
wykonywaniu polece@ SQL.
Zapraszam do wicze
Uff. Mam nadziej , #e wszyscy przebrn przez powy#sze i b d si czu swobodnie podczas
studiowania tych wicze@. Równie dobrze mo#na zacz od poznania systemu, jak i narz dzi
wchodz cych w sk)ad systemu DB2 lub InterBase. Po zapoznaniu si z nimi i nabraniu pewnej
wprawy w pos)ugiwaniu si nimi, mo#emy przej7 do realizacji zada@ wypunktowanych powy#ej.
Rycz mi)ej lektury Autor
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
3
Rozdzia 2. Koncepcja bazy danych
W tym rozdziale przedstawiona zostanie koncepcja bazy danych, jej podstawowe elementy sk)adowe
jak tabele i widoki. Omówione zostan
równie# typy danych, definiowanie tabel oraz rola
i zastosowanie j zyka SQL w relacyjnych bazach danych.
Tradycyjne bazy danych
W czasie kiedy komputery nie by)y wykorzystywane tak powszechnie jak dzisiaj,
informacje by)y gromadzone na papierze.
Pracownik firmy musia) r cznie organizowa dane. Zapisywa) je, wyszukiwa), aktualizowa) itd.
Dzisiaj, oprócz operacji, które musi wykona r cznie, pozosta)e wykonuje za pomoc funkcji, które
dostarcza relacyjny system bazy danych.
Rys.2.1.
Relacyjny system bazy danych
Relacyjny system bazy danych przechowuje wszystkie dane w tabelach. Ka#da tabela zawiera dane na
konkretny temat, np dane o klientach, dane o pracownikach, towarach itp. System bazy danych
zarz dza tymi danymi, pozwala m.in. na szybsze ich wyszukanie i zorganizowanie
Za ka#dym razem gdy potrzebujemy informacji z bazy danych, musimy „zapyta " system bazy
danych w j zyku, który on rozumie. Tym j zykiem jest SQL - Structured Qu-ery Language
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
4
Rys.2.2.
Wydobywanie informacji z tradycyjnej bazy danych oraz z systemu relacyjnej
bazy danych
Do dzisiaj istniej tzw. tradycyjne bazy danych. S to bazy informacji, których no7nikiem jest po
prostu papier. Wiele instytucji w tym niestety policja oraz szpitale korzysta do dzi7 z takich baz.
Scenariusz wydobywania danych w takich instytucjach jest nast puj cy:
l osoba potrzebuj ca danych np. prze)o#ony prosi drug osob o pewne dane;
pracownik po otrzymaniu polecenia szuka informacji w7ród dokumentów, które zosta)y z)o#one
albo w archiwum lub w po prostu w szafie;
pracownik po zebraniu pewnej ilo7ci segregatorów z danego okresu przegl da je, a nast pnie
przygotowuje zbiorczy dokument zawieraj cy # dane informacje;
l po wydobyciu danych i zorganizowaniu ich do odpowiedniej formy wysy)a je do prze)o#onego.
Czas wykonania tych operacji jest ró#ny i zale#y od wielko7ci organizacji, jej struktury,
ilo7ci potrzebnych danych oraz od pracowito7ci osób je zbieraj cych.
Rys.2.3
W systemie relacyjnej bazy danych wszystkie powy#sze operacje sprowadzaj si do sformu)owania
tego samego pytania o dane ale w formie zrozumia)ej dla komputera, a 7ci7lej mówi c, w formie
zrozumia)ej dla systemu bazy danych.
Ca)a operacja wydobywania danych trwa w tym przypadku znacznie krócej. Jako7 tych danych jest
przy tym lepsza.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
5
Mamy wi cej pewno7ci, #e dane s prawdziwe, e kto7 si nie pomyli) lub pomin ) pewn cz 7
danych przy zestawianiu # danych informacji.
Rys.2.4.
SQL - Strukturalny j)zyk zapyta
J zyk SQL jest wykorzystywany w wi kszo7ci relacyjnych systemów baz danych. SQL jest
zaimplementowany m.in. w takich systemach baz danych, jak: DB2, Oracie, Inter-Base, MySQL,
dBase, Paradox. Sk)adnia j zyka SQL dzieli si na trzy typy:
j zyk definiowania struktur danych - DDL (Data Definition Language);
R j zyk do wybierania i manipulowania danymi - DML (Data Manipulation Language);
l j zyk do zapewniania bezpiecze@stwa dost pu do danych - DCL (Data Control Language).
Rys.2.5.
Sk)adnia j zyka SQL wchodz ca w sk)ad j zyka DDL jest u#ywana przez administratorów systemu
relacyjnej bazy danych w celu utrzymania struktury bazy danych, obiektów bazy danych takich jak
m.in. tabele.
J zyk DCL jest u#ywany przez administratorów do zapewnienia bezpiecze@stwa dost pu do danych,
m.in. do nadawania uprawnie@ do danych.
J zyk DML jest u#ywany przez wszystkich u#ytkowników, którzy maj dost p do bazy danych. Za
pomoc tego typu sk)adni j zyka SQL u#ytkownicy mog otrzymywa , zmienia dane, dodawa nowe
itp.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
6
Tabela
Tabela sk)ada si z wierszy i kolumn. Wiersze w tabeli s przechowywane w dowolnym porz dku.
Dla ka#dego wiersza ka#da z kolumn posiada jedno pole z warto7ci . Wszystkie warto7ci w kolumnie
s tego samego typu.
Rys.2.6.
W ró#nych systemach relacyjnej bazy danych jak np. DB2, Oracie, InterBase czy dBase lub Paradox,
ka#da tabela jest przechowywana w osobnym zbiorze na dysku twardym lub kilka tabel w jednym
zbiorze. Sposób przechowywania danych z tabeli na dysku twardym jest tematem drugorz dnym.
wiczenia te maja przede wszystkim na celu nauczenie j zyka SQL. Teraz wystarczy tylko wiedzie ,
#e sposób przechowywania tabel zale#y od implementacji systemu relacyjnej bazy danych.
Konstrukcja nazwy tabeli
Nazwa tabeli sk)ada si z dwóch cz 7ci. Pierwsza cz 7 to kwalifikator, a druga z kolei to nazwa
tabeli. Kwalifikator i nazwa tabeli oddzielone s kropka. Ka#da tabela musi mie unikatow nazw
w granicach kwalifikatora.
Rys.2.7.
Taka konstrukcja nazwy tabeli nie stosuje si we wszystkich relacyjnych bazach da nych. Mi dzy
innymi w opisywanym tutaj systemie InterBase. W InterBase odwo)anii do tabeli nast puje wprost,
np.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
7
SELECT * PROM KLIENCI . . .
w systemie DB2
SELECT * FROM DB2ADMIN.KLIENCI
Typy danych
W ró#nych systemach relacyjnej bazy danych inaczej nazywaj si typy danych. Jednak ich zakres i
typ jest cz sto identyczny. Ka#dy system relacyjnej bazy danych posiada w swojej dokumentacji
sekcj , która opisuje typy danych u#ywanych w tym systemie. Poni#ej znajduj si przyk)adowe typy
danych wraz z ich opisem.
Tabela 2.1. numeryczne typy danych
Typ danych
Opis
SMALLINT
liczby ca)kowite z przedzia)u –32768 do +32767 (czasami ten zakres jest
mniejszy)
INTEGER
liczby ca)kowite z przedzia)u –2147483648 do +2147483647 (lub
mniejszy)
DECIMAL (m,n)
liczby rzeczywiste, gdzie m oznacza ca)kowit liczb cyfr, a n oznacza
liczb cyfr po przecinku
Tabela 2.2. znakowae typy danych
Typ danych
Opis
CHAR (n)
typ znakowy o sta)ej d)ugo7ci (max. 255 znaków)
VARCHAR (n)
typ znakowy o zmiennej d)ugo7ci
Tabela 2.3.typy danych daty i czasu
Typ danych
Opis
DATE
typ daty (wyst puj ró#ne standardy zapisywania daty)
TIME
typ czasu (wyst puj ró#ne standardy zapisywania czasu)
Tworzenie tabeli - CREATE TABLE
Tworzenie tabeli polega na definiowaniu jej kolumn. Dla ka#dej kolumny nale#y okre7li nazw
kolumny, typ danych i d)ugo7 (w zale#no7ci od typu) oraz to, czy jest dozwolone pozostawienie
warto7ci pustej w kolumnie.
CREATE TABLE UZYTKOWNIK.PRACOWNICY (
ID_PRACOW CHAR(6)NOT
NULL,
IMIE
VARCHAR(18)NOT NULL,
NAZWISKO
VARCHAR(24) NOT NULL,
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
8
STANOWISKO
VARCHAR(12)NOT NULL,
DZIAL
VARCHAR(12) NOT NULL,
DATA_URODZ
DATE,
TELEFON_DOM
CHAR(12));
Warto- pusta NULL
Warto7
NULL
jest to warto7 nieokre7lona, która mo#e zosta u#yta w ka#dym polu tabeli niezale#nie
od typu kolumny. Warto7
NULL
jest ró#na od zera lub spacji.
W tabeli na rysunku 2.8 osobom, które nie posiadaj firmy, w kolumnach: FIRMA oraz NIP
przypisano warto7
MULL
.
R
YS
.2.8.
Przy konstruowaniu tabeli poleceniem
CREATE TABLE
w poprzedniej sekcji okre7lili7my dla pewnych
kolumn parametr
NOT NULL
. Oznacza to, #e przy wstawianiu nowych wierszy musimy okre7li
warto7ci dla tych kolumn, nie mog one by warto7ci
NULL
. Definicja kolumny w poleceniu
CREATE
TABLE
pozostawiona bez klauzuli
NOT NULL
okre7la, #e dozwolone jest wstawienie do tej kolumny
warto7ci
NULL
. Istnieje jeszcze opcja o nast puj cej sk)adni:
NOT NULL WITH DEFAULT ( (warto7 )]
gdzie parametr warto7 okre7la domy7ln warto7 dla kolumny. Warto7 domy7lna zostanie nadana
dla kolumny automatycznie, gdy nie okre7limy jej wprost przy wstawianiu nowego wiersza do tabeli.
Autoryzacja dost)pu do tabeli
Mo#emy udost pni nasze dane innym u#ytkownikom, a 7ci7lej mówi c mo#emy udost pni tabele
innemu u#ytkownikowi. W tym celu stosuje si polecenie j zyka SO[
GRANT
. Poni#szy przyk)ad
nadaje uprawnienia u#ytkownikowi o nazwie URYTKOWNIK do tabeli PRACOWNICY. Od tej pory
URYTKOWNIK mo#e wybiera (wykonywa zapytania
SELECT
) dane z naszej tabeli.
GRANT SELECT ON PRACOWNICY TO U"YTKOWNIK;
Prawa do tabeli mo#na odebra poleceniem
REVOKE
. Oto przyk)ad:
REVOKE SELECT ON PRACOWNICY FROM U"YTKOWNIK;
Powy#szy przyk)ad u#ycia polecenia
GRANT
umo#liwia tylko wybieranie danych z tabeli. Poni#szy
przyk)ad umo#liwia wybieranie, wstawianie i aktualizowanie danych w tabeli.
GRANT SELECT, INSEKT, UPDATE ON PRACOWNICY TO UZYTKOWNIK;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
9
Widoki
Za pomoc widoków mo#emy ograniczy zakres danych dost pnych dla u#ytkownika. Widok
mo#e ogranicza dane z jednej tabeli lub mo#e to by kompozycja danych z kilku tabel. Dane
w widoku mog by ograniczone do kilku kolumn lub do pewnego zakresu wierszy.
Widoki stosuje si w ró#nych celach:
w celu zabezpieczenia danych przed niepowo)anym dost pem;
uproszczenia korzystania z danych dla ko@cowego u#ytkownika.
Przyk)adem zwi kszenia bezpiecze@stwa mo#e by widok, który nie obejmuje kolumny z danymi o
zarobkach. Wiadomo, #e nie wszyscy u#ytkownicy powinni mie dost p do takich danych.
Rys.2.9.
P
odsu
m
ow
anie
–w
iczeniapraktyczne¶
1. Relacyjna baza danych jest kolekcj tabel.
2. U#ytkownicy nie musza si martwi o to, jak dane s przechowywane w bazie danych oraz jak s
wydobywane.
3. SQL jest j zykiem do komunikowania si z baza danych.
4. J zyk SQL jest u#ywany do:
wydobywania danych (
SELECT
);
manipulowania danymi (
IHSERT
,
UPDATE
,
DELETE
);
definiowania, redefiniowania i usuwania obiektów wchodz cych w sk)ad
struktury bazy danych (
CREATE
,
ALTER
,
DROP
);
definiowania uprawnie@ do danych (
GRANT
,
REVOKE
).
5. U#ytkownicy mog mie dost p do danych poprzez widoki.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
10
Rozdzia 3. Zapytania SQL.
Polecenie
SELECT
jest u#ywane do pobierania danych z bazy danych (z tabel lub widoków). W tym
rozdziale zapoznamy si ze sk)adni polecenia
SELECT
.
Rozdzia) ten ma na celu nauczenie formu)owania zapyta@ SQL do wy7wietlana wsstkich wierszy z
tabeli, wybierania okre7lonych kolumn, u#ywania warunków, u#ywania stów kluczowych
BETWEEN, IN, LIKE Oraz DISTINCT.
Struktura polecenia SELECT
Tabela 3.1
SELECT
opisuje nazwy kolumn, wyra#enia arytmetyczne, funkcje
FROM
nazwy tabel lub widoków
WHERE
warunek (wybieranie wierszy)
GROUP BY
nazwy
kolumn
HAVING
warunek (grupowanie wybieranych wierszy)
ORDER BY
nazwy kolumn lub pozycje kolumn
Ka#de polecenie
SELECT
musi posiada klauzule
SELECT
oraz
FROM
, pozosta)e klauzule s opcjonalne.
Inne klauzule wchodz ce w sk)ad polecenia
SELECT
zostan szczegó)owo omówione póOniej.
Wybieranie wszystkich kolumn
Poni#sze polecenie
SELECT
wy7wietla wszystkie kolumny i wiersze z tabeli PRACOWNICY.
SELECT
*
FROM DB
2
ADMIN
.
PRACOWNICY
;
Rys. 3.1.
Wybieranie wszystkich kolumn i wierszy ma sens tylko w przypadku ma)ych tabel, W praktyce
buduje si zapytania, które znacznie ograniczaj wynik zapytania.
Wybieranie okre-lonych kolumn
Polecenie
SELECT
, którego u#yjemy za chwil , wy7wietla kolumny IMI\, NAZWISKO i DZIA[ z
tabeli PRACOWNICY.
SELECT IMIE, NAZWISKO, DZIAL FROM DB2ADMIN.PRACOWNICY;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
11
Rys.3.2
Wybieranie i jednoczesnym porz3dkowaniem
Nast puj ce polecenie
SELECT
wy7wietla kolumny IMI\, NAZWISKO i DZIA[ z tabeli
PRACOWNICY i jednocze7nie porz dkuje dane wed)ug nazwiska.
SELECT IMIE, NAZWISKO, DZIAL FROM DB2ADMIN.PRACOWNICY
ORDER BY NAZWISKO ASC;
Rys.3.3.
Wynik wykonania zapytania jest uporz dkowany wed)ug kolumny wskazanej w klauzuli ORDER BY.
S)owo kluczowe
ASC
mówi o tym, #e sortowanie zostanie dokonane w porz dku rosn cym.
Sortowanie rosn ce jest domy7lne wi c s)owo kluczowe
ASC
nie musi by wyspecyfikowane.
Porz dek malej cy uzyskuje si przez zastosowanie s)owa
DESC
.
W zale#no7ci od implementacji bazy danych kolumna wyst puj ca w klauzuli ORDER
BY
musi by
cz 7ci wyniku wykonania zapytania.
Mo#liwe jest wskazanie wi kszej liczby kolumn w klauzuli
ORDER BY
. Przyk)adowo mo#e istnie
potrzeba wybrania danych w tabeli z jednoczesnym sortowaniem wed)ug stanowiska, na którym dana
osoba pracuje, a nast pnie wed)ug nazwiska.
SELECT IMI&, NAZWISKO, STANOWISKO, DZIA'
FROM DB2ADMIN.PRACOWNICY ...
ORDER BY STANOWISKO ASC, NAZWISKO ASC;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
12
Rys.3.4.
Istnieje inny sposób na wskazanie kolumn w klauzuli
ORDER BY
. Zamiast nazywa kolumny, mo#emy
je wskaza poprzez ich pozycje na li7cie
SELECT
.
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL FROM DB2ADMIN.PRACOWNICY
ORDER BY 3 ASC, 2 ASC;
Inne przyk)ady:
ORDER BY 3 ASC, NAZWISKO ASC
ORDER BY 3 ASC, 2 ASC, DZIAL ASC;
Dozwolona jest tylko jedna klauzula
ORDER BY
w zapytaniu
SELECT
. Klauzul
ORDER BY
okre7la si
jako ostatni w ca)ym zapytaniu
SELECT
.
Wybieranie niepowtarzaj3cych si) wierszy
S)owo kluczowe
DISTINCT
zapewnia, #e wynik zwrócony z zapytania zawiera
b dzie tylko
niepowtarzaj ce si wiersze. Wszystkie powtarzaj ce si warto7ci nie zostan wy7wietlone.
SELECT DISTINCT STANOWISKO FROM DB2ADMIN.PRACOWNICY;
Rys.3.5.
S)owo kluczowe
DISTINCT
musi wyst powa zaraz po s)owie kluczowym
SELECT
.
SELECT DISTINCT STANOWISKO, DZIA' FROM DB2ADMIN. PRACOWNICY;
Takie zapytanie wy7wietli wszystkie stanowiska obejmowane w danych dzia)ach. Je#eli w danym
dziale pojawi si dwa takie same stanowiska, tylko jedno zostanie wy7wietlone.
S)owo
DISTINCT
eliminuje wiersze, które posiadaj
duplikaty we wszystkich kolumnach
wyspecyfikowanych w wyra#eniu
SELECT
. Tylko jedno s)owo
DISTINCT
mo#e zosta u#yte w ca)ym
zapytaniu
SELECT
.
Wybieranie okre-lonych wierszy
Do wybrania okre7lonych wierszy z tabeli u#ywa si klauzuli
WHERE
, która s)u#y do okre7lenia
kryterium wyboru wierszy. W klauzuli WHERE specyflkujemy warunek, który musi by spe)niony
dla szukanych wierszy.
SELECT IMI&, NAZWISKO, STANOWISKO, DZIAL
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
13
PROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO = 'SPRZEDAWCA
’
;
Rys.3.6.
W przypadku kolumn typu znakowego, daty lub czasu, warto7ci dla których sprawdzany jest warunek
musz by otoczone apostrofem. Przy porównywaniu kolumn typu znakowego nale#y pami ta , #e
rozró#niane s wielkie i ma)e litery. Dla kolumn typu numerycznego jak np. INTEGER, SMALLINT,
warto7ci do porównania nie s otaczane apostrofem.
SELECT NR_KLIENTA, NR_SAMOCHODU, NR_PRACOW_WYP, CENA_JEDN
FROM DB2ADMIN.WYPOZYCZENIA
WHERE CENA_JEDN >= 100;
Operatory logiczne u5ywane w klauzuli WHERE
SELECT NR_KLIENTA, NR_SAMOCHODU, NR_PRACOW WYP, CENA_JEDN
FROM DB2ADMIN. WYPOZYCZENIA
WHERE CENA_JEDN = 100 - równa
CENA_JEDN <> 100 - nie równa
CENA_JEDN > 100 - wi ksza ni
CENA_JEDN >= 100 - wi ksza lub równa
CENA_JEDN < 100 - mniejsza ni
CENA_JEDN <= 100 - mniejsza lub równa
Operatory AND oraz OR
Kiedy w warunku u#ywamy operatora
AND
, aby wiersz zosta) zawarty w wyniku, oba warunki
po) czone operatorem
AND
musz zosta spe)nione, tzn. musz zwróci warto7 prawdy (TRUE).
Warunek z operatorem
OR
zwróci warto7 TRUE, gdy przynajmniej jedna ze stron zwróci warto7
TRUE.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
14
Rys.3.7.
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL
FROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO = 'SPRZEDAWCA'
AND DZIAL = 'OBS'UGA KLIENTA’;
Takie zapytanie SQL zwróci w wyniku wszystkich pracowników pracuj cych na stanowisku
sprzedawca w dziale obs)ugi klienta.
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL
FROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO = 'SPRZEDAWCA'
OR DZIAL = 'TECHNICZNY';
Rys.3.8.
Nast pne zapytanie zwróci wszystkich pracowników pracuj cych na stanowisku sprzedawca oraz
wszystkich pracowników pracuj cych w dziale technicznym niezale#nie od tego, czy pracuj na
stanowisku sprzedawca.
Operatorów
AND
i
OR
mo#emy u#ywa razem do budowy bardziej z)o#onych warunków. Nast puj ce
zapytanie zwróci wszystkich pracowników pracuj cych na stanowisku kierownika w dziale obs)ugi
klienta oraz wszystkich pracowników z dzia)u technicznego.
Wiersze zostan uporz dkowane wg dzia)u a nast pnie wg nazwiska.
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL
FROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO = 'KIEROWNIK'
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
15
AND DZIAL = 'OBS'UGA KLIENTA'
OR DZIAL = 'TECHNICZNY'
ORDER BY DZIAL, NAZWISKO;
Rys.3.9.
W poprzednim przyk)adzie widoczna jest wy#szo7 operatora
AND
nad operatorem
OR
. Nast pne
zapytanie posiada w klauzuli
WHERE
warunki otoczone nawiasami. Nawiasy pozwalaj okre7li
kolejno7 sprawdzania warunków.
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL
FROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO = 'KIEROWNIK
’
AND (DZIAL = 'OBS'UGA KLIENTA' OR DZIA' = 'TECHNICZNY')
ORDER BY DZIAL, NAZWISKO;
Zapytanie wy7wietli osoby pracuj ce tylko na stanowisku kierownika w dziale obs)ugi klienta lub w
dziale technicznym.
Rys.3.10.
Predykat IN
Predykat
IN
pozwala porówna warto7 do warto7ci ze zbioru. Warto7ci typu znakowego, daty i czasu
musz by otoczone apostrofem.
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL
FROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO IN ('SPRZEDAWCA
’
, 'KIEROWNIK');
Rys.3.11.
Warto7ci mog by typu numerycznego, znakowego, typu daty lub czasu.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
16
SELECT MARKA, TYP, ROK_PROD, POJ_SILNIKA
FROM DB2ADMIN. SAMOCHODY
WHERE POJ_SILNIKA IN (1400, 1600);
Rys.3.12.
Predykat BETWEEN
Predykat
BETWEEN
pozwala sprawdzi , czy dana warto7 zawiera si mi dzy dwoma wskazanymi
warto7ciami.
SELECT MARKA, TYP, ROK_PROD, KOLOR, POJ_SILNIKA
FROM DB2ADMIN.SAMOCHODY
WHERE POJ_SILNIKA BETWEEN 1100 AND 1800;
Rys.3.13.
Zapytanie zwróci)o dane o samochodach, których pojemno7 silnika zawiera si miedzy 1100 a 1800
cm sze7ciennych.
Klauzula:
WHERE POJ_SILNIKA BETWEEN 1100 AND 1800;
jest równa nast puj cemu zapisowi:
WHERE POJ_SILNIKA >= 1100 AND POJ_SILNIKA <= 1800;
Wybieranie warto-ci NULL
Wybieranie wierszy z tabeli, w których jedno z pól zawiera warto7 pust
NULL
, polega na u#yciu
predykatu
NULL
.
W przyk)adzie u#ycia predykatu
NULL
wybieramy wszystkich klientów, którzy nie posiadaj karty
kredytowej. Zwrócone zostan wiersze z danymi o klientach, którzy w polu NR_ KARTY_KREDYT
nie posiadaj #adnego wpisu.
SELECT IMI&, NAZWISKO, ULICA, MIASTO
PROM DB2ADMIN.KLIENCI
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
17
WHERE NR_KARTY_KREDYT IS NULL;
Mo#liwe jest wybranie wszystkich klientów posiadaj cych kart kredytow . Wtedy w klauzuli
WHERE
dla sprawdzenia warto7ci w polu NR_KARTY_KREDYT u#ywamy równie# predykatu
NULL
, ale z
zaprzeczeniem.
SELECT IMIE, NAZWISKO, NR_KARTY_KREDYT, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NR_KARTY_KREDYT IS NOT NULL;
Rys.3.14.
Wyszukiwanie cz)-ciowe - predykat LIKE
Cz sto istnieje konieczno7 wyszukania np. nazwisk klientów, które zaczynaj si od konkretnej
litery.
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE 'K%';
Rys.3.15.
Inne przyk)ady u#ycia predykatu
LIKE
:
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE '%SKI';
Rys.3.16.
Zapytanie zwróci wiersze z danymi o klientach, których nazwiska ko@cz si na „ski".
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
18
W nast pnym przyk)adzie wyszukamy klientów, którzy w swoim nazwisku posiadaj litery „K" oraz
„A" w wymienionym porz dku.
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE '%K%A%';
Rys.3.17.
W zapytaniach z predykatem
LIKE
mo#na stosowa zaprzeczenie NOT oraz operatory
AND
i OR. Oto
przyk)ady:
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI ,
WHERE NAZWISKO NOT LIKE 'K%';
Rys.3.18.
Nast puj ce zapytanie wyszuka wszystkich klientów, których nazwiska nie zaczynaj si na liter „K"
oraz „D".
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO NOT LIKE 'K%'
AND NAZWISKO NOT LIKE 'D%' ;
Mo#liwe jest równie# wyszukanie np. klientów, których nazwiska zawieraj drug liter „O". Znak
„_" zast puje dowolny pojedynczy znak.
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE '_0%';
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
19
Rys.3.19.
Oto drugi przyk)ad, w którym pomijamy dwie pierwsze litery nazwiska:
SELECT IMIE, NAZWISKO, ULICA, MIASTO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE '_C%';
Podsumowanie
1. Do wybierania danych z tabeli s)u#y polecenie
SELECT
.
2. Mo#na wybiera wszystkie i okre7lone kolumny tabeli.
3. Mo#na wybiera wszystkie i okre7lone wiersze.
4. Mo#na wybiera dane i jednocze7nie je uporz dkowa .
5. W zapytaniu
SELECT
mo#na u#y s)ów kluczowych:
DISTINCT
- w celu wyszukania nie powtarzaj cych si wierszy;
LIKE
- w celu okre7lenia warto7ci dla warunku;
IN - w celu wskazania zbioru warto7ci dla warunku;
BETWEEN
- w celu wskazania zakresu warto7ci dla warunku.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
20
Rozdzia 4 . Wybieranie danych z wielu tabel.
W tym rozdziale zajmiemy si wyszukiwaniem danych z wielu tabel. Do tej pory wszystkie zapytania
wyszukuj ce koncentrowa)y si na jednej tabeli. Poza tym nauczymy si u#ywa skrótów w
odwo)ywaniu si do tabel w zapytaniach SQL. Poznamy równie# predykat
JOIN
.
R
YS
.4.1.
W naszej przyk)adowej bazie danych WYPAUT, dla ka#dego numeru miejsca (miejsca pracy
pracownika) w tabeli PRACOWNICY istnieje jeden wiersz w tabeli MIEJSCA.
Rys. 4.2.
DB2 odczytuje numer miejsca pracy pracownika z tabeli PRACOWNICY, a nast pnie przeszukuje
tabel MIEJSCA w celu znalezienia odpowiadaj cego temu numerowi wiersza, który opisuje
dok)adnie miejsce pracy tzn. adres, telefon itd. W j zyku baz danych, jakim jest SQL, pytanie
przedstawione na poprzednim rysunku mo#e wygl da tak:
SELECT DB2ADMIN.PRACOWNICY.NAZWISKO,
DB2ADMIN.PRACOWNICY.STANOWISKO,
DB2ADMIN.PRACOWNICY.DZIAL,
DB2ADMIN.MIEJSCA.MIASTO,
DB2ADMIN.MIEJSCA.ULICA
FROM DB2ADMIN.PRACOWNICY,DB2ADMIN.MIEJSCA
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
21
WHERE
DB2ADMIN.PRACOWNICY.NR_MIEJSCA=DB2ADMIN.MIEJSCA.NR_MIEJSCA
ORDER BY DB2ADMIN.PRACOWNICY.NAZWISKO;
Rys.4.3.
Wybieranie danych z wielu tabel nazywa si powszechnie z) czeniem (ang. join). W celu z) czenia
dwóch lub wi kszej ilo7ci tabel:
w klauzuli
SELECT
musimy wyspecyfikowa kolumny, które chcemy zawrze w zapytaniu;
w klauzuli
FROM
okre7lamy nazwy z) czanych tabel;
w klauzuli
WHERE
okre7lamy warunki z) czenia.
Sk7adnie z73czenia - predykat JOIN
Istniej dwa typy sk)adni zapytania z) czaj cego. Pierwszy typ zosta) zaprezentowany ju# w
poprzedniej sekcji. Oto zapytanie, które zosta)o zbudowane przy u#yciu tej sk)adni:
SELECT DB2ADMIN.PRACOWNICY.NAZWISKO,
DB2ADMIN.PRACOWNICY.STANOWISKO,
DB2ADMIN.PRACOWNICY.DZIAL,
DB2ADMIN.MIEJSCA.MIASTO,
DB2ADMIN.MI&JSCA.ULICA
FROM DB2ADMIN.PRACOWNICY,
DB2ADMIN.MIEJSCA
WHERE DB2ADMIN.PRACOWNICY.NR_MIEJSCA = DB2ADMIN.MIEJSCA.NR_MIEJSCA
ORDER BY DB2ADMIN.PRACOWNICY.NAZWISKO;
Przy z) czaniu dwóch tabel, do poprawnego wy7wietlenia wyniku klauzula
WHERE
musi zawiera
jeden warunek. Gdy z) czamy trzy tabele, klauzula WHERE musi zawiera przynajmniej dwa
warunki. Dwa pierwsze warunki w tym przyk)adzie dotycz z) czenia tabel, trzeci dotyczy warunku
wyboru wierszy. Oto przyk)ad:
SELECT DB2ADMIN. WYPO"YCZENIA.NR_WYPOZYCZENIA,
DB2ADMIN.PRACOWNICY.NAZWISKO,
DB2ADMIN.PRACOWNICY.STANOWISKO,
DB2ADMIN.PRACOWNICY.DZIAL,
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
22
DB2ADMIN.MIEJSCA.MIASTO,
DB2ADMIN.MIEJSCA.ULICA
FROM DB2ADMIN.PRACOWNICY,
DB2ADMIN.MIEJSCA,
DB2ADMIN.WYPOZYCZENIA
WHERE DB2ADMIN.PRACOWNICY.NR_MIEJSCA = DB2ADMIN.MIEJSCA.NR_MIEJSCA
AND DB2ADMIN.PRACOWNICY.NR_PRACOWNIKA = DB2ADMIN.WYPOZYCZENIA.NR_PRACOW_WYP
AND DB2ADMIN.MIEJSCA.MIASTO = 'WARSZAWA'
ORDER BY DB2ADMIN.PRACOWNICY.NAZWISKO;
Rys.4.4.
Inny typ z) czenia polega na zastosowaniu konstrukcji
JOIN
...
ON
.
SELECT DB2ADMIN.PRACOWNICY.NAZWISKO,
DB2ADMIN.PRACOWNICY.STANOWISKO, DB2ADMIN.PRACOWNICY.DZIAL,
DB2ADMIN.MIEJSCA.MIASTO, DB2ADMIN.MIEJSCA.ULICA
FROM DB2ADMIN.PRACOWNICY JOIN
DB2ADMIN.MIEJSCA ON
DB2ADMIN.PRACOWNICY.NR_MIEJSCA = DB2ADMIN.MIEJSCA.NR_MIEJSCA
WHERE DB2ADMIN.PRACOWNICY.STANOWISKO = 'SPRZEDAWCA'
ORDER BY DB2ADMIN.PRACOWNICY.NAZWISKO;
Kiedy u#ywamy s)owa
JOIN
w klauzuli
FROM
, warunki z) czenia musz by wyspecyfikowane po
klauzuli
ON
. W klauzuli
WHERE
mo#na okre7li
dodatkowe warunki. Oto wynik wykonania
powy#szego zapytania:
Rys.4.5.
Stosowanie aliasów w zapytaniu
Aliasy definiuje si w celu skrócenia nazwy tabeli. Jak wiemy na nazw tabeli sk)ada si kwalifikator i
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
23
nazwa tabeli. Kwalifikator mówi o tym, kto jest w)a7cicielem tabeli. W naszym przyk)adzie u#ycia
aliasów, alias P wskazuje na tabel DB2ADMIN.PRACOWNICY natomiast alias M opisuje tabel
DB2ADMIN.MIEJSCA.
SELECT P.NAZWISKO, P.STANOWISKO, P.DZIA' , M.MIASTO, M.ULICA
FROM DB2ADMIN.PRACOWNICY P,
DB2ADMIN.MIEJSCA M
WHERE
P.NR_MIEJSCA = M.NR_MIEJSCA AND P.STANOWISKO = 'SPRZEDAWCA'
ORDER BY P.NAZWISKO;
Wynik wykonania tego zapytania jest taki sam jak w ten w poprzedniej sekcji. Pocz wszy od tej sekcji
w przyk)adach b dziemy stosowa aliasy dla nazw tabel.
Podsumowanie
1. Dane mog by wydobywane z jednej lub wielu tabel.
2. W zapytaniu wybieraj cym dane z przynajmniej dwóch tabel mo#na u#y predykatu JOIN.
3. Je#eli w zapytaniu, które wybiera dane z przynajmniej dwóch tabel, nie zostanie
wyspecyfikowany warunek po s)owie kluczowym
WHERE
lub
ON
, to zwrócony wynik b dzie
przedstawia) iloczyn kartezja@ski.
4. W zapytaniach mo#na u#y aliasów zamiast nazw tabel.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
24
Rozdzia 5. Funkcje skalarne i arytmetyczne.
W tym rozdziale zajmiemy si u#ywaniem funkcji skalarnych i arytmetycznych. B dziemy u#ywa
funkcji arytmetycznych do przeliczania warto7ci w kolumnach. Poznamy podstawowe funkcje
skalarne m.in. funkcje operuj ce na datach i czasie. Pod koniec tego rozdzia)u poznamy sposób na
wybieranie warto7ci przy u#yciu wyra#enia
CASE
.
Wybieranie wyliczonych warto-ci
W zapytaniu SQL mo#emy u#y nast puj cych operatorów arytmetycznych w celu obliczenia
warto7ci:
+ dodawanie
- odejmowanie
* mno#enie
/ dzielenie
Operatorów tych mo#emy u#y do budowy bardziej rozbudowanych wyra#e@ matematycznych
w) cznie z u#yciem nawiasów w celu zaznaczenia kolejno7ci wykonywania dzia)a@.
SELECT P.IMI&, P.NAZWISKO, P.PENSJA, P.DODATEK, P.PENSJA + P.DODATEK
FROM DB2ADMIN.PRACOWNICY'P WHERE P.PENSJA > 1100
ORDER BY P,NAZWISKO;
Rys.5.1.
Wynik zapytania zawiera obliczon kolumn , która jest sum kolumn; PENSJA I DODATEK.
Kolumna z wynikiem zosta)a domy7lnie nazwana „5", poniewa# jest ona pi ta z kolei. Nazwa taka
zosta)a nadana w DB2 zainstalowanym pod kontrol systemu Windows NT. W innych systemach
operacyjnych, DB2 mo#e wy liczon kolumn nazywa inaczej.
Dla dwóch pracowników, którzy zajmuj stanowisko kierowników nie zosta)y obliczone warto7ci. Nie
posiadaj oni #adnego dodatku. ]ci7lej mówi c, w polu DODATEK warto7 dodatku dla tych osób
wynosi
MOLL
. Warto7ci NULL nie mog bra udzia)u w obliczeniach. W dalszej cz 7ci tego rozdzia)u
dowiemy si , jak obej7 taki przypadek.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
25
Nazywanie wyliczone. Kolumny
Kolumn wynikow mo#emy nazwa . Poni#ej znajduje si identyczne zapytanie jak w poprzedniej
sekcji. Po s)owie kluczowym
AS
podana jest nazwa dla nowej wyliczonej kolumny.
SELECT P.IMIE, P.NAZWISKO, P.PENSJA, P.DODATEK,
P.PENSJA + P.DODATEK AS DO_WYPLATY
FROM DB2ADMIN.PRACOWNICY P
WHERE P. PENSJA > 1100
ORDER BX P.NAZWISKO;
Rys.5.2.
W tym przyk)adzie tak samo jak w przyk)adzie z poprzedniej sekcji do oblicze@ nie mog)a by wzi ta
pod uwag warto7
NULL
. St d puste pola widoczne na powy#szym rysunku. Zostanie to rozwi zane
w nast pnej sekcji.
Nazwa tabeli wyliczonej mo#e by otoczona cudzys)owem co pozwala na u#ycie nazwy sk)adaj cej
si z kilku s)ów. Ilustruje to poni#szy przyk)ad.
SELECT P.IMIE, P.NAZWISKO, P.PENSJA, P.DODATEK,
P.PENSJA + P.DODATEK AS "DO WYPLATY"
FROM DB2ADMIN.PRACOWNICY P
WHERE P.PENSJA > 1100 ORDER BY P.NAZWISKO;
Nowa nazwa kolumny wyliczonej nie mo#e by u#yta w klauzuli
WHERE
. W systemie DB2 mo#e by
natomiast u#yta w
ORDER BY
.
SELECT P.IMIE, P.NAZWISKO, P.PENSJA, P.DODATEK
P.PENSJA + P.DODATEK AS DO_WYPLATY
FROM D32ADMIN. PRACOWNICY P
WHERE P.PENSJA > 1100
ORDER BY DO_WYPLATY;
Jak wida w powy#szym przyk)adzie, nazwa kolumny DO_WYPLATY w klauzuli
ORDER BY
nie
mo#e by poprzedzona aliasem jak pozosta)e kolumny.
W systemie InterBase, nowa nazwa kolumny wyliczonej nie mo#e by u#yta w klauzuli
ORDER BY
.
Zamiast nazwy mo#emy wskaza numer kolumny, wzgl dem której b dziemy porz dkowa dane. Oto
przyk)ad tego samego polecenia dla systemu InterBase:
SELECT P.IMIE, P.NAZWISKO, P.PENSJA, P.DODATEK,
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
26
P.PENSJA + P.DODATEK AS DO_WYPLATY
FROM PRACOWNICY P WHERE P.PENSJA > 1100
Funkcja COALESCE
Funkcja
COALESCE
zosta)a zaimplementowana tylko w systemie DB2. Funkcja
COALESCE
jest funkcj
operuj c na warto7ci
NULL
. Zwraca pierwszy argument który nie jest warto7ci
NULL
. Funkcja ta jest
równowa#na funkcji
VALUE
. Funkcja
YALUE
jest synonimem funkcji
COALESCE
. ,
Poni#szy przyk)ad u#ycia funkcji
COALESCE
rozwi zuje nasz problem z poprzedniej sekcji. Dzia)anie
funkcji
COALESCE
najpierw w kolumnie DODATEK zamienia wszystkie wyst pienia warto7ci
NULL
na warto7 zera, a nast pnie robi to samo przy obliczaniu warto7ci do wyp)aty.
SELECT P.IMIE, P.NAZWISKO, P.PENSJA,
COALESCE ( P.DODATEK, O ) AS DODATEK,
P.PENSJA + COALESCE (P.DODATEK, 0) AS DO_WYP'ATY
FROM DB2ADMIN.PRACOWNICY P
WHERE P,PENSJA > 1100 ORDER BY P.NAZWISKO;
Rys.5.3.
W kolejnym przyk)adzie funkcja
COALESCE
zosta)a u#yta w celu zast pienia wszystkich-wyst pie@
warto7ci
NULL
na ci g „nie posiada". Wy7wietleni zostali wszyscy klienci.
Dla tych, którzy nie posiadaj karty kredytowej, w polu NRJCARTY zosta) wpisany ci g „nie
posiada".
SELECT K.IMIE, K.NAZWISKO,
COALESCE<K.NR_KARTY_KREDYT, 'Nie posiada') AS NR__KARTY
FROM DB2ADMIN.KLIENCI K;
Rys.5.4.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
27
Dziesi)tna reprezentacja warto-ci
Funkcja
DECIMAL
zosta)a zaimplementowana tylko w systemie DB2. Funkia DBCIMAL zwraca
dziesi tn reprezentacj warto7ci numerycznej.
Pierwszy parametr zawiera warto7 do reprezentacji, drugi parametr okre7la ilo cyfr przed
przecinkiem, trzeci parametr okre7la liczb miejsc po przecinku.
SELECT P.IMIE, P.NAZWISKO, P.PENSJA,
DECIMAL ( (P.PENSJA * 11.3)/100, 8, 2} AS KWOTA_PODWYZKI
FROM DB2ADMIN.PRACOWNICY P ORDER BY P.NAZWISKO;
Przyk)ad oblicza kwot 11.3% podwy#ki.
Rys.5.5.
Zaokr3glanie wyników
Funkcja
ROUND
zosta)a zaimplementowana tylko w systemie DB2. S)u#y ona do zaokr glania
wyników, Funkcja ta w pierwszym argumencie musi zawiera warto7 do zaokr glenia, w drugim
natomiast podaje si liczb miejsc po przecinku, do jakiej ma zosta zaokr glona
warto7 . Poni#szy przyk)ad zaokr gla warto7ci do liczb ca)kowitych. Warto7ci dziesi tne poni#ej 0,50
zosta)y zaokr glone do zera, natomiast powy#ej 0,50 do jedno7ci.
SELECT P.IMIE, P.NAZWISKO, P.PENSJA,
ROUND ( (P.PENSJA * 11.31/100, 0) AS KWOTA_PODWYZKI
FROM DB2ADMIN.PRACOWNICY P
ORDER BY P.NAZWISKO;
Rys.5.6.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
28
Porównania daty
Kolumny typu daty lub czasu mog by porównywane z innymi warto7ciami reprezentuj cymi dat
lub czas. Warto7ci przedstawiaj ce dat lub czas musz by otoczone pojedynczym cudzys)owem. W
poni#szym przyk)adzie zostan wy7wietlone dane
pracowników zatrudnionych w lub po dacie 1998-01-01.
SELECT P.IMIE, P.NAZWISKO, P.DZIAL,
P.STANOWISKO, P.DATA_ZATR
FROM DB2ADMIN. PRACOWNICY P
WHERE P.DATA_ZATR >= '1998-01-01'
ORDER BY P.NAZWISKO;
Rys.5.7.
Kolejne zapytanie wybiera pracowników zatrudnionych co najmniej 2 lata. Porównywana warto7
020000 przedstawia 02 rok, 00 miesi cy i 00 dni. Funkcja
CURRENT DAT\
zwraca bie# c dat .
Funkcja ta nie jest dost pna w systemie InterBase.
SELECT P.IMIE, P.NAZWISKO, P.DZIAL,
P.STANOWISKO, P.DATA__ZATR
FROM DB2ADMIN.PRACOWNICY P
WHERE CURRENT DATE - P.DATA_ZATR >= 020000
ORDER BY P.NAZWISKO;
Rys.5.8.
Oprócz funkcji
CORRENT DAT\
, która zwraca bie# c dat , mamy do wykorzystania funkcj
zwracaj c bie# cy czas
CURRENT TIME
oraz funkcj
CURRENT TIMESTAMP
zwracaj c dok)adny
bie# cy czas. Obie pozosta)e funkcje równie# nie s dost pne w systemie InterBase.
Funkcje daty
Funkcja
YEAR
pozwala odczyta rok z pe)nego formatu daty. Funkcja
YEAR
oraz wszystkie pozosta)e
w tej sekcji nie zosta)y niestety zaimplementowane w InterBase. Kolejny przyk)ad jest identyczny do
tego z poprzedniej sekcji z tym wyj tkiem, #e dodatkowa kolumna przedstawia ilo7 przepracowanych
lat przez pracownika, który pracuje d)u#ej ni# dwa lata.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
29
SELECT P.IMIE, P.NAZWISKO, P.DZIAL, P.STANOWISKO, P.DATA_ZATR,
YEAR (CURRENT DAT" -
P.DATA_ZATR) AS ILOSC_LAT
FROM DB2ADMIN.PRACOWNICY P
WHERE CURRENT DATE -
P.DATA_ZATR >= 020000
ORDER BY P.NAZWISKO;
Rys.5.9.
Poza funkcj
YEAR
mamy do dyspozycji funkcje
MDNTH
oraz
DAY
, które odpowiednio wydobywaj z
daty miesi c i dzie@. Oto przyk)ad:
SELECT P. IMI&, P. NAZWISKO, P.DATA_ZATR
YEAR(P.DATA_ZATR) AS ROK,
MONTH(P.DATA_ZATR) AS MIESIAC,
DAY(P.DATA_ZATR) AS DZIEN
FROM DB2ADMIN.PRACOWNICY P;
Rys.5.10.
W naszej przyk)adowej bazie danych znajduje si tabela WYPORYCZENIA, która m.in. przechowuje
dane o dacie wypo#yczenia samochodu i o dacie jego oddania. Nast pny przyk)ad b dzie oblicza)
ilo7 dni, przez które samochód by) wypo#yczony.
SELECT K.NAZWISKO, W.NR_WYPOZYCZENIA,
W.DATA_WYP, W.DATA_ODD,
DAYS(W.DATA_ODD)- DAYS(W.DATA_WYP) + l AS ILOSC_DNI
FROM DB2ADMIN.KLIENCI K, DB2ADMIN.WYPO"YCZENIA W
WHERE K.NR_KLIENTA = W.NR_KLIEHTA AND W.DATA_ODD IS NOT NULL;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
30
Rys.5.11.
Ci g DAYS(W.DATA_ODD) - DAYS (W. DAT_WYP) + l AS ILOSC_DNI wyst puj cy w
zapytaniu odejmuje od daty oddania dat wypo#yczenia samochodu i dodaje jeden. Dodanie jednego
dnia ma na celu zaznaczenie sytuacji, gdy klient odda) samochód w dniu wypo#yczenia. W takim
przypadku ró#nica tych dat równa jest zero. W pozosta)ych przypadkach równie# dodawana musi by
liczba jeden, aby zawrze w wyniku pierwszy dzie@ wypo#yczenia. Funkcja
DAYS
odczytuje z daty
ilo7 dni od daty l stycznia 0001 roku plus jeden.
Nast pny przyk)ad u#ycia funkcji
DAYS
polega na odj ciu od istniej cych dat dwóch dni. Mo#emy
równie# pos)u#y si funkcj
YEARS
oraz
MONTHS
, które odpowiednio oznaczaj lata i miesi ce.
SELECT K. NAZWISKO, W. NR_WYPOZYCZENIA,
W.DATA_WYP, W.DATA_ODD
W.DATA_WYP - 2 DAYS, W. DATA_ODD - 2 DAYS
FROM DB2ADMIN.KLIENCI K,
DB2ADMIN.WYPO"YCZENIA W
WHERE K.NR_KLIENTA = W. NR_KLIENTA
AND W.DATA_ODD IS NOT NULL
AND K.MIASTO = 'WARSZAWA';
Rys.5.12.
Wybieranie pod7a cucha
W razie potrzeby wybrania tyko pewnej cz 7ci )a@cucha musimy zastosowa funkcj
SUBSTR
. Na
poni#szym rysunku funkcja
SUBSTR
wybiera ci g o d)ugo7ci sze7ciu znaków pocz wszy od trzeciego
znaku.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
31
Rys.5.13.
SELECT SUBSTR(K.NAZWISKO, 3, 4), K.NAZWISKO
FROM DB2ADMIN.KLIENCI K;
Rys.5.14.
W InterBase funkcj
SUBSTR
nale#y „uaktywni ". Polega to na zadeklarowaniu funkcji, która zostanie
pobrana z zewn trznej biblioteki do) czanej dynamicznie DLL. Aby funkcja ,.'."
SUBSTR
by)a aktywna
w InterBase, wykonaj poni#sze polecenie w Interactive SQL.
DECLARE EXTERNAL FUNCTION SUBSTR
CSTRING(80), SMALLINT, SMALLINT
RETURNS CSTRING(SO) FREE_IT
ENTRY_POINT 'IB_UDF_Substr' MODULE_NAME 'ib_udf.dll';
Po wykonaniu powy#szego polecenia, mo#emy przej7 do opcji IBConsole, aby zobaczy t funkcj ,
klikaj c w panelu po lewej stronie w ikon External Function.
Inaczej ni# w DB2, w InterBase funkcja
SUBSTR
wybiera ci g pocz wszy od pozycji podanej w
drugim argumencie a sko@czywszy na trzecim argumencie. Zatem polecenie:
SELECT SUBSTR(K.NAZWISKO, 3, 4), K.NAZWISKO
FROM KLIENCI K;
zwróci nast puj ce wyniki:
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
32
Rys.5.15.
<3czenie 7a cuchów
Funkcja
CONCAT
pozwala ) czy ci gi znaków w jeden )a@cuch wynikowy. Funkcja ta jest dost pna
tylko w DB2. Poni#szy przyk)ad zapytania wy7wietli list klientów wraz z adresem zamieszkania.
Taka lista mo#e pos)u#y jako Oród)o do korespondencji seryjnej.
SELECT K.IMIE CONCAT ' ' CONCAT K.NAZWISKO AS KLIENT,
'ul. ' CONCAT K.DLICA CONCAT ' ' CONCAT K. NUMER AS ULICA,
K. KOD CONCAT ' ' CONCAT K. MIASTO AS MIASTO
FROM DB2ADMIN.KLIENCI K
ORDER BY K.NAZWISKO;
Zamiast funkcji
CONCAT
mo#na u#y znaków | |:
SELECT K.IMI& | | ' ' | | K.NAZWISKO AS KLIENT, ...
Rys.5.16.
Wyra5enie CASE
Wyra#enie
CASE
pozwala na wybranie pewnej warto7ci w zale#no7ci od warto7ci w innej
kolumnie.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
33
Wyra#enie
CASE
dost pne jest tylko w systemie DB2. W przyk)adzie poni#ej sprawdzamy, czy klient
pochodzi z Warszawy; je#eli tak, to w kolumnie wpisywana jest warto7 „Klient oddzia)u
macierzystego", w przeciwnym razie jest to „Klient z przedstawicielstwa".
SELECT K.IMIE, K.NAZWISKO, K.MIASTO,
CASE K.MIASTO
WHEN 'WARSZAWA' THEN 'Klient oddziaFu macierzystego'
ELSE 'Klient z przedstawicielstwa'
END
FROM DB2ADMIN.KLIENCI K ORDER BY K.NAZWISKO;
Rys.5.17.
Podsumowanie
1. Funkcje arytmetyczne mog by u#ywane w klauzuli
SELECT
orazw HERE.
2. Kolumny wyliczone mog by nazwane przez zastosowanie klauzuli
AS
.
3. Funkcje skalarne mog by u#ywane do zmiany reprezentacji danych - funkcje: DECIMAL,
SUBSTR, CONCAT.
4. Funkcje skalarne mog by u#yte do wydobycia lat, miesi cy oraz dni z ró#nych formatów daty.
5. Wyra#enie CASE pozwala na wybór warto7ci dla kolumny w zale#no7ci od zdefiniowanego
warunku.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
34
Rozdzia 6.Funkcje kolumnowe i grupuj+ce
W tym rozdziale poznamy funkcje operuj ce na kolumnach, które mog by u#yte w celu wydobycia
wyników z jednego lub wi kszej ilo7ci wierszy Poznamy równie# zasady grupowania wierszy
Funkcje kolumnowe
Do funkcji kolumnowych zalicza si ftmkcje
SUM
,
AVG
,
MIN
,
MAX
oraz
COUNT
Funkcje te s
u#ywane w klauzulach
SELECT
lub
HAVING
SUM
- funkcja s)u# ca do obliczenia sumy warto7ci w okre7lonych kolumnach,
AVG
- oblicza 7redni warto7ci \v kolumnie,
MIN
- znajduje minimaln warto7 ,
MAX
- znajduje maksymaln warto7 ,
COUNT
- 7luzy do zliczania wyst pie@ pewnej warto7ci w wierszach
Poni#szy przyk)ad wy7wietli ca)kowit sum wszystkich pensji pracowników, 7redni pensj ,
minimaln i maksymalna pensj oraz ilo7 pracowników
SELECT SUM(P.PENSJA) AS PENSJA,
AVG(P.PENSJA) AS SREDNIA,
MIN (P.PENSJA) AS PENSJA_MIN,
MAX(P.PENSJA) AS PENSJA_MAX,
COUNT(*) AS ILOSC FROM DB2ADMIN PRACOWNICY P,
Rys.6.1.
W poprzednim przyk)adzie funkcja
COUNT
zosta)a u#yta do zliczenia wszystkich wierszy w tabeli
(
COUNT
(*)), mo#e by ona u#yta równie# do zliczenia wierszy zawieraj cych powtarzaj c si
warto7 w kolumnie. W tym przyk)adzie zliczamy liczb dzia)ów i stanowisk w firmie.
SELECT COUNT(DISTINCT P.DZIAL) AS ILOSC_DZIALOW,
COUNT(DISTINCT P.STANOWISKO) AS ILOSC_STANOWISK
FROM DB2ADMIN.PRACOWNICY P;
Rys.6.2.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
35
Stosowanie funkcji kolumnowych mo#na przeprowadzi równie# na pewnym podzbiorze wierszy,
SELECT SUM(P.PENSJA) AS PENSJA,
AVG(P.PENSJA) AS SREDNIA,
MIN(P.PENSJA) AS PENSJA_MIN,
MAX(P.PENSJA) AS PENSJA_MAX,
COUNT(*) AS ILOSC FROM DB2ADMIN.PRACOWNICY P
WHERE P.DZIAL = 'OBSLUGA KLIENTA
’
;
Rys.6.3.
Klauzula GROUP BY
Klauzula
GROUP BY
grupuje wiersze o tej samej warto7ci wyszczególnionych kolumn. Funkcje
agreguj ce SQL (
AYG
,
MAX
,
MIN
,
SUM
oraz
COUNT
) w klauzuli
SELECT
operuj na ka#dej grupie
osobno.
Rys.6.4.
Nast puj cy przyk)ad zapytania pogrupuje wiersze wed)ug stanowiska.
SELECT P.STANOWISKO, SUM (P.PENSJA) AS PENSJA,
AYG(P.PENSJA) AS SREDNIA,
MIN(P.PENSJA) AS PENSJA_MIN,
MAX(P.PENSJA) AS PENSJA_MAX,
COUNT(*) AS ILOSC
FROM DB2ADMIN. PRACOWNICY P
GROUP BY P.STANOWISKO
ORDER BY P.STANOWISKO;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
36
Rys.6.5.
Klauzula HAUING
Klauzula
HAYING
u#ywana jest w po) czeniu z klauzul
GROUP BY
w celu ograniczenia wy7wietlanych
grup. Warunek szukania musi zawiera funkcj agreguj c . Po zgrupowaniu wierszy przez klauzul
GROUP BY
, klauzula
HAYING
wy7wietla tylko te wiersze spo7ród zgrupowanych, które spe)niaj
warunki wyszczególnione w klauzuli
HAYING
.
Rys.6.6.
Klauzula
HAYING
mo#e by u#yta tylko wówczas, gdy w zapytaniu znajduje si klauzula
GROUP
BY.
Nast pny przyk)ad zapytania wy7wietla wszystkich pracowników, którzy wypo#yczyli samochody na
) czn jednostkow warto7 powy#ej 400 z).
SELECT P.NAZWISKO, SUM (W.CENA_JEDN)
FROM DB2ADMIN.PRACOWNICY P,
DB2ADMIN.WYPOZYCZENIA W
WHERE P.NR_PRACOWNIKA = W.NR_PRACOW_WYP
GROUP BY P.NAZWISKO;
HAVING SUM(W.CENA_JEDN) > 400
ORDER BY P.NAZWISKO;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
37
Rys.6.7.
Podsumowanie
1. Funkcje kolumnowe mog by u#yte tylko w klauzulach
SELECT
i
HAVING
.
2. Klauzula
SELECT
mo#e zawiera tylko funkcje kolumnowe oraz kolumny wskazane w klauzuli
ORDER BY
.
3. Klauzula
HAVING
mo#e zawiera
dowolne funkcje kolumnowe operuj ce na dowolnych
kolumnach tabeli. Te kolumny nie musza by wyspecyfikowane w klauzuli SELECT.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
38
Rozdzia 7. Klauzula UNION.
W tym rozdziale zapoznamy si z klauzul
UNION
, która pozwala na ) czenie dwóch lub wi cej
wyników wykonania zapytania
SELECT
. Poznamy sk)adni wyra#enia
UNION
, zasady dla listy w
klauzuli
SELECT
oraz ró#nice mi dzy klauzul
UNION
i
UNION ALL
.
<3czenie wielu wyników zapytania
Klauzula
UNION
) czy dwa lub wi cej polecenia
SELECT
w jedn tabel wynikow . Klauzula
SELECT
musi zwraca t sam liczb kolumn. Kolumny pokrywaj ce si mu-sz mie t sam szeroko7 i typ
danych. Nazwy tych kolumn mog by ró#ne.
Rys.7.1.
Klauzula UNION ) czy dwa zestawy wyników w jeden i jednocze7nie usuwa duplikaty. Poni#szy
rysunek ilustruje zastosowanie klauzuli
UNION
. Jak wida , powtarzaj ce si wiersze na szarym tle
zosta)y umieszczone tylko raz w ko@cowym wyniku zapytania z klauzul
UNION
.
W kolejnym przyk)adzie s zwracane dane o imieniu i nazwisku wszystkich klientów i pracowników,
których nazwiska ko@cz si na „ski". Tylko jedna osoba o imieniu i nazwisku Jan Kowalski
wyst puje jednocze7nie w tabeli klientów i pracowników.
SELECT IMIE, NAZWISKO
FROM DB2ADMIN.KLIENCI
WHERE NAZWISKO LIKE '%SKI'
UNION
SELECT IMIE, NAZWISKO
FROM DB2ADMIN. PRACOWNICY
WHERE NAZWISKO LIKE '%SKI';
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
39
Rys.7.2.
Za ka#dym razem zapytania ) cz ce wyniki z klauzul
UNION
wy7wietlaj wyniki posortowane
rosn co. Je#eli chcemy zawrze klauzul ORDER BY, która posortuje nam wynik malej co, musi ona
by umieszczona na ko@cu zapytania.
SELECT IMIE, NAZWISKO
FROM DB2ADMIN.KLIENCI
WHERE NA2WISKO LIKE '%SKI'
UNION
SELECT IMIE, NAZWISKO
FROM DB2ADMIN.PRACOWNICY
WHERE NAZWISKO LIKE '%SKI'
ORDER BY NAZWISKO DESC;
Rys.7.3.
W systemie InterBase powy#sze zapytanie nale#y zmodyfikowa poprzez zast pienie ostatniej
klauzuli
ORDER BY
nast puj c :
ORDER BY 2 DESC;
InterBase nie pozwala w zapytaniach ) cz cych wyniki na specyfikowanie nazwy kolumny w klauzuli
ORDER BY
.
Klauzula
UNION ALL
Ró#nica pomi dzy klauzul
UNION
a
UNION
ALL polega na tym, #e wynik ) czenia zapyta@ klauzul
UNION ALL
zawiera powtarzaj ce si wiersze.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
40
Rys.7.4.
Klauzula
UNION ALL
dziafa szybciej ni#
UNION
. Tak wi c, gdy ) czymy kilka wyników zapytania, i
gdy jeste7my pewni, #e ) czone wyniki nie zawieraj duplikatów, mo#emy u#ywa klauzuli
UNION
ALL
.
Podsumowanie
1. Wyniki zapytania
SELECT
z t sam liczb kolumn b d cych tego samego typu danych mog by
) czone poprzez u#ycie klauzuli
UNION
.
2. Klauzula
UNION
sortuje dane wynikowe i usuwa duplikaty.
3. Klauzula
UNION ALL
dzia)a szybciej ni#
UNION
.
4. U#yj klauzuli
UNION ALL
gdy jeste7 pewien, #e ) czone wyniki nie zawieraj duplikatów.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
41
Rozdzia 8. Podzapytania.
Rozdzia) ten opisuje u#ywanie podzapyta@. Znajduj
si
tutaj informacje, jak konstruowa
podzapytania, jak u#ywa podzapyta@ w klauzuli
WHERE
oraz w klauzuli
HAYING
oraz jak budowa
podzapytania ze s)owami kluczowymi
IN
,
ALL
,
ANY
lub
SOME
.
U5ywanie podzapyta
Przypu7 my, #e musimy znaleO pracowników, którzy otrzymuj wynagrodzenie na kwot wi ksz
ni# wynosi 7rednia. Musimy najpierw sprawdzi , jaka jest 7rednia dla ka#dego pracownika.
SELECT AVG(P.PENSJA)
FROM DB2ADMIN.PRACOWNICY P;
Wynik wynosi: 1530,00
Teraz szukamy pracowników, którzy zarabiaj poni#ej tej 7redniej:
SELECT P.IMIE, P.NAZWISKO, P.DZIAL, P.STANOWISKO
FROM DB2ADMIN.PRACOWNICY P WHERE P.PENSJA > 1530;
Rys.8.1.
Wykonali7my zadanie. ZnaleOli7my pracowników, którzy zarabiaj
powy#ej 7redniej. Ale
dokonali7my tego w dwóch krokach za pomoc dwóch zapyta@.
Teraz otrzymamy ten sam wynik, ale przy u#yciu podzapytania.
SELECT P,IMIE, P.NAZWISKO, P.DZIAL, P.STANOWISKO
FROM DB2ADMIN.PRACOWNICY P
WHERE P.PENSJA > (SELECT AVG(P.PENSJA)
FROM DB2ADMIN.PRACOWNICY P);
Podzapytania z u5yciem s7owa kluczowego IN
S)owo kluczowe
IN
pozwala na zidentyfikowanie wszystkich elementów w zbiorze A które nie
wyst puj w zbiorze B.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
42
Rys.8.2.
Zapytanie wy7wietla list samochodów, których do tej pory nie wypo#yczy) #aden klient. Zapytanie
wybiera te samochody, które nie znajduj si w tabeli WYPORYCZENIA, czyli te, które nie by)y do
tej pory przedmiotem wypo#yczenia.
SELECT S.NR_SAMOCHODO, S.MARKA, S,TYP
FROM D32ADMIN.SAMOCHODY S
WHERE S.NR_SAMOCHODU
NOT IN
(SELECT W.NR_SAMOCHODU
FROM DB2ADMIN.WYPOZYCZENIA W);
Rys.8.3.
Podzapytania z u5yciem s7owa kluczowego ALL
Przyk)adowe podzapytanie ze s)owem
ANY
b dzie wykonane w dwóch krokach. Jako pierwsze jest
wykonywane podzapytanie, które znajduje 7redni pensj w ka#dym dziale. W drugim kroku, ka#da
pensja pracownika porównywana jest z list 7rednich pensji. Wy7wietleni zostan pracownicy, których
pensja jest wy#sza od wszystkich 7rednich pensji obliczonych w podzapytaniu.
Rys.8.4.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
43
Podzapytania z u5yciem s7owa kluczowego ANY lub SOHE
Zapytanie z rysunku 8.5 jest wykonywane w dwóch krokach. Jako pierwsze jest wykonywane
podzapytanie, które znajduje 7redni pensj w ka#dym dziale. W drugim kroku, ka#da pensja
pracownika porównywana jest z list 7rednich pensji. Ostatecznie wy7wietleni zostan wszyscy
pracownicy, których pensja jest wy#sza od najmniejszej 7redniej pensji obliczonej w podzapytaniu.
Rys.8.5.
Podzapytania w klauzuli HAVING
Musimy znaleO dzia)y, w których 7rednia pensja pracowników jest wy#sza od 7redniej pensji w
firmie. Do 7rednich pensji nie b d brani pod uwag kierownicy dzia)ów.
Gdyby7my musieli wykona to zadanie „r cznie", to musieliby7my przej7 przez trzy kroki. W
pierwszym kroku musieliby7my znaleO 7redni pensj w firmie, nie bior c pod uwag kierowników.
SELECT AVG(P.PENSJA)
FROM DB2ADMIN.PRACOWNICY P
WHERE P.STANOWISKO <> 'KIEROWNIK
’
;
Rys.8.6.
W drugim kroku obliczyliby7my 7rednie pensje pracowników w poszczególnych dzia)ach, nie bior c
przy tym pod uwag kierowników.
SELECT P.DZIAL, AVG(P.PENSJA) AS SREDNIA_PENSJA
FROM DB2ADMIN.PRACOWNICY P
WHERE P.STANOWISKO <> 'KIEROWNIK'
GROUP BY P.DZIAL
ORDER BY SREDNIA_PENSJA;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
44
Rys.8.7.
Je#eli u#ywasz InterBase, zamie@ ostatni wiersz powy#szego polecenia na:
ORDER BY 2;
W trzecim kroku musieliby7my porówna warto7ci 7rednich pensji poszczególnych dzia)ów ze 7redni
pensj w firmie.
Ostatecznie wykonujemy to zadanie za pomoc pojedynczego zapytania z podzapytaniem w klauzuli
HAVING
.
SELECT P.DZIAL, AVG(P.PENSJA) AS SREDNIA_PENSJA
FROM DB2ADMIN.PRACOWNICY P
WHERE P.STANOWISKO <> 'KIEROWNIK
’
GROUP BY P.DZIAL
HAVING AVG(P.PENSJA) > (SELECT AVG(P.PENSJA)
FROM DB2ADMIN.PRACOWNICY P
WHERE P.STANOWISKO <> 'KIEROWNIK') ORDER BY SREDNIA_PENSJA;
Rys.8.8.
Podsumowanie
1. Podzapytania musz by otoczone nawiasami.
2. Podzapytania nie mog zawiera klauzuli
UNION
,
UNION
ALL lub
ORDER BY
.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
45
Rozdzia 9. Utrzymywanie danych.
W tym rozdziale nauczymy si tworzy tabele i widoki. Poznamy sk)adni j zyka SQL niezb dn do
ich tworzenia. Nauczymy si równie# wstawia wiersze do tabeli, zmienia dane w tabeli, usuwa
wiersze oraz usuwa tabele.
Tworzenie tabel
Na rysunku 9.1 znajdziesz wype)nion danymi tabel KLIENCIJTEST, na której b dziemy wiczy
zagadnienia poruszane w tym rozdziale.
Rys.9.1.
Nast puj ce wyra#enie
CREATE TABLE
tworzy tabel KLIENCI_TEST.
CREATE TABLE DB2ADMIN.KLIENCI_TEST (
NR_KLIENTA
CHAR(8) NOT NULL,
IMIE
VARCHAR(20) NOT NULL,
NAZWISKO
VARCHAR(20) NOT NULL,
NR_KARTY_KREDYT CHAR(20)
,
ULICA
VARCHAR(24) NOT NULL,
NUMER
CHAR(8) NOT NULL,
MIASTO
VARCHAR(24) NOT NUIi,
KOD
CHAR(6) NOT NULL,
NRJTELEFONU
CHAR (16),
PRIMARY KEY (NR_KLIENTA) ) ;
Definiuj c tabel musimy okre7li jej nazw np. KLIENCI_TEST. Nast pnie okre7li kolumny dla tej
tabeli. Ka#da kolumna musi posiada : unikatow nazw w obr bie tabeli oraz typ danych, jakie b d
przechowywane w kolumnie. Dodatkowo przy definiowaniu kolumn okre7li mo#na, czy dozwolone
jest pozostawienie jej pustej; je#eli nie, dodajemy klauzul
NOT NULL
do definicji kolumny. Np.
kolumna NR_KARTY_ KREDYT nie jest wymagana - podczas wstawiania nowego wiersza - pole w
tej kolumnie mo#emy pozostawi puste. Mo#e dzi7 (prawie) ka#dy posiada kart p)atnicz , ale nie
ka#dy posiada kart kredytow . Dodatkowo nie ka#dy klient ma #yczenie p)aci kart kredytow .
S)owo kluczowe
PRIMARY KEY
okre7la klucz g)ówny dla tabeli. Klucz g)ówny oraz klucz obcy
zostanie opisany w nast pnym rozdziale.
Tabel mo#emy przebudowa , dodaj c now kolumn lub j usuwaj c, mo#emy zmieni typ danych
kolumny, jak równie# zmieni inne cechy tabeli oraz kolumn w niej zawartych. Do zmiany struktury
tabeli s)u#y wyra#enie SQL
ALTER TABLE
.
Kolejne polecenie
ALTER TABLE
doda dwie kolumny: FIRMA oraz NIP do tabeli KLIENCI_TEST.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
46
ALTER TABLE DB2ADMIN.KLIENCI_TEST
ADD FIRMA VARCHAR(40)
ADD NIP CHAR(12) ;
W InterBase kolejne wiersze ze s)owem
ADD
w powy#szym poleceniu nale#y oddzieli
przecinkiem. Aby zapobiec b) dom, musimy wykona polecenie
ALTER TABLE
. Nast pne przyk)ady
b d operowa równie# na tych kolumnach.
Tworzenie widoków
Dane zawarte w widoku nie s jej fizycznymi danymi a danymi nale# cymi do tabeli lub kilku tabel z
których widok czerpie dane. Widoki przede wszystkim s tworzone w celu ograniczenia dost pu do
danych w tabelach bazy danych. Do tworzenia widoków s)u#y polecenie
CREATE VIEW
.
Poni#szy przyk)ad tworzy widok zawieraj cy dane klientów, którzy posiadaj firm .
CREATE VIEW DB2ADMIN.KLIENCI_FIRMY AS
SELECT K.IMIE, K.NAZWISKO, K.FIRMA, K.NIP, K.MIASTO
FROM DB2ADMIN.KLIENCI K
WHERE K.FIRMA IS NOT NULL;
Teraz mo#emy wybiera dane z widoku tak, jak do tej pory wybierali7my dane z tabeli.
SELECT *
FROM DB2ADMIN.KLIENCI_FIRMY;
Rys.9.2.
Nast pny przyk)ad tworzy widok, który ogranicza dane pracowników do wszystkich danych oprócz
informacji na temat dodatku i pensji.
CREATE VIEW DB2ADMIN.V__PRACOWNICY AS
SELECT P.NR_PRACOWNIKA, P.IMIE, P.NAZWISKO,
P.DATA_ZATR, P.DZIAL, P.STANOWISKO,
P.NR_MIEJSCA, P.NRJTELEFONU
FROM DB2ADMIN.PRACOWNICY P;
Dodawanie i usuwanie rekordów
Aby doda jeden lub wi cej rekordów do istniej cej tabeli, nale#y pos)u#y si wyra#eniem SQL
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
47
INSERT
. Aby doda rekord do tabeli KLIENCI_TEST zdefiniowanej w sekcji „Tworzenie tabel",
napisz i wykonaj poni#sze wyra#enie SQL. Upewnij si , #e tabela KLIENCIJTEST posiada kolumny
FIRMA oraz NIP, które dodali7my do struktury tabeli poleceniem
ALTER TABLE
.
INSERT INTO DB2ADMIN.KLIENCI_TEST
VALUES ( '00000031', 'MARIUSZ', 'DOLATA', NULL, 'KOCHANOWSKIEGO
’
, '3',
'WROC'AW', '37-300', '167-763-234', 'KWIATY', '2224-444-224');
Dodaj jeszcze kilka rekordów:
INSERT INTO DB2ADMIN.KLIENCI_TEST
YALUES ('00000032', 'TOMASZ', 'DOMAGA'A
’
, 'HX 145345678', 'RÓ"ANA', '4/9',
'WARSZAWA
’
,
'01-900', '46-744-431', NULL, NULL);
INSERT INTO DB2ADMIN.KLIENCI_TEST
VALUES ('00000033', 'PAWE'', 'MALCZYKOWSKI' , 'HF 14565661', 'S'ONECZNA',
'9', 'WARSZAWA
1
, '01-900', '16-742-114', NULL, NULL);
INSERT INTO DB2ADMIN.KLIENCI_TEST
VALUES ('00000034', 'PIOTR', 'MUSZYOSKI' , 'DD 72325221',
'SZYBOWCOWA', '22A
’
,
'WARSZAWA', '01-200', '44-342-116',
'WULKANIZACJA', '4356-098-876');
INSERT INTO DB2ADMIN.KLIENCI_TEST
VALUES ('00000035', 'ANNA', 'MIKOLAJCZYK
’
,NULL , 'JA'OWCOWA', '24',
'WROC'AW', '37-200', '144-188-415', 'FRYZJERSTWO', '2343-112-345');
Powy#sze wyra#enia doda)y nowe wiersze do tabeli KLIENCI_TEST. Ka#de z tych wyra#e@ wype)nia
warto7ciami wszystkie kolumny tabeli. Aby wstawi dane tylko do wybranych kolumn, nale#y je
okre7li , a nast pnie poda warto7ci:
INSEKT INTO DB2ADMIN. KLIENCI_TEST {NR_KLIENTA, IMIE, NAZWISKO, ULICA, NUMER,
MIASTO, KOD)
VALUES ('00000036
’
,
'MAGDALENA', 'BRZOZA' , 'ALEJE LIPOWE', '4/3', _
'QWIDNICA, '58-100');
Powy#sze polecenie
INSEKT
doda)o nowy wiersz do tabeli KLIENCI_TEST. Wype)nione zosta)y
wszystkie kolumny oprócz kolumny NR_KARTY_KREDYT i kolumny TELEFON. Warto7ci dla
tych kolumn nie s wymagane wi c wstawienie nowego wiersza przebieg)o bez b) du.
Istnieje mo#liwo7 dodania wielu wierszy za jednym razem. Wstawienie kilku rekordów w jednym
poleceniu polega na u#yciu klauzuli
SELECT
. Oto przyk)ad:
INSERT INTO DB2ADMIN.KLIENCI_TEST (NR_KLIENTA, IMIE, NAZWISKO, ULICA, NUMER,
MIASTO, KOD)
SELECT NR_KLIENTA, IMIE, NAZWISKO, ULICA, NUMER, MIASTO, KOD
FROM DB2ADMIN.KLIENCI
WHERE FIRMA IS NULL;
Aby usun rekordy z tabeli, u#yj polecenia
DELETE
FROM np.
DELETE FROM DB2ADMIN.KLIENCI_TEST WHERE FIRMA IS NOT NULL;
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
48
Polecenie
DELETE FROM
bez klauzuli
WHERE
usuwa wszystkie rekordy z tabeli, np.
DELETE FROM DB2ADMIN.KLIENCI_TEST;
Zmienianie danych w tabeli
Polecenie
UPDATE
zmienia warto7ci we wskazanych kolumnach tabeli dla jednego lub wi kszej ilo7ci
wierszy. Poni#sze polecenie
UPDATE
zwi ksza kwot
dodatku pracownika zatrudnionego na
stanowisku sprzedawcy o 50 z).
UPDATE DB2ADMIN.PRACOWNICY
SET DODATEK = DODATEK + 50
WHERE STANOWISKO = 'SPRZEDAWCA';
Teraz mo#emy sprawdzi , czy warto7ci dodatku dla sprzedawców zosta$y zmienione:
SELECT *
FROM DB2ADMIN.PRACOWNICY
WHERE STANOWISKO = 'SPRZEDAWCA
’
;
Je#eli zmieniamy warto7ci wi cej ni# jednej kolumny, musz one by oddzielone przecinkiem.
Poni#sze polecenie zwi ksza dodatek dla kierowników o 30 z) oraz zwi ksza pensje o 10%.
UPDATE DB2ADMIN.PRACOWNICY
SET DODATEK = DODATEK + 30,
PENSJA = PENSJA + (PENSJA *10) /100
WHERE STANOWISKO = 'KIEROWNIK';
Usuwanie tabel
Tabela KLIENCI_TEST nie b dzie nam ju# wi cej potrzebna. Aby usun tabel , musimy u#y
polecenia
DROP TABLE
:
DROP TABLE KLIENCI TEST;
Polecenie usuwaj ce tabel usuwa jednocze7nie wszystkie dane zawarte w tabeli oraz usuwa
wszystkie widoki które czerpi dane z usuwanej tabeli.
Podsumowanie
1. Usuni cie tabeli powoduje usuni cie danych i widoków zwi zanych z usuwan tabel .
2. Mo#emy okre7li wiersze, które maj zosta usuni te lub zmienione poprzez zamieszczenie
odpowiedniego warunku w klauzuli
WHERE
.
3. Opuszczenie klauzuli
WHERE
w pleceniach
UPDATE
lub
DELETE
powoduje, #e wszystkie wiersze
zostan zmienione lub usuni te.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
49
Rozdzia 10. Ograniczenia i integralno5 referencyjna
W tym rozdziale dowiemy si istotnych informacji o ograniczeniach, integralno7ci danych tabeli oraz
o integralno7ci referencyjnej. Wszystkie te zagadnienia sk)adaj si na bezpiecze@stwo i jako7
danych gromadzonych w bazie danych.
Ograniczenia
Mo#esz zdefiniowa ograniczenie sprawdzaj ce poprawno7 wpisywanych danych do tabeli poprzez
okre7lenie warunku sprawdzaj cego
CHECK
.
Poni#szy przyk)ad ilustruje wyra#enie zmieniaj ce struktur tabeli PRACOWNICY poprzez dodanie
ograniczenia zapobiegaj cego wpisaniu kwoty dodatku wi kszej od kwoty pensji.
ALTER TABLE DB2ADMIN.PRACOWNICY ADD CHECK (PENSJA > DODATEK);
Je#eli wpiszesz teraz wyra#enie dodaj ce wiersz do tabeli pracownicy, który b dzie zawiera)
w kolumnie DODATEK warto7 wi ksz ni# w kolumnie PENSJA np.
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0011', 'JOLANTA', 'NOWAKOWSKA
1
, '1999-05-01', 'OBSLUGA
KLIENTA
’
, 'SPRZEDAWCA', 1100, 1200, '000001' , '433-451-154' ) ;
Baza DB2 wygeneruje komunikat o b) dzie, który mówi o naruszeniu ograniczenia sprawdzaj cego
CHECK
:
DB21034E The command was processed as an SQL statement
because it was not a valid Comnand LinU Processor command.
During SQL processing it returned:
SQL0545N The reWuested operation is not allowed because a rów
does not satisfy the check constraint
"DB2ADMIN.PRACOWNICY.SQLQ10121215529810". SQLSTATE=23513
Integralno- danych - klucz g7ówny
Ka#da tabela bazy danych powinna zawiera klucz g)ówny. Klucz g)ówny tabeli to kolumna lub grupa
kolumn, która w sposób jednoznaczny identyfikuje wiersz w tabeli. Na przyk)ad, dla tabeli
zawieraj cej dane o pracownikach kluczem g)ównym mo#e by , kolumna o nazwie
NR_PRACOWNIKA, która jednoznacznie okre7la danego pracownika. Kluczem g)ównym mo#e by
numer telefonu w tabeli przechowuj cej dane abonentów operatora telefonicznego. Jak ju#
wspomnia)em, klucz g)ówny mo#e sk)ada si z wielu kolumn. Przyk)adem takiego klucza g)ównego
mo#e by kolumna NUMER oraz ROK w tabeli przechowuj cej dane o wystawionych fakturach,
gdzie kolumna NUMER okre7la numer faktury a kolumna ROK okre7la rok wystawienia. Warto7ci z
tych kolumn wzi te razem s ró#ne w ka#dym wierszu.
Jak ju# wspomnia)em, dla tabeli PRACOWNICY kluczem g)ównym mo#e by
kolumna
NR_PRACOWN1KA. Ustalenie klucza g)ównego (
PRIMARY KEY
) podczas tworzenia tabeli:
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
50
CREATE TABLE DB2ADMIN. PRACOWNICY (
NR_PRACOWNIKA CHAR(4)NOT
NULL,
IMIE
VARCHAR(20) NOT NULL,
NAZWISKO
VARCHAR(20) NOT NULL,
DATA_ZATR
DATE NOT NULL,
DZIAL
VARCHAR(20) NOT NULL,
STANOWISKO
VARCHAR(20) NOT NULL,
PENSJA DECIMAL(8,2),
DODATEK DECIMAL(8,2)
NR_MIEJSCA
CHAR(6) NOT NULL,
NRJTELEFONU CHAR(16)
PRIMARY KEY (NR_PRACOWNIKA));
zapobiegnie wstawieniu dwóch identycznych wierszy. W przypadku gdy dodamy drugi wiersz z
danymi pracownika o numerze ju# istniej cym w tabeli, DB2 wy7wietli b) d z informacj o
naruszeniu integralno7ci danych.
DB21034E The command was processed as an SQL statement because it was not a
valid Command LinU
Processor command. During SQL processing it
returned:SQL0803N One or morU
values in the INSERT statement, UPDATE
statement, or foreign key update caused by a DELETE statement arU not valici
because they would produce duplicate rows for a table with a primary key,
uniWue constraint,or uniWue index. SQLSTATE=23505
Integralno- refereicyjna - klucz obcy
Klucz obcy to jedna lub wi cej kolumn tabeli odwo)uj cych si do kolumny lub kolumn klucza
g)ównego w innej tabeli. Klucze obce s
wykorzystywane do utrzymywania integralno7ci
referencyjnej w bazie danych. Tworz c klucz obcy, definiujemy zwi zek mi dzy tabel klucza
g)ównego i tabel klucza obcego. Zwi zek taki powstaje podczas z) czania kolumn takich samych
typów danych z ka#dej tabeli. Z) czanie tabel przez odpowiednie kolumny chroni dane z tabeli klucza
obcego przed „osieroceniem", jakie mog)oby nast pi w wyniku usuni cia odpowiadaj cych im
danych z tabeli klucza g)ównego. Definiowanie kluczy obcych jest po prostu sposobem ) czenia
danych przechowywanych w ró#nych tabelach bazy danych.
Na przyk)ad, w tabeli PRACOWNICY widocznej na poni#szym zdj ciu kluczem obcym jest kolumna
NR_MIEJSCA. Ta kolumna czerpie warto7ci z tabeli MIEJSCA z kolumny NR_MIEJSCA (klucz
g)ówny w tabeli MIEJSCA). Gdy odczytamy numer miejsca z tabeli PRACOWNICY, mo#emy si
odwo)a do tabeli MIEJSCA i odczyta z niej pe)ny adres miejsca pracy pracownika. Rysunek 10.1
ilustruje zwi zek tabeli klucza obcego z tabel klucza g)ównego.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
51
Rys.10.1.
Rysunek 10.1 mo#na odczyta nast puj co: tabela klucza obcego PRACOWNICY jest z) czona z
tabel klucza g)ównego MIEJSCA poprzez kolumny NR_M1EJSCA. Zwi zek klucza obcego chroni
wiersze z tabeli PRACOWNICY przed osieroceniem na wypadek usuni cia jakiegokolwiek wiersza z
tabeli MIEJSCA.
Aby zapewni tak ochron , musimy zdefiniowa klucze obce we wszystkich tabelach, które
odwo)uj si do innych tabel. Taki zwi zek wyst puje m.in. w naszych przyk)adowych tabelach
PRACOWNICY oraz MIEJSCA.
ALTER TABLE DB2ADMIN.PRACOWNICY
ADD POREIGN KEY (NR_MIEJSCA)
REFERENCES MIEJSCA (NR MIEJSCA) ON DELETE RESTRICT;
Polecenie to ustanawia klucz obcy w tabeli PRACOWNICY w kolumnie NR_ MIEJSCA. Czytaj c
dalej to polecenie dowiadujemy si #e kolumna ta odwo)uje si do kolumny NR_MIEJSCA w tabeli
MIEJSCA. S)owa kluczowe
ON DELETE RESTRICT
mówi , #e niemo#liwe jest usuni cie wiersza z
tabeli MIEJSCA, gdy istnieje wiersz do niego si odwo)uj cy w tabeli PRACOWNICY. Dla systemu
InterBase zamiast s)owa
RESTRICT
jest honorowane s)owo
NO ACTION
.
W tabeli 10.1 znajduj si opisy wszystkich mo#liwych akcji, jakie zostan zainicjowane w chwili
usuwania wiersza w tabeli zale#nej:
Tabela 10.1.
Akcja
Opis
RESTRIC
Ograniczone usuwanie, które mówi, #e dopóki istniej w tabeli PRACOWNICY wiersze
odwo)uj ce do usuwanego adresu
lub dla InterBase
NO ACTION
nie mo#na go usun . Aby usun dane o adresie z tabeli MIEJSCA, najpierw nale#y
usun wszystkich pracowników pracuj cych w miejscu o którym informacje chcemy
usun
CASCADE
kaskadowe usuwanie, mówi, #e gdy usuwamy wiersze z tabeli MIEJSCA, to s
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
52
jednocze7nie usuwane wszystkie wiersze z danymi o pracownikach, którzy pracuj w
usuwanym miejscu
SET NULL
Wstaw warto7 NULL, mówi, #e je7li usuwamy dane o miejscach, to w tabeli
PRACOWNICY w kolumnie NR_MIEJSCA zostanie wstawiona warto7 NULL
Podsumowanie
1. Mo#esz zdefiniowa ograniczenie sprawdzaj'ce poprawno7 wpisywanych danych do tabeli
poprzez okre7lenie warunku sprawdzaj cego
CHECK
.
2. Integralno7 danych w tabeli zachowuje si dzi ki kluczom g)ównym.
3. Klucze obce s)u# do utrzymywania integralno7ci referencyjnej.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
53
Rozdzia 11.Instalacja DB2.
Rozdzia) ten opisuje instalacj DB2 w systemie Windows 98 oraz Windows NT. Zawiera równie#
istotne informacje o Oródle wersji instalacyjnej DB2.
Je#eli nie posiadamy wersji instalacyjnej DB2, mo#emy j skopiowa ze strony inter-netowej IBM
http://www-4.ibm.com/software/data/db2/udb/downloads.html. Informacje na tej stronie poprowadz
przez proces kopiowania DB2. Aby skopiowa DB2 Personal Edition wersj 7.1, musimy si najpierw
zarejestrowa . Po za)ogowaniu si jako zarejestrowany u#ytkownik, b dziemy musieli jeszcze
wype)ni ankiet . Wersja DB2 Personal Edition jest darmowa (z licencj na jednego u#ytkownika).
Mo#emy jej u#ywa do celów edukacyjnych. Nie mo#emy czerpa korzy7ci maj tkowych z pracy z
systemem DB2 Personal Edition.
Musimy skopiowa nast puj ce pliki:
-
winpecmn.zip o wielko7ci 142 572 kB
-
winpeen.zip o wielko7ci 48 467 kB
Niestety do instalacji s potrzebne oba.
:
Do rozpakowania powy#szych zbiorów musimy si zaopatrzy w program WinZIP, który mo#na
znaleO w Internecie na stronie http://www.winzip.com.
Nast pnym krokiem b dzie za)o#enie katalogu np. na dysku D:\DB2INST, do którego rozpakujemy
zbiory instalacyjne skopiowane z Internetu. Do tego samego katalogu nale#y rozpakowa pliki
winpecmn.zip oraz winpeen.zip.
Instalacja dla systemu Windows i Windows NT
Po pomy7lnym rozpakowaniu zbiorów musimy uruchomi plik setup.exe znajduj cy si w katalogu
D:\DB2INST (lub w innym, do którego rozpakowane zosta)y skomprymowane pliki). Pojawi si ekran
powitalny z pewnymi opcjami. Wybieramy opcj Install.
Rys.11.1.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
54
Je#eli w systemie zainstalowana jest wcze7niejsza wersja DB2. program instalacyjny nas o tym
powiadomi i zaproponuje usuni cie jej z systemu przed kontynuacj instalacji.
Rys.11.2.
Na rysunku 11.2 pokazany jest wybór sk)adników instalacji. Pe)na instalacja polega na wybraniu
wszystkich trzech sk)adników. Dla potrzeb wicze@ wystarczy pierwsza pozycja DB2 Personal
Edition.
Po naci7ni ciu klawisza Next pojawi si okno Selecl Installation Type. Na tym etapie mo#na wybra
instalacj Typical. Je#eli wybierzesz typ instalacji Gustom, to pojawi si okno Select Components, w
którym mo#esz wybra poszczególne sk)adniki oprogramowania. Je#eli wybierzesz typ instalacji
Typical, to w nast pnym oknie Choose Destination Location mo#emy zmieni docelowy katalog, w
którym zainstalowany zostanie system DB2.
Naciskamy przycisk Next. Je#eli DB2 jest instalowane dla Windows NT, zobaczymy okno dialogowe,
w którym musimy wprowadzi nazw u#ytkownika i has)o dla narz dzia Control Center Server.
Proponuj
u#y
domy7lnej nazwy u#ytkownika db2admin. Has)o prosz
ustawi
równie# na
db2admin. Wszystko w celu sprawnego wykonywania skryptów przedstawionych w niniejszych
wiczeniach. Inna nazwa u#ytkownika i has)a wymaga)aby naniesienia zmian w skryptach.
Zaznaczenie opcji Use the same values for the remaining DB2 Username and Password settings u do)u
okna spowoduje nadanie tej samej nazwy u#ytkownika i has)a dla pozosta)ych elementów DB2
Administration Server, oraz dla domy7lnej instancji DB2.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
55
Rys.11.3.
Ostatnie okno Start Copying Files informuje o wybranych parametrach instalacji. Naciskamy przycisk
Next. Na tym etapie instalator DB2 kopiuje potrzebne zbiory na dysk twardy.
W trakcie instalacji mo#e si okaza , #e posiadamy star wersj sterowników ODBC. Zostanie to
zasygnalizowane odpowiednim komunikatem.
Po zako@czeniu pracy instalatora musimy ponownie uruchomi komputer. Pomy7lne zako@czenie
instalacji zostanie zasygnalizowane oknem First Steps, które si pojawi po ponownym uruchomieniu
komputera.
Na koniec mo#emy sprawdzi w panelu sterowania w us)ugach, czy system DB2 zosta) poprawnie
uruchomiony.
Rys.11.4.
W Windows NT nie uruchomienie si us)ug DB2 mo#e by spowodowane star wersj Service Packa.
W takim przypadku nale#y ponownie zainstalowa mo#liwie najnowszego Service Packa w wersji
j zykowej odpowiadaj cej naszemu systemowi.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
56
Podsumowanie
1. Instalacja DB2 w systemie Windows 95 i 98 nie wymaga #adnych dodatkowych operacji.
2. Mo#na u#y narz dzia Us)ugi z Panelu sterowania w Windows NT w celu podgl dni cia czy
us)uga DB2 zosta)a poprawnie uruchomiona.
3. W Windows NT problem z uruchomieniem us)ugi DB2 mo#e by spowodowany star wersj
Service Pack.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
57
Rozdzia 12. Narz9dzia DB2.
W tym rozdziale poznamy takie narz9dzia jak: Control Center, Command Center, Command
Lin) Procesor oraz Information Center.
Control Center jest aplikacj
pozwalaj c
na zarz dzanie obiektami bazy danych. Narz dzie
Command Center b dziemy wykorzystywa do przygotowywania zapyta@ SQL i ich wykonywania.
To narz dzie pozwala równie# na wykonywanie skryptów SQL jak równie# na przegl danie wyników
wykonania zapytania. Narz dzie Command Lin Procesor (CLP) s)u#y do wykonywania polece@
systemowych DB2. Information Center jest systemem pomocy z bardzo wygodnym interfejsem.
Control Center
Control Center jest aplikacj , która pozwala na przegl danie, dodawanie, usuwanie i zmienianie
obiektów baz danych zdefiniowanych w DB2. Tymi obiektami s m.in. tabele i widoki. Dzi ki temu
narz dziu mo#emy zbudowa ca) baz danych, nie u#ywaj c j zyka SQL. W li7cie tabel, oprócz tabel
bazy danych WYPAUT, znajduj
si równie# tabele systemowe, z których mo#na wydoby
informacje na temat struktury bazy danych. Tabela SY-SIBM.SYSTABLES zawiera wszystkie tabele
zdefiniowane w bazie danych. Tabela SY-SIBM.SYSCOLUMNS zawiera wszystkie informacje o
kolumnach zdefiniowanych we wszystkich tabelach bazy danych. Tabela SYSIBM.SYSYIEWS
zawiera informacje o widokach zdefiniowanych w bazie danych. Panel po lewej stronie okna zawiera
informacje o systemie. Ikona Systems wskazuje na nazw komputera (WROR-JAKUBOAR).
Ikona Instances zawiera instancje DB2 zainstalowane w systemie. Mo#na definiowa wiele instancji
np. w celu oddzielenia bazy testowej od produkcyjnej. Nast pna ikona -Databses zawiera bazy danych
(w tym przypadku jedna - WYPAUT). Baza WYPAUT z kolei skupia wszystkie obiekty typu tabele,
widoki, indeksy, itd.
Rys.12.1.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
58
Command Center
Aplikacja Command Center b dzie najcz 7ciej wykorzystywanym narz dziem przy studiowaniu
niniejszych wicze@. Na poni#szym zdj ciu aplikacji Command Center widzimy zak)adki lnteractive,
Script, Ouery Results oraz Access Plan, których przeznaczenie zostanie opisane w nast pnych
sekcjach.
Rys.12.2.
Przygotowywanie zapyta SQL i ich wykonywanie
Podczas budowy zapyta@ przy bie# cej pracy z baz danych b dziemy korzysta z zak)adki
lnteractive. Aby wykona zapytanie, musimy si upewni , #e jeste7my pod) czeni do bazy danych, na
której chcemy pracowa . S dwa sposoby na pod) czenie si do bazy danych. Jeden z nich to wpisanie
polecenia SQL:
CONNECT TO WYPAUT USER db2admin USING db2admin;
w oknie Command na zak)adce lnteractive. Po naci7ni ciu kombinacji klawiszy Ctrl+Enter powy#sze
polecenie zostanie wykonane i zostaniemy pod) czeni do bazy danych. Zostanie to zakomunikowane
w oknie poni#ej okna Command nast puj cym komunikatem:
-------------------- Command Entered --------------------
CONNECT TO WYPAUT USER db2admin USING ******** •
---------------------------------------------
Database Connection Information
Database server = DB2/NT 7.1.0
SQL authorization ID = DB2ADMIN
Local database alias = WYPAUT
Oprócz tego komunikatu, w polu Database connection zobaczymy wpis informuj cy o aktualnym
po) czeniu. Mo#na to zobaczy na zdj ciu (JAKUB - DB2 - WYPAUT).
Drugi sposób pod) czenia si do bazy danych polega na wybraniu z okna Select Database (rysunek
12.3) konkretnej bazy danych. Okno Select Database wywo)uje si przez naci7ni cie myszk klawisza
z trzema kropkami znajduj cego si po prawej stronie pola Database connection.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
59
Rys.12.3.
Teraz gdy jeste7my pod) czeni do bazy WYPAUT, mo#emy wydawa inne polecenia lub zapytania
SQL w oknie Command.
Wykonywanie skryptów SQL
Przed tym, jak zaczniemy pracowa z wiczeniami musimy, po stworzeniu bazy danych, utworzy
tabele i wype)ni je danymi. Mo#emy to wykona poprzez okno Com-mand na zak)adce lnteractive
lub poprzez wykonanie skryptów uprzednio stworzonych. Wpisywanie wszystkich polece@
tworz cych tabele oraz polece@ wstawiaj cych dane jest zbyt czasoch)onne. Polecam wykonanie
skryptów, które zosta)y zamieszczone na serwerze ftp wydawnictwa. Aby wykona skrypt, musimy go
otworzy i uruchomi . Wybieramy w tym celu menu Script j Import... Pojawi si okno widoczne na
rysunku 12.4.
W tym oknie musimy najpierw wybra komputer, na którym znajduj si skrypty poprzez rozwini cie
listy System name i wybranie konkretnego systemu. Nast pnie przechodzimy do katalogu ze
skryptami i pojedynczo je otwieramy.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
60
Rys.12.4.
Zawarto7 skryptu zostanie wy7wietlona w oknie Script na zak)adce Script. Zobacz poni#sze zdj cie
okna Command Center.
Rys.12.5.
Aby wykona skrypt naciskamy kombinacj klawiszy Ctrl+Enter lub wybieramy myszk przycisk
Execute znajduj cy si pod menu g)ównym z lewej strony okna. Zobaczymy seri komunikatów u
do)u okna mówi cym o tym, #e wykonanie poszczególnych polece@ SQL w skrypcie zosta)o
zako@czone pomy7lnie, np.
DB20000I The SQL coinmand completed successfully-
Wy-wietlanie wyników wykonania zapytania
Wyniki wykonania zapyta@ SQL, które zosta)y wprowadzone na zak)adce lnteractive s wy7wietlane
na zak)adce Ouery Results aplikacji Command Center. Wyniki zapyta@ uruchomionych z poziomu
zak)adki Script s z kolei wy7wietlane u do)u w tym samym oknie.
Command lin) Processor
Command Lin Processor pozwala na wykonywanie polece@ systemowych DB2. Do polece@
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
61
systemowych zalicza si równie# polecenie
CREATE DATABASE
tworz ce baz danych. Inne polecenia
s)u# do wy7wietlania parametrów systemu DB2 i ustawianiu tych#e parametrów. Na rysunku 12.6
znajduje si zdj cie okna Command Lin Processor z wydanym poleceniem
LI ST ACTIVE DATABASES
.
Rys.12.6.
Poni#ej znajduj si opisy niektórych polece@ systemowych DB2. Pe)n ich list wraz z opisem
mo#esz znaleO w do) czonym systemie pomocy. Wystarczy wpisa znak zapytania i potwierdzi
klawiszem Enter. Mo#esz równie# uzyska krótk podpowiedz na temat konkretnego polecenia,
poprzedzaj c j znakiem zapytania w Command Lin Processor, np.
db2 ==> ? CONNECT TO
CONNECT TO database-alias - .- ..
[IN {SHARE MOD& l EXCLUSIVE MOD& [ON SINGLE NODE]}]
[USER username [{USING password
[NEW new-password CONFIRM confirm-password] |
CHANGE PASSWORD}]]
CONNECT TO
<nazwa bazy danych> -) czy aplikacj do bazy danych
Przyk)ad:
CONNECT TO WYPAUT USER db2admin USING db2admin
przy) cza aplikacj do bazy danych WYPAUT. Parametry
USER
oraz USING pozwalaj okre7li
u#ytkownika bazy danych oraz has)o.
CREATE DATABASE
<nazwa bazy danych> - tworzy baz danych.
Przyk)ad:
CREATE DATABASE WYPAUT
stworzy baz danych z domy7lnymi warto7ciami parametrów bazy.
DB2START/DB2STOP
- startuje (lub zatrzymuje) mened#era bazy danych.
DROP DATABASE
<nazwa bazy danych> - usuwa baz danych z systemu.
Przyk)ad:
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
62
DROP DATABASE WYPAUT
GET CONNECTION STATE
- wy wietla informacje o stanie po$'czenia z baz danych.
Je#eli jeste7my pod) czeni do bazy WYPAUT poleceniem CONNECT
TO WYPAUT, to wydanie polecenia GET
CONNECTION STATE
spowoduje wy7wietlenie podobnego
komunikatu:
Database Connection State
Connection state = Connectable and Connected
Connection modU
= SHARE
Local database = WYPAUT
alias
Database name = WYPAUT
GET
INSTANCE - wy7wietla informacje o instancji bazy danych zainstalowanej w systemie.
LIST ACTIYE
DATABASES - wy7wietla informacje o aktywnych bazach danych,
przy) czonych do nich aplikacjach i o 7cie#ce dost pu do zbiorów w których przechowywane
s dane z bazy danych.
LIST APPLICATIONS
- wy7wietla informacje o aktywnych aplikacjach pod) czonych do bazy
danych. Wykonanie tej komendy spowoduje wy7wietlenie podobnego komunikatu:
LIST DATABASE
DIRECTORY - wy7wietla informacje o systemowym katalogu DB2, w
którym przechowywane s wszystkie informacje o bazach danych. Na wydruku wida , #e
jedyn baz , jaka zosta)a utworzona do tej pory jest baza WYPAUT. Katalog D:\DB2 to
miejsce, gdzie przechowywany jest systemowy katalog.
System Database Directory
Number of entries in the directory = l
Database l entry:
Database alias = WYPAUT
Database name = WYPAUT
Database drive = D:\DB2
Database release level =9.00
Comment =
Directory entry type = indirect
Catalog node number = O
QUIT
- powoduje zamkni cie sesji z Command Line Processor.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
63
Tworzenie bazy
Polecenie systemowe
CREATE DATABASE
tworzy now baz danych. Dla potrzeb naszych wicze@
musimy tak baz stworzy . Poniewa# polecenie
CREATE DATABASE
nale#y do polece@ systemowych
DB2, musimy je wprowadzi i wykona w aplikacji Command Lin Processor.
Na rysunku 12.7 znajduje si okno aplikacji CLP z wykonanym poleceniem
CREATE DATABASE
WYPAUT. Po pomy7lnym wykonaniu tego polecenia ujrzymy komunikat: The CREATE
DATABASE command completed successfulty. Gdy ju# stworzymy baz WYPAUT, mo#emy
wykonywa dalsze czynno7ci, np. wykona skrypty SQL tworz ce tabele i wype)niaj ce je danymi.
Rys.12.7.
Ustawienia narz)dzi DB2
Do poprawnej pracy w aplikacji Command Center, a w szczególno7ci do wykonywania skryptów
musimy zmieni pewne domy7lne parametry.
Z poziomu aplikacji Control Center lub z np. aplikacji Command Center wybieramy menu Tools |
Tools Settings. Pojawi si okno widoczne na rysunku 12.8.
Rys.12.8.
Na zak)adce General musimy zaznaczy opcj Use statement termination character, która stanowi o
tym, #e znak 7rednika b dzie znakiem oddzielaj cym poszczególne wyra#enia SQL wprowadzane
m.in. w aplikacji Command Center.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
64
Information Center
Information Center jest aplikacj
wspomagaj c
u#ytkownika w wyszukiwaniu pomocnych
informacji. Jest to pewnego rodzaju system pomocy. Jego budowa i organizacja pozwala na szybkie
wyszukanie potrzebnych informacji.
Rys.12.9.
Znajdziemy tutaj pe)ny opis sk)adni j zyka SQL, jak równie# opis polece@ systemowych DB2.
Znajduj si tam równie# odpowiednie ) cza do stron WWW firmy IBM, gdzie mo#na znaleO
dodatkowe informacje. Polecam u#ywanie tej aplikacji za ka#dym razem, gdy istnieje potrzeba
sprawdzenia sk)adni danego polecenia lub np. odczytania informacji o b) dzie.
Podsumowanie
1. Do wykonywania systemowych polece@ DB2 s)u#y aplikacja Command Lin Processor.
2. Wykonywanie pojedynczych polece@ SQL oraz skryptów dokonuje si w aplikacji Command
Center.
3. Aplikacja Information Center pozwala na szybkie wyszukiwanie pomocnych informacji.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
65
Rozdzia 13. InterBase.
Serwer SQL InterBase firmy Inprise znajduje si
na stronie internetowej firmy BSC:
http://www.borland.com.pl. Jest to oczywi7cie wersja darmowa. Do pracy z wiczeniami potrzebny
nam jest jeden plik: ib_server_6_0_1.zip, który jest wersj Server i Client InterBase dla Windows.
Plik zajmuje 5,36 MB. Przy modemie pozwalaj cym na pr dko7 przesy)u 33,6 kb/s, transmisja
powinna trwa 30 minut. Wi c koszt skopiowania z Internetu InterBase jest niewielki. Jak si mo#na
póOniej zorientowa , mo#liwo7ci, jakie oferuje InterBase s naprawd du#e.
Instalacja InterBase 6.01
Po rozpakowaniu pliku ib_server_6_0_1.zip, utworzony zostanie katalog: ib_server_6_0_1. W tym
katalogu znajduje si jeszcze katalog - server, w którym znajduje si program instalacyjny setup.exe.
Po uruchomieniu go pojawi si ekran powitalny, z którego przejdziemy do nast pnego panelu
klawiszem Next. Panel, który teraz widzimy Important installation Information zawiera bardzo wa#ne
informacje o instalacji oraz informacje o tym, jak utworzy baz danych. Je#eli instalujemy InterBase
w 7rodowisku Windows NT musimy si upewni , #e system zosta) zaktualizowany przez Service Pack
5, odpowiedni w wersji j zykowej do posiadanego systemu.
PrzejdOmy do nast pnego panelu instalacyjnego przyciskiem Next. Pojawi si teraz tekst umowy
licencyjnej, który nale#y zaakceptowa , aby móc kontynuowa instalacj . Naciskamy przycisk Yes.
Pojawi si okno, które pozwala wybra komponenty InterBase'a. Okno to widoczne jest na poni#szym
zdj ciu. Prosz wybra wszystkie komponenty i ewentualnie zmieni katalog docelowy, w którym
zainstalowany zostanie system InterBase. Po sko@czeniu naciskamy przycisk Install.
Rys.13.1.
Nast puje kopiowanie plików na dysk twardy, a po ich skopiowaniu pojawi si jeszcze okno z
informacj , #e proces instalacji zosta) zako@czony. Naciskamy przycisk Finish.
Narz)dzie IBConsole
IBConsole jest odpowiednikiem narz dzia DB2 Control Center. Tutaj równie# mamy mo#liwo7
podgl dania obiektów bazy danych, jakimi s m.in. tabele i widoki. Przede wszystkim IBConsole jest
narz dziem, w którym mo#emy stworzy baz danych.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
66
Z poziomu IBConsole mo#emy równie# wywo)a narz dzie lnteractive SQL, które pozwala na
wykonywanie polece@ SQL. Okno aplikacji IBConsole znajduje si poni#ej.
Rys.13.2.
Tworzenie bazy danych w InterBase
Je#eli nie jeste7my w aplikacji IBConsole, musimy j uruchomi z Menu Start | Programy | Interbase |
IBConsole. Z menu Server wybieramy pozycj Login. W oknie, które si pojawi wpisujemy
u#ytkownika SYSDBA i has)o masterkey. Po za)ogowaniu si do mened#era bazy InterBase przejdO
do menu Database do pozycji Create Database, Okno, które si pojawi jest widoczne na rysunku 13.3.
Rys.13.3.
Aby stworzy baz danych, wype)nij to okno, jak mo#esz zauwa#y na rysunku 13.3. W ko@cu
naci7nij przycisk OK. Baza zosta)a utworzona. Teraz mo#emy przej7 do wykonywania skryptów,
które utworz tabele w bazie danych i wype)ni je danymi. Opis wykonywania skryptów znajduje si
w nast pnej sekcji.
Narz)dzie InterBase Manager
InterBase Manager mo#na wywo)a z menu Start | Programy l InterBase InterBase Server Manager.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
67
Pozwala on m.in. na ustalenie czy serwer InterBase ma by wywo)ywany automatycznie przy starcie
systemu operacyjnego.
Rys.13.4.
Narz)dzie Interactiue SQ1
Narz dzie lnteractive SQL pozwala na wprowadzanie polece@ SQL i ich wykonywania na bazie
danych. Wywo)uje sieje z poziomu aplikacji IBConsole z menu Tools | lnteractive SQL Wykonywanie
wprowadzonych polece@ SQL dokonuje si przez naci7ni cie kombinacji klawiszy Ctrl+E (Execute).
Rys.13.5.
Czasami gdy b dziemy wychodzi z Interactive SQL, b dziemy pytani, czy zatwierdzi transakcj .
Transakcj jest ka#da operacja na danych w bazie danych. Transakcja musi si wykona w ca)o7ci lub
zosta wycofana.
Oto okno dialogowe z pytaniem, czy zatwierdzi transakcj .
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
68
Rys.13.6.
Wszystkie polecenia SQL zawarte w tych wiczeniach wymagaj , aby ich dzia)anie by)o zatwierdzane
(przycisk Yes w okienku na rysunku 13.6).
Aplikacja Interactive SQL umo#liwia równie# wykonywanie skryptów SQL. Wykonywanie skryptów
SQL zosta)o opisane w kolejnej sekcji.
Wykonywanie skryptów
Aby wykona skrypty tworz ce tabele i wype)niaj ce je danymi, musimy przej7 do menu Query w
lnteractive SQL i wybra pozycj Load Script. Okno, które si pojawi pozwala na wybranie pliku
skryptu.
Na rysunku 13.7 znajdziesz okno aplikacji Interactive SQL z za)adowanym skryptem, który tworzy i
wype)nia danymi tabel KLIENCI.
Rys.13.7.
Po naci7ni ciu kombinacji klawiszy Ctrl+E skrypt zostanie wykonany i utworzona zostanie tabela
KLIENCI. Pozosta)e skrypty równie# musz zosta wykonane do utworzenia ca)ej struktury bazy
danych. Skrypt zostanie wykonany wtedy, gdy jeste7my pod) czeni do bazy WYPAUT. Na zdj ciu
powy#ej w pasku stanu na samym dole jest wy7wietlona informacja, #e baza, do której jeste7my
aktualnie pod) czeni to WYPAUT.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
69
Podsumowanie
1. InterBase jest równie dobrym systemem bazy danych do studiowania niniejszych wicze@.
2. Wykonywanie pojedynczych polece@ SQL oraz skryptów dokonuje si w aplikacji Interactive
SQL.
3. Aplikacja IBConsole pozwala na szybkie wyszukiwanie pomocnych informacji.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
70
Rozdzia 14. Struktura przyk adowej bazy danych.
Przyk)adowa baza wypo#yczalni samochodów WYPAUT sk)ada si z pi ciu tabel. Przechowuje ona
dane o klientach, pracownikach, samochodach, miejscach, z których samochody mo#na wypo#yczy
oraz dane o wypo#yczeniach.
Ka#de wypo#yczenie jest odnotowywane w tabeli WYPORYCZENIA. ^ ...... <«
Ka#dy: klient, samochód, miejsce wypo#yczenia i oddania, pracownik wypo#yczaj cy i przyjmuj cy
posiada numer, po którym jest identyfikowany w tabeli WYPORYCZENIA. Pojedynczy rekord z
tabeli WYPORYCZENIA opisuje jedno wypo#yczenie samochodu. Tak wi c, gdy odczytujemy ten
rekord, mo#emy odnaleO dane o kliencie, który wypo#yczy) dany samochód, dane o pracowniku
obs)uguj cym klienta oraz o miejscu wypo#yczenia i oddania samochodu.
Opis tabel
Szczegó)owy opis tabel wchodz cych w sk)ad przyk)adowej bazy danych wypo#yczalni
samochodów.
Tabela KLIENCI
Tabela KLIENCI przechowuje dane na temat klientów wypo#yczaj cych samochody. Mi dzy innymi
na podstawie tych danych mo#e zosta wystawiona faktura.
Tabela 14.1.
Tabela SAMOCHODY
Tabela SAMOCHODY zawiera informacje o dost pnych samochodach, które klient mo#e
wypo#yczy .
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
71
Tabela 14.2.
Tabela PRACOWNICY
Tabela PRACOWNICY zawiera dane wszystkich pracowników firmy wypo#yczaj cej samochody.
Tabela 14.3.
Tabela MIEJSCA
W tabeli MIEJSCA znajduj si informacje o miejscach, z których klient wypo#yczy) samochód, oraz
informacje o miejscach oddania.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
72
Tabela 14.4.
Tabela WYPOCYCZENIA
Tabela WYPORYCZENIA jest najbardziej rozbudowana tabela. Znajduj
si
tutaj wszelkie
informacje o wypo#yczonych samochodach, miejscu wypo#yczenia i oddania, klientach, dacie itd.
Tabela 14.5.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
73
Relacje pomi)dzy tabelami
Poni#ej znajduje si diagram zwi zków encji dla naszej przyk)adowej bazy danych wypo#yczalni
samochodów. Diagram przedstawia relacje pomi dzy tabelami.
Z diagramu mo#emy odczyta wszystkie wyst puj ce relacje miedzy tabelami. Jeden KLIENT mo#e
dokona wielu WYPORYCZEf niekoniecznie w tym samym czasie. Jeden SAMOCHÓD mo#e by
WYPORYCZANY wielokrotnie. Jeden PRACOWNIK mo#e obs)u#y wiele WYPORYCZEf.
Samochód mo#e zosta WYPORYCZONY/ODDANY wielokrotnie w ró#nych MIEJSCACH.
Rys.14.1.
Skrypty tworz3ce struktur) bazy WYPAUT
W nast pnych sekcjach znajduj si listingi skryptów tworz cych tabele bazy WYPAUT. Skrypty te
jednocze7nie wype)niaj tabele przyk)adowymi danymi. Poni#sze skrypty zosta)y przygotowane do
wykonania w systemie DB2. Aby wykona je w InterBase musimy:
usun wiersz, który ) czy si z baz danych
CONNECT
TO...;
usun wiersz, który usuwa tabel
DROP TABLE
, poniewa# InterBase przerywa przetwarzanie
skryptu, gdy wyst pi b) d. Taki Wad wyst pi, gdy po raz pierwszy uruchomimy skrypt. Polega on
na usuwaniu tabeli, która jeszcze nie istnieje;
usun kwalifikatory DB2ADMIN przed nazw tabeli w poleceniach
CREATE TABLE
oraz w
poleceniach
INSERT
. Fragment polecenia SQL tworz cego tabel oraz polecenia wstawiaj cego
wiersz w InterBase powinien wygl da tak:
CREATE TABLE KLIENCI ( ...
...INSERT INTO KLIENCI VALUES ( . . .
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
74
Rozdzia 15. Skrypty
Skrypt tworz3cy tabel) KLIENCI i wype7niaj3cy j3 danymi
CONNECT TO WYPAUT USER
DB
2
ADMIN
USING
DB
2
ADMIN
;
DROP TABLE DB2ADMIN.KLIENCI;
CREATE TABLE DB2ADMIN.KLIENCI (
NR_KLIENTA CHAR(8) NOT NULL,
IMIE VARCHAR(20) NOT NULL,
NAZWISKO VARCHAR(20) NOT NULL,
NR_KARTY_KREDYT CHAR(20) ,
FIRMA VARCHAR(40) ,
ULICA VARCHAR(24) NOT NULL,
NUMER CHAR(8)
NOT NULL,
MIASTO VARCHAR(24) NOT NULL,
KOD CHAR(6) NOT NULL,
NIP CHAR(12) ,
NR_TELEFONU CHAR(16),
PRIMARY KEY (NR_KLIENTA));
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000001', 'JAN', 'KOWALSKI', NULL, NULL, 'KOCHANOWSKIEGO', '3',
'WROCLAW', '37-300', NULL, '167-763-234');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000002', 'TOMASZ', 'ADAMCZAK' , 'HH 12345678', 'KOWALSKI S.C.',
'KWIATOWA', '4/9', 'WARSZAWA', '01-900', '543-123-456', '46-744-431');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000003', 'PIOTR', 'MALCZYK' , 'HF 12445661', 'ADA S.C.',
'ROZANA', '9', 'WARSZAWA', '01-900', '443-133-251', '16-742-114');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000004', 'PAWEL', 'FIODOROWICZ' , 'DD 76545321', 'KRAWIECTWO',
'ARMII KRAJOWEJ', '22A', 'WARSZAWA', '01-200', '555-233-256', '44-342-116');
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
75
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000005', 'ANIELA', 'DALGIEWICZ' ,NULL , 'MODNA PANI', 'BOHATEROW
GETTA', '24', 'WROCLAW', '37-200', '456-134-153', '144-188-415');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000006', 'JOANNA', 'KWIATKOWSKA', NULL, NULL, 'TUWIMA', '2/5',
'SWIDNICA', '58-100', NULL, '963-733-231');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000007', 'BOZENA', 'MALINOWSKA', NULL, NULL, 'LELEWELA', '34/1',
'SWIDNICA', '58-100', NULL, '965-553-778');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000008', 'TOMASZ', 'NOWAK', NULL, NULL, 'ZEROMSKIEGO', '5A/8',
'SWIDNICA', '58-100', NULL, '911-135-536');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000009', 'KRZYSZTOF', 'DOMAGALA', NULL, NULL, 'LESNA', '5',
'SWIDNICA', '58-100', NULL, '922-233-232');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000010', 'ARKADIUSZ', 'DOCZEKALSKI', NULL, NULL, 'LESNA', '2',
'SWIDNICA', '58-100', NULL, '922-233-267');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000011', 'ANNA', 'KOWALSKA' ,'KJ 98765412' , 'MODNIARSTWO',
'POWSTANCOW SLASKICH', '4', 'WROCLAW', '37-200', '422-132-354', '444-283-
901');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000012', 'KRZYSZTOF', 'DOBROWOLSKI' , NULL, 'KAMIENIARSTWO',
'STRZEGOMSKA', '124', 'WROCLAW', '37-400', '433-133-332', '443-285-202');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000013', 'MARCIN', 'KRZYKALA' , NULL, NULL, 'KONOPNICKIEJ',
'1/4', 'WROCLAW', '37-400', NULL, '442-211-109');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000014', 'ANETA', 'PAPROCKA' , NULL, NULL, 'TUWIMA', '2',
'WROCLAW', '37-400', NULL, '442-671-899');
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
76
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000015', 'SEBASTIAN', 'KOWNACKI' , NULL, NULL, 'GLOWACKIEGO',
'2/9', 'WROCLAW', '37-400', NULL, '423-681-129');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000016', 'MICHAL', 'MICHALSKI' , NULL, NULL, 'KWIATOWA', '9/3',
'WROCLAW', '37-500', NULL, '499-621-921');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000017', 'MICHAL', 'SZYKOWNY' , 'WW 12398765', NULL, 'LESNA',
'3', 'WARSZAWA', '00-100', NULL, '191-221-622');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000018', 'MARCIN', 'MARCINKOWSKI' , 'WQ 14368781', NULL,
'OKREZNA', '33', 'WARSZAWA', '00-200', NULL, '122-127-647');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000019', 'RAFAL', 'RAFALSKI' , 'WS 12358672', 'NAPRAWA
SAMOCHODOW', 'PRZEMYSLOWA', '1', 'WARSZAWA', '00-200', '999-765-120', '822-
324-742');
INSERT INTO DB2ADMIN.KLIENCI
VALUES ('00000020', 'ROBERT', 'NOWAK' , 'AS 61333699', 'TAPICERSTWO',
'MOSTOWA', '9B', 'WARSZAWA', '00-100', '987-765-333', '811-311-147');
Skrypt tworz3cy tabel) SAMOCHODY i wype7niaj3cy j3 danymi
CONNECT TO WYPAUT USER db2admin USING db2admin;
DROP TABLE DB2ADMIN.SAMOCHODY;
CREATE TABLE DB2ADMIN.SAMOCHODY (
NR_SAMOCHODU CHAR(6) NOT NULL,
MARKA VARCHAR(20) NOT NULL,
TYP VARCHAR(16) NOT NULL,
ROK_PROD DATE NOT NULL,
KOLOR VARCHAR(16) NOT NULL,
POJ_SILNIKA SMALLINT NOT NULL,
PRZEBIEG INTEGER NOT NULL,
PRIMARY KEY (NR_SAMOCHODU));
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
77
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000001', 'MERCEDES', '190D', '1999-01-01', 'BIALY', 1800, 23000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000002', 'MERCEDES', '230D', '1999-01-01', 'NIEBIESKI', 2000, 35000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000003', 'FIAT', 'SEICENTO', '2000-01-01', 'CZERWONY', 1100, 13000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000004', 'FIAT', 'SEICENTO', '1999-01-01', 'BIALY', 900, 10000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000005', 'FIAT', 'TIPO', '1998-01-01', 'BORDOWY', 1400, 43000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000006', 'POLONEZ', 'CARO', '1997-01-01', 'ZIELONY', 1600, 55000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000007', 'OPEL', 'CORSA', '2000-01-01', 'ZIELONY', 1100, 11000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000008', 'OPEL', 'VECTRA', '1999-01-01', 'SZARY', 1800, 36000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000009', 'MERCEDES', '190D', '1996-01-01', 'BRAZOWY', 1800, 69000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000010', 'FORD', 'ESCORT', '2000-01-01', 'NIEBIESKI', 1600, 8000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000011', 'FORD', 'ESCORT', '1999-01-01', 'BIALY', 1600, 23000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000012', 'FORD', 'KA', '1998-01-01', 'BORDOWY', 1100, 54000);
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
78
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000013', 'FIAT', 'SEICENTO', '1999-01-01', 'ZLOTY', 1100, 25000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000014', 'FIAT', 'SEICENTO', '2000-01-01', 'BIALY', 1100, 18000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000015', 'SEAT', 'IBIZA', '1998-01-01', 'ZOLTY', 1800, 63000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000016', 'FORD', 'SIERRA', '1995-01-01', 'CZERWONY', 1600, 87000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000017', 'OPEL', 'CORSA', '2000-01-01', 'ZIELONY', 1400, 9000);
INSERT INTO DB2ADMIN.SAMOCHODY
VALUES ('000018', 'FORD', 'KA', '1999-01-01', 'ZOLTY', 1400, 20000
Skrypt tworz3cy tabel) PRACOWNICY i wype7niaj3cy j3 danymi
CONNECT TO WYPAUT USER db2admin USING db2admin;
DROP TABLE DB2ADMIN.PRACOWNICY;
CREATE TABLE DB2ADMIN.PRACOWNICY (
NR_PRACOWNIKA CHAR(4) NOT NULL,
IMIE VARCHAR(20) NOT NULL,
NAZWISKO VARCHAR(20) NOT NULL,
DATA_ZATR DATE NOT NULL,
DZIAL VARCHAR(20) NOT NULL,
STANOWISKO VARCHAR(20) NOT NULL,
PENSJA DECIMAL(8,2) ,
DODATEK DECIMAL(8,2) ,
NR_MIEJSCA CHAR(6) NOT NULL,
NR_TELEFONU CHAR(16),
PRIMARY KEY (NR_PRACOWNIKA));
INSERT INTO DB2ADMIN.PRACOWNICY
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
79
VALUES ('0001', 'JAN', 'KOWALSKI', '1997-02-01', 'OBSLUGA KLIENTA',
'SPRZEDAWCA', 1100, 123, '000001', '987-231-123');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0002', 'ANNA', 'KAMINSKA', '1997-01-01', 'OBSLUGA KLIENTA',
'SPRZEDAWCA', 1200, 115, '000002', '987-231-124');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0003', 'KRZYSZTOF', 'ADAMSKI', '1997-05-01', 'OBSLUGA KLIENTA',
'KIEROWNIK', 2000, NULL, '000001', '987-231-125');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0004', 'PIOTR', 'MICHALSKI', '1998-06-01', 'TECHNICZNY',
'MECHANIK', 1700, 76, '000001', '987-231-131');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0005', 'BOZENA', 'DOMANSKA', '1997-02-01', 'OBSLUGA KLIENTA',
'SPRZEDAWCA', 1300, 134, '000003', '987-231-126');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0006', 'WOJCIECH', 'BURZALSKI', '1998-12-01', 'TECHNICZNY',
'MECHANIK', 1800, 80, '000003', '987-231-132');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0007', 'MARZENA', 'KOWNACKA', '1997-05-01', 'KSIEGOWOSC', 'KASJER',
1400, 105, '000001', '987-231-141');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0008', 'DAMIAN', 'MACHALICA', '1997-05-01', 'TECHNICZNY',
'KIEROWNIK', 2200, NULL, '000001', '987-231-133');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0009', 'ALICJA', 'MAKOWIECKA', '1999-07-01', 'OBSLUGA KLIENTA',
'SPRZEDAWCA', 1400, 120, '000004', '933-241-525');
INSERT INTO DB2ADMIN.PRACOWNICY
VALUES ('0010', 'WOJCIECH', 'BAGIELSKI', '1998-04-01', 'OBSLUGA KLIENTA',
'SPRZEDAWCA', 1200, 100, '000001', '457-531-143');
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
80
Skrypt tworz3cy tabel) MIEJSCA i wype7niaj3cy j3 danymi
CONNECT TO WYPAUT USER db2admin USING db2admin;
DROP TABLE DB2ADMIN.MIEJSCA;
CREATE TABLE DB2ADMIN.MIEJSCA (
NR_MIEJSCA CHAR(6) NOT NULL,
ULICA VARCHAR(24) NOT NULL,
NUMER CHAR(8) NOT NULL,
MIASTO VARCHAR(24) NOT NULL,
KOD CHAR(6) NOT NULL,
TELEFON CHAR(16) ,
UWAGI VARCHAR(40),
PRIMARY KEY (NR_MIEJSCA));
INSERT INTO DB2ADMIN.MIEJSCA
VALUES ('000001', 'LEWARTOWSKIEGO', '12', 'WARSZAWA', '10-100', '228-277-
097', NULL);
INSERT INTO DB2ADMIN.MIEJSCA
VALUES ('000002', 'ALEJE LIPOWE', '3', 'WROCLAW', '32-134', '388-299-086',
NULL);
INSERT INTO DB2ADMIN.MIEJSCA
VALUES ('000003', 'KOCHANOWSKIEGO', '8', 'KRAKOW', '91-200', '222-312-498',
NULL);
INSERT INTO DB2ADMIN.MIEJSCA
VALUES ('000004', 'LOTNICZA', '9', 'POZNAN', '22-200', '778-512-044', NULL);
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
81
Skrypt tworz3cy tabel) WYPOCYCZENIA i wype7nia jacy j3 danymi
CONNECT TO WYPAUT USER db2admin USING db2admin;
DROP TABLE DB2ADMIN.WYPOZYCZENIA;
CREATE TABLE DB2ADMIN.WYPOZYCZENIA (
NR_WYPOZYCZENIA CHAR(8) NOT NULL,
NR_KLIENTA CHAR(8) NOT NULL,
NR_SAMOCHODU CHAR(6) NOT NULL,
NR_PRACOW_WYP CHAR(4) NOT NULL,
NR_PRACOW_ODD CHAR(4) ,
NR_MIEJSCA_WYP CHAR(6) NOT NULL,
NR_MIEJSCA_ODD CHAR(6) ,
DATA_WYP DATE NOT NULL ,
DATA_ODD DATE ,
KAUCJA DECIMAL(8,2) ,
CENA_JEDN DECIMAL(8,2) NOT NULL,
PRIMARY KEY (NR_WYPOZYCZENIA));
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000001', '00000001', '000003', '0002', '0002', '000001', '000001',
'1998-09-18', '1998-09-23', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000002', '00000003', '000004', '0001', '0001', '000001', '000001',
'1998-09-26', '1998-09-27', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000003', '00000002', '000004', '0009', '0009', '000002', '000002',
'1998-10-04', '1998-10-04', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000004', '00000004', '000003', '0010', '0010', '000003', '000003',
'1998-10-19', '1998-10-25', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000005', '00000006', '000007', '0010', '0010', '000003', '000003',
'1998-10-29', '1998-11-02', 200, 100);
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
82
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000006', '00000005', '000008', '0010', '0002', '000001', '000003',
'1998-11-07', '1998-11-09', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000007', '00000008', '000011', '0009', '0002', '000001', '000001',
'1998-11-20', '1998-11-25', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000008', '00000006', '000011', '0001', '0005', '000004', '000004',
'1998-11-28', '1998-12-02', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000009', '00000007', '000017', '0002', '0002', '000001', '000002',
'1998-12-01', '1998-12-03', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000010', '00000009', '000017', '0002', '0010', '000001', '000002',
'1998-12-15', '1998-12-17', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000011', '00000010', '000001', '0005', '0005', '000003', '000003',
'1998-12-20', '1998-12-23', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000012', '00000012', '000002', '0005', '0005', '000004', '000004',
'1999-01-04', '1999-01-14', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000013', '00000011', '000005', '0001', '0005', '000003', '000001',
'1999-01-24', '1999-01-29', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000014', '00000013', '000005', '0001', '0001', '000004', '000001',
'1999-02-01', '1999-02-05', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000015', '00000014', '000004', '0001', '0001', '000002', '000002',
'1999-02-04', '1999-02-04', 200, 100);
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
83
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000016', '00000015', '000018', '0009', '0009', '000002', '000002',
'1999-03-20', '1999-03-23', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000017', '00000016', '000013', '0010', '0010', '000004', '000001',
'1999-03-20', '1999-03-22', 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000018', '00000020', '000014', '0001', '0001', '000001', '000001',
'1999-04-01', '1999-04-05', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000019', '00000019', '000015', '0005', '0005', '000004', '000004',
'1999-05-04', '1999-05-09', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000020', '00000017', '000017', '0002', '0002', '000003', '000001',
'1999-08-14', '1999-08-17', NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000021', '00000018', '000009', '0002', NULL, '000001', NULL,
'1999-12-04', NULL, NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000022', '00000017', '000001', '0001', NULL, '000002', NULL,
'1999-12-22', NULL, NULL, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000023', '00000009', '000003', '0010', NULL, '000002', NULL,
'2000-01-08', NULL, 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000024', '00000014', '000004', '0005', NULL, '000001', NULL,
'2000-01-24', NULL, 200, 100);
INSERT INTO DB2ADMIN.WYPOZYCZENIA
VALUES ('00000025', '00000010', '000004', '0009', NULL, '000002', NULL,
'2000-02-09', NULL, 200, 100);
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
84
Podsumowanie
1. Przyk)adowa baza WYPAUT sk)ada si z pi ciu tabel: KLIENCI, PRACOWNICY, MIEJSCA,
WYPOZYCZENIA i SAMOCHODY.
2. Wszystkie te tabele s ze sob powi zane relacjami.
3. Skrypty zamieszczone w tym rozdziale s
dost pne równie#
na serwerze:
ftp://ftp.helion.com.pl/przyklady/cwsql.zip.
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
85
Spis tre ci:
ROZDZIA< 1. JAK KORZYSTA? Z ?WICZEB.......................................................... 1
ROZDZIA< 2. KONCEPCJA BAZY DANYCH ........................................................... 3
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
86
ROZDZIA< 4 . WYBIERANIE DANYCH Z WIELU TABEL. ..................................... 20
ROZDZIA< 5. FUNKCJE SKALARNE I ARYTMETYCZNE..................................... 24
ROZDZIA< 6.FUNKCJE KOLUMNOWE I GRUPUJFCE ........................................ 34
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
87
ROZDZIA< 9. UTRZYMYWANIE DANYCH. ............................................................ 45
ROZDZIA< 10. OGRANICZENIA I INTEGRALNOG? REFERENCYJNA ............... 49
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
88
ROZDZIA< 14. STRUKTURA PRZYK<ADOWEJ BAZY DANYCH......................... 70
Arkadiusz Jakubowski – Podstawy SQL – wiczenia praktyczne
___________________________________________________________________________________________________
89