Professional Documents
Culture Documents
PRZYKADOWY ROZDZIA
SPIS TRECI
KATALOG KSIEK
KATALOG ONLINE
SQL. Od podstaw
Autorzy: Paul Wilton, John Colby
Tumaczenie: Mikoaj Szczepaniak
ISBN: 83-7361-999-2
Tytu oryginau: Beginning SQL
Format: B5, stron: 473
TWJ KOSZYK
DODAJ DO KOSZYKA
CENNIK I INFORMACJE
ZAMW INFORMACJE
O NOWOCIACH
ZAMW CENNIK
CZYTELNIA
FRAGMENTY KSIEK ONLINE
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
Spis treci
O autorach ................................................................................................................................................ 13
Wprowadzenie ......................................................................................................................................... 15
Dla kogo jest ta ksika? ............................................................................................. 16
O czym jest ta ksika? ................................................................................................ 16
Jak zorganizowano t ksik? ...................................................................................... 17
Czego bdziesz potrzebowa do pracy z t ksik? ........................................................ 18
Konwencje .................................................................................................................. 18
Kod rdowy ............................................................................................................... 19
p2p.wrox.com .............................................................................................................. 19
SQL. Od podstaw
Operatory logiczne AND i OR ............................................................................... 71
Usuwanie danych ......................................................................................................... 73
Podsumowanie ............................................................................................................ 74
wiczenia .................................................................................................................... 75
Spis treci
SQL. Od podstaw
Zczenia wewntrzne analiza szczegowa ......................................................... 250
Rwnozczenia i nierwnozczenia .................................................................. 251
Zczenia wielokrotne i warunki wielokrotne ....................................................... 253
Zczenia krzyowe .......................................................................................... 256
Samozczenia ................................................................................................ 257
Zczenia zewntrzne ............................................................................................ 262
Lewe zczenie zewntrzne ............................................................................... 262
Prawe zczenia zewntrzne .............................................................................. 265
Pene zczenie zewntrzne .............................................................................. 269
czenie zbiorw wynikowych za pomoc operatora UNION ............................................ 270
Podsumowanie .......................................................................................................... 276
wiczenia .................................................................................................................. 277
Spis treci
10
SQL. Od podstaw
wiczenia .................................................................................................................. 386
Spis treci
11
22
SQL. Od podstaw
Mimo e IBM by absolutnym liderem bada nad bazami danych, to firma Honeywell Information Systems, Inc. w roku 1976 wprowadzia na rynek swj produkt komercyjny, ktry
bazowa co prawda na tych samych reguach co system informacyjny firmy IBM, ale zosta
zaprojektowany i zaimplementowany zupenie niezalenie od prac tej firmy.
We wczesnych latach osiemdziesitych ubiegego stulecia zbudowano pierwsze systemy baz
danych oparte na standardzie SQL w tamtym okresie ukazaa si druga wersja systemu
Oracle firmy Oracle, system SQL/DS firmy IBM oraz bardzo wiele innych systemw opracowanych przez inne firmy.
Teraz, skoro wiesz co nieco na temat rde pochodzenia baz danych, moesz przystpi do
lektury materiau powiconego bardziej praktycznym zagadnieniom temu, czym s bazy
danych oraz kiedy naley z nich korzysta.
Rozdzia 1.
23
z ktrych kady dzieli si na pola. Czym jednak s rekordy i pola? Pole jest pojedynczym
elementem danych opisujcym okrelony przedmiot. Takim przedmiotem moe by np.
osoba wwczas pojedynczym elementem danych o osobie moe by data urodzenia. Jeli
reprezentowanym przedmiotem bdzie adres domu, elementem danych moe by skadnik
tego adresu, np. ulica. W przypadku ksiki konkretnym fragmentem danych skadowanym
w pojedynczym polu moe by rok wydania, inne pole moe zawiera tytu, jeszcze inne
moe reprezentowa nazwisko autora. Przykadowo, rekord reprezentujcy t ksik w polu
Rok wydania powinien zawiera warto 2005, w polu Tytu warto Beginning SQL, a w polu
Autor wartoci Paul Wilton i John Colby. Wszystkie te pola odnosz si do okrelonego
przedmiotu: ksiki zatytuowanej Beginning SQL. Pola te razem tworz struktur nazywan
rekordem. Kada ksika ma swj wasny rekord, a wszystkie te rekordy s przechowywane w bazie danych w ramach szerszej struktury nazywanej tabel. Pojedyncza baza danych
moe zawiera jedn lub wiele tabel. Jeli masz trudnoci w opanowaniu informacji przedstawionych do tej pory, nie przejmuj si pojcia pl i rekordw bd si pojawiay w dalszej czci tego rozdziau jeszcze wielokrotnie.
Mam nadziej, e rozumiesz ju koncepcj bazy danych, ktrej celem jest uatwienie procesw skadowania, organizowania i wydobywania (przeszukiwania) danych. Ostatnim pojciem wymagajcym wyjanienia jeszcze w tym punkcie jest termin relacyjna baza danych,
ktry dotyczy bazy danych zawierajcej zorganizowane i wzajemnie poczone informacje
(wystpujce w odpowiednich relacjach). Wszystkie rekordy takiej bazy danych s zorganizowane w ramach tabel. Powizane dane, np. szczegy dotyczce sprzedawcw, s grupowane w jednej tabeli. Szczegy na temat sprzedawanych przez nich samochodw mog
by skadowane w innej tabeli okrelajcej relacje pomidzy reprezentowanymi samochodami
a sprzedawcami, ktrzy je sprzedali przykadowo, sprzedawca X mg sprzeda samochd
Y w dniu Z. Na rysunku 1.1 przedstawiono jedn z tabel przykadowej bazy danych. Na pierwszy rzut oka przedstawiona struktura moe Ci przypomina arkusz kalkulacyjny, ktrego
wiersze reprezentuj Twoje rekordy, natomiast kolumny zawieraj pola dla tych rekordw.
Podczas lektury rozdziau 3. odkryjesz, e tabele naley traktowa raczej jak zbiory danych.
Rysunek 1.1.
24
SQL. Od podstaw
Rozdzia 1.
25
model i cen poszczeglnych pojazdw, ale raczej nie bdzie zawieraa liczby samochodw
sprzedanych w poszczeglnych miesicach, poniewa mona t liczb wyznaczy na podstawie ju przechowywanych informacji (wspomnianych surowych danych).
Inaczej jest w przypadku arkuszy kalkulacyjnych, ktre mog zawiera przetworzone dane,
np. wartoci rednie lub wyniki analiz statystycznych. Rola bazy danych sprowadza si do
przechowywania informacji, a za ich przetwarzanie odpowiada zwykle program frontonu
lub odpowiedni interfejs uytkownika. Przykadami programw frontonw s strony internetowe wywietlajce informacje wydobyte z bazy danych oraz programy powizane z danymi
bazy danych i umoliwiajce uytkownikowi ich przegldanie.
Baza danych umoliwia te udostpnianie i wspdzielenie informacji. Te same dane mog
by wspuytkowane przez wielu uytkownikw pracujcych na jednym komputerze lub
przez wielu uytkownikw pracujcych na wielu komputerach poczonych za porednictwem sieci z internetem. Jeli dealer samochodowy ma swoje oddziay w Poznaniu, Gliwicach
i Warszawie, moe skonfigurowa pojedynczy komputer z baz danych, ktra za porednictwem sieci bdzie udostpniana pracownikom wszystkich oddziaw. Takie rozwizanie
jest nie tylko moliwe, ale te bezpieczne, poniewa bazy danych maj precyzyjnie definiowane struktury i dodatkowo wymuszaj przestrzeganie regu chronicych zawierane dane.
Co wicej, bazy danych umoliwiaj dostp do zawieranych informacji wicej ni jednemu
uytkownikowi jednoczenie ewentualne zmiany wprowadzane w tym trybie s obsugiwane przez system zarzdzania baz danych. Wyobra sobie chaos, jaki miaby miejsce,
gdyby zamiast systemu bazy danych uyto Excela i gdyby arkusz kalkulacyjny by modyfikowany przez dwch sprzedawcw jednoczenie. Naturalnie konieczne byoby rejestrowanie zmian wprowadzanych przez obu uytkownikw, jednak w praktyce utrwalane byoby
tylko dziaania uytkownika, ktry zapisa arkusz jako ostatni (wszelkie wczeniejsze zmiany
drugiego uytkownika byyby nadpisywane).
Bazy danych uatwiaj te wspdzielenie informacji pomidzy rnymi systemami (zamiast
wykorzystania i konwertowania formatw waciwych dla poszczeglnych rozwiza, np.
konkretnego programu, konkretnego producenta czy okrelonego systemu operacyjnego). Przykadowo, arkusz kalkulacyjny Excela mona atwo odczyta na komputerze klasy PC z systemem operacyjnym Windows i zainstalowanym pakietem Microsoft Office, ale ju w systemie UNIX, Macintosh czy Linux podobna operacja stwarza powane problemy, poniewa
komputery kontrolowane przez te systemy obsuguj dane w inny sposb. Nawet na komputerze z systemem Windows niezbdna jest instalacja pakietu Microsoft Office. Zupenie
inaczej jest w przypadku baz danych, ktre mona zainstalowa wraz z systemami zarzdzania bazami danych na jednym komputerze i w prosty sposb udostpnia pozostaym uytkownikom sieci lokalnej lub internetu.
Rozwizania alternatywne wzgldem baz danych, a wic pliki tekstowe i arkusze kalkulacyjne, maj jedn wielk zalet (ktra w jakim sensie jest ich saboci) elastyczno.
W plikach tekstowych tak naprawd nie obowizuj adne reguy moesz w dowolnym
momencie wstawia dowolne dane tekstowe. To samo dotyczy (cho w nieco innym wymiarze)
arkuszy kalkulacyjnych. Moesz co prawda da od uytkownikw wpisywania danych
w ramach predefiniowanej struktury, ale w praktyce nie masz moliwoci wymuszania przestrzegania swoich zalece. Zastosowanie bazy danych pozwala ograniczy dostp uytkownikw do samych danych przy jednoczesnym zakazie modyfikowania gotowej struktury.
26
SQL. Od podstaw
Kolejn istotn zalet baz danych jest bezpieczestwo. Wikszo systemw zarzdzania
bazami danych umoliwia tworzenie uytkownikw celem definiowania rozmaitych poziomw zabezpiecze. Zanim kto uzyska dostp do bazy danych, musi si zalogowa jako
konkretny uytkownik. Kady uytkownik ma przypisane pewne prawa i ograniczenia. Osoba
odpowiedzialna za administracj ma nieograniczone moliwoci w zakresie edycji danych,
zmiany struktury, dodawania i usuwania uytkownikw itd. Pozostali uytkownicy mog
tylko przeglda dane bez moliwoci ich modyfikowania (czsto mona nawet ograniczy
zakres udostpnianych danych). Wiele systemw zarzdzania bazami danych zapewnia na
tyle szczegowe poziomy zabezpiecze, e administrator moe bardzo precyzyjnie okrela
uprawnienia poszczeglnych uytkownikw. Odpowiednie mechanizmy nie ograniczaj si
do strategii wszystko albo nic, ktra umoliwiaaby albo przyznawanie penych uprawnie,
albo cakowicie zakazywaa dostpu.
Bazy danych s stosowane niemal wszdzie. Przetwarzanie danych byo jednym z podstawowych powodw stworzenia pierwszych komputerw i do teraz stanowi ich gwne zastosowanie. Niemal kady czowiek i kada firma w pewnym punkcie swojej dziaalnoci korzystaj z bazy danych. Tego typu rozwizania s powszechnie stosowane w komputerach
osobistych do skadowania lokalnie wykorzystywanych danych oraz w firmowych sieciach
komputerowych, gdzie bazy danych umoliwiaj wspdzielenie informacji przykadowo, wikszo sklepw internetowych uywa baz danych. Kiedy odwiedzasz due sklepy
internetowe, w wikszoci przypadkw wywietlane informacje na temat oferowanych produktw pochodz z bazy danych. Zamiast tworzy kad stron rcznie, waciciele duych
sklepw uywaj szablonw dla sprzedawanych ksiek czy pyt CD, a do wydobywania
z bazy danych szczegowych informacji na temat poszczeglnych towarw su odpowiednie wyraenia jzyka zapyta SQL. Wyobra sobie, ile czasu potrzebowaby sklep internetowy Amazon do przygotowania kadej ze swoich stron rcznie!
Bazy danych doskonale zdaj egzamin wszdzie tam, gdzie niezbdne jest przeszukiwanie,
sortowanie i regularne aktualizowanie ogromnych iloci danych. Podczas lektury kilku kolejnych rozdziaw przekonasz si, e bazy danych w poczeniu z jzykiem zapyta SQL umoliwiaj uzyskiwanie potrzebnych odpowiedzi we wskazanym porzdku.
Rozdzia 1.
27
Moesz oczywicie kupi dowoln liczb dostpnych na rynku i bardzo zrnicowanych systemw zarzdzania bazami danych, jednak celem tej ksiki jest prezentacja jzyka SQL,
ktry nie tylko jest standardem (wicej informacji na temat standardw znajdziesz w nastpnym podrozdziale), ale take jest obsugiwany przez zdecydowan wikszo wspczesnych systemw zarzdzania bazami danych. Istniej jednak sytuacje, w ktrych standardowe rozwizania nie umoliwiaj realizacji wszystkich oczekiwanych zada. Istniej te
rozwizania, ktre rni producenci systemw zarzdzania bazami danych zaimplementowali
w odmienny, niespjny sposb. Niniejsza ksika szczegowo opisuje rozwizania zastosowane w systemach Microsoft Access, Microsoft SQL Server, IBM DB2, MySQL oraz
Oracle 10.
Proces definiowania struktury bazy danych obejmuje takie dziaania jak tworzenie nowych
tabel i pl bazy danych, budowa regu dla danych itp. Odpowiednie wyraenia nale do podjzyka SQL nazywanego jzykiem kontroli danych (ang. Data Control Language DCL).
Jzyk DCL opisano w dalszej czci tego rozdziau, natomiast problematyka wykonywania
zapyta na bazie danych zostanie omwiona w nastpnym punkcie.
I wreszcie jzyk DCL umoliwia zarzdzanie zabezpieczeniami bazy danych. Oglnie, za
zapewnienie bezpieczestwa baz danych odpowiadaj ich administratorzy.
Przygotowywanie wyrae jzyka SQL za kadym razem, gdy konieczna jest zmiana struktury
lub regu bezpieczestwa bazy danych, na pierwszy rzut oka robi wraenie rozwizania do
pracochonnego i rzeczywicie tak jest! Wikszo wspczesnych systemw baz danych
oferuje moliwo wprowadzania zmian za pomoc przyjaznego interfejsu uytkownika (bez
koniecznoci wpisania choby jednego wiersza w jzyku SQL).
28
SQL. Od podstaw
ile samochodw byo sprzedawanych przez poszczeglnych sprzedawcw w kolejnych miesicach i ile pienidzy uzyskano z tej sprzeday. Okazuje si, e mona napisa pojedyncze
(zoone) wyraenie jzyka SQL, ktre bdzie reprezentowao to pytanie i dla ktrego baza
danych wygeneruje zbir danych stanowicych odpowied na otrzymane danie. Zapytanie
jzyka SQL skada si z rnych wyrae, klauzul i warunkw. Wyraenie jest poleceniem
lub rozkazem. Przykadowo, wyraenie moe mie posta: daj mi jakie dane. Klauzula
okrela pewne ograniczenia dla danego wyraenia; kade z tych ogranicze jest definiowane
w formie warunkw. Przykadowo, zamiast dania daj mi jakie dane moesz wywoa
zapytanie: daj mi dane tylko dla sprzeday z maja, gdzie tylko dla jest klauzul okrelajc interesujc Ci dat. W tym przypadku warunkiem jest z maja. Jeli dane dane
nie speniaj tak okrelonego kryterium (w tym przypadku z maja), nie s dla Ciebie interesujce. W kodzie jzyka SQL takie danie mogoby mie nastpujc posta:
SELECT ModelSamochodu
FROM SprzedaSamochodw
WHERE DataSprzedaySamochodu BETWEEN '1 maj 2005' AND '31 maj 2005';
Wyraenie SELECT mwi systemowi bazy danych, e chcesz z niej wybra (wyselekcjonowa)
pewne dane. Nastpnie wymieniasz dane, ktre Ci interesuj (w tym przypadku jest to tylko
pole ModelSamochodu). W dalszej czci wyraenia okrelasz miejsce, z ktrego maj pochodzi interesujce Ci dane (w tym przypadku z tabeli nazwanej SprzedaSamochodw). Na
kocu tego wyraenia zdefiniowae warunek. Powysze wyraenie stwierdza, e chcesz otrzyma tylko te dane, dla ktrych okrelone warunki s spenione. W tym przypadku warunek
mwi, e warto pola daty nazwanego DataSprzedaySamochodu musi nalee do przedziau
od pierwszego do trzydziestego pierwszego maja 2005 roku. Wiele przykadw kodu jzyka
SQL podobnych do powyszego zostanie omwionych w rozdziale 3., gdzie szczegowo
przeanalizujemy stosowane w tym jzyku wyraenia, klauzule i warunki.
Rozdzia 1.
29
Okazuje si, e jzyk SQL jest stosunkowo atwy w czytaniu. Odpowiedni kod tego jzyka
tak naprawd miaby nastpujc posta:
SELECT * FROM TransakcjeSprzeday WHERE DataSprzeday = "Lipiec 2005" AND
MiejsceSprzeday = "Gliwice";
30
SQL. Od podstaw
Rok
Nazwa
Alternatywna nazwa
Zmiany
1986
SQL-86
SQL-87
(data akceptacji przez ISO)
1989
SQL-89
1992
SQL-92
SQL2
1999
SQL-99
SQL3
2003
SQL2003
Mimo e standardy stanowi istotne uatwienie w poszukiwaniu czci wsplnej rnych implementacji jzyka SQL w ramach istniejcych relacyjnych systemw zarzdzania bazami
danych, tak naprawd wane jest tylko to, czy poszczeglne rozwizania dziaaj w praktyce.
Zamiast bez koca dyskutowa o wyszoci jednych standardw nad innymi, niniejsza ksika
zawiera informacje, ktre powinny Ci pomc w realizacji okrelonych zada w rzeczywistym
wiecie baz danych. Zgodnie z t deklaracj moemy od razu przej do kolejnego podrozdziau,
w ktrym poka Ci, jak za pomoc jzyka SQL moesz tworzy wasne bazy danych.
Rozdzia 1.
31
32
SQL. Od podstaw
rozmaitymi bazami danych. W sytuacji przedstawionej na rysunku 1.2 relacyjny system zarzdzania baz danych tworzy dwie bazy danych, ale rwnie dobrze mgby tworzy jedn
lub wiele tysicy baz danych. System RDBMS odpowiada za zapewnienie inteligentnych
mechanizmw dziaajcych w tle systemu bazy danych. Relacyjny system zarzdzania baz
danych wykonuje wszelkie zadania zwizane z tworzeniem i utrzymywaniem baz danych
wcznie z jej wewntrznymi strukturami. Co wicej, tego typu oprogramowanie odpowiada
te za zapewnienie bezpieczestwa, wykonywanie operacji wstawiania, usuwania i przeszukiwania danych oraz umoliwianie uytkownikom korzystania z systemu bazy danych za porednictwem konsoli zarzdzania.
Bezporednio pod samym relacyjnym systemem zarzdzania baz danych znajduj si zawarte w nim bazy danych. Kada taka baza zawiera kolekcj jednej lub wikszej liczby tabel.
cile mwic, Twoja baza danych mogaby nie zawiera adnych tabel, jednak wwczas
jej utrzymywanie oczywicie nie miaoby sensu! Bazy danych maj charakter niezalenych
struktur, co oznacza, e zdarzenia dotyczce tabeli w jednej bazie nie maj wpywu na inne
tabele w pozostaych bazach tego samego systemu. Przykadowo, jeli zechcesz, w kadej
ze swoich baz danych moesz stworzy tabele oznaczone takimi samymi nazwami, a Twoje
dziaania nie spowoduj adnych komplikacji w ramach systemu baz danych. Kada z tworzonych przez Ciebie baz danych otrzymuje wasn nazw lub identyfikator. Sposb obsugi
baz danych i tabel w ramach systemu baz danych moe by bardzo rny zaley od konkretnej implementacji oferowanej przez producenta relacyjnego systemu zarzdzania baz
danych. Przykadowo, Microsoft Access jednoczenie przetwarza tylko jedn baz danych,
mimo e istniej techniki czenia wielu baz danych. Kada baza danych tego systemu jest
skadowana w osobnym pliku. Pozostae relacyjne systemy zarzdzania bazami danych umoliwiaj swoim uytkownikom zarzdzanie wicej ni jedn baz danych z poziomu tej samej konsoli.
W ramach kadej bazy danych istnieje kolekcja tabel zawierajcych rekordy, ktre z kolei
zawieraj waciwe dane. Dobr analogi wystpujc w wiecie rzeczywistym jest np. rozkad jazdy pocigw lub autobusw. Prosty rozkad jazdy autobusw moe mie posta nastpujcej tabeli:
Pocztek
Cel
Wyjazd
Przyjazd
Pozna
Gliwice
4:20
10:45
Zaniemyl
Krnik
10:12
10:37
Wisa
Katowice
15:30
17:00
czyca
11:40
12:35
Gdynia
Sopot
18:05
18:39
Gdyby miaa to by rzeczywista tabela w Twojej bazie danych, mgby stworzy tabel z odpowiednimi informacjami i nada jej jak oryginaln nazw, np. rozkad_jazdy. Reguy
nazywania tabel baz danych z jednej strony s do elastyczne, z drugiej jednak mog si
nieznacznie rni w poszczeglnych relacyjnych systemach zarzdzania bazami danych. Oglnie, jeli dana nazwa nie zawiera znakw interpunkcyjnych (z wyczeniem znakw podkrelenia) i nie jest dusza od przyjtego ograniczenia (zwykle rwnego 128 znakom), system
bazy danych nie powinien stwarza problemw z jej utworzeniem.
Rozdzia 1.
33
34
SQL. Od podstaw
Przedstawione wyraenie wydobywa dane z tabeli Sprzedawca. System bazy danych wie,
z ktrej tabeli naley wyselekcjonowa dane dane, poniewa uye jej identyfikatora
(w tym przypadku Sprzedawca).
Litera jest faktyczn wartoci, np. 120, Pawe lub 10 stycznia 2007. Przykadowo, jeli
chcesz otrzyma list wszystkich sprzedawcw, ktrzy maj na imi Bogdan, moesz uy
nastpujcego wyraenia:
SELECT ImiSprzedawcy, NazwiskoSprzedawcy
FROM Sprzedawca
WHERE Imi = 'Bogdan';
Powysze wyraenie wykorzystuje w swojej instrukcji warunkowej litera Bogdan. Jeli struktura
wyrae jzyka SQL wci nie jest dla Ciebie jasna, nie przejmuj si wyraenia SELECT
poddamy szczegowej analizie w rozdziale 3.
Sowo kluczowe jest wyrazem, ktre ma konkretne znaczenie dla systemu bazy danych przetwarzajcego cae wyraenie. Przykadowo, jeli powiesz flob-badob, Twj rozmwca nie
bdzie mia pojcia, o co Ci chodzi! Jeli jednak uyjesz sowa stop, dla wikszoci mieszkacw Ziemi znaczenie tego wyrazu bdzie zrozumiae. Podobnie dla systemu bazy danych
sowo flob-badob niczego nie oznacza, ale np. wyraz SELECT jest jak najbardziej zrozumiay i ma przypisane okrelone (specjalne) przesanie. Uycie tego sowa oznacza: chc wyselekcjonowa jakie dane. Kade sowo kluczowe ma przypisane pewne reguy. Jeli uyjesz
sowa SELECT, system bazy danych bdzie oczekiwa przynajmniej listy danych do wyselekcjonowania i miejsca, gdzie mona je znale. Dla sowa SELECT istniej te opcjonalne
sowa kluczowe, np. klauzula WHERE, za pomoc ktrych mona dookreli rodzaj oczekiwanych danych. Podczas prezentacji kadego nowego sowa kluczowego w tej ksice bdziesz
informowany nie tylko o podstawowych konstrukcjach wymaganych przez system bazy
danych, ale te o skadnikach opcjonalnych, ktre mona doda do danego sowa.
Jeli do tej pory korzystae z innych (proceduralnych) jzykw programowania, by moe
zastanawia Ci ukad kodu. Niektre jzyki umoliwiaj stosowanie tylko po jednym wyraeniu na wiersz kodu. Inaczej jest w przypadku jzyka SQL, ktrego autorzy przewidzieli
moliwo rozcigania wyrae na wicej ni jeden wiersz. Przykadowo, oba przedstawione poniej wyraenia s prawidowe:
SELECT ModelSamochodu FROM Samochody WHERE MarkaSamochodu = 'Ford';
SELECT ModelSamochodu
FROM Samochody
WHERE MarkaSamochodu = 'Ford';
Rozpraszanie kodu w ramach wikszej liczby wierszy sprawia, e jest on bardziej czytelny
(przynajmniej jeli takiego podziau dokonano w logiczny sposb). W powyszym przykadzie kad z czci wyraenia SELECT umieszczono w osobnym wierszu.
C, wystarczy ju tych nudnych rozwaa na temat skadni. Bardziej szczegow analiz
poszczeglnych aspektw skadni tego jzyka znajdziesz w dalszej czci ksiki (odpowiednie rozwizania bd omawiane na bieco). Przejdmy teraz do kwestii waciwego tworzenia baz danych.
Rozdzia 1.
35
36
SQL. Od podstaw
Aby usun baz danych mojaPierwszaBazaDanych, naley wykona nastpujce wyraenie:
DROP DATABASE mojaPierwszaBazaDanych;
Tego polecenia nie naley jednak stosowa w sposb lekkomylny! Usunicie bazy danych
z relacyjnego systemu zarzdzania baz danych moe spowodowa trwa utrat wszystkich zapisanych w niej informacji.
W systemie Oracle zastosowano nieco inne podejcie do procesu usuwania baz danych.
Zamiast wywoywa wspomniane polecenie DROP DATABASE, naley raz jeszcze utworzy
odpowiedni baz danych! Jeli masz ju baz danych nazwan mojaPierwszaBazaDanych,
relacyjny system zarzdzania baz danych usunie j w odpowiedzi na wykonanie polecania:
CREATE DATABASE mojaPierwszaBazaDanych;
Typy danych
Poza wiatem techniki komputerowej poszczeglne rodzaje informacji do naturalnie mona
podzieli na odpowiednie kategorie. Cena towarw w sklepie s traktowane jak dane numeryczne. Jeli spytasz o drog z Warszawy do Gdaska, oczekujesz instrukcji sownych w postaci skr w prawo. W przypadku baz danych pojcie typu danych odnosi si do klasyfikacji rnych rodzajw skadowanych informacji niezalenie od tego, czy s to liczby,
znaki czy daty. Takie podejcie uatwia systemom baz danych interpretowanie i waciwe
przetwarzanie wstawianych wartoci. Oznacza to, e podobnie jak w wiecie niezwizanym
z bazami danych, rne typy informacji podlegaj odpowiedniej kategoryzacji, jednak w tym
przypadku proces ten ma zdecydowanie bardziej formalny charakter. Wracajc do przykadu
rozkady jazdy autobusw, w poniszej tabeli przedstawiono typy danych skadowane w poszczeglnych polach:
Pole
Typ danych
Przykad
Pocztek
Dane znakowe
Pozna, Zaniemyl
Cel
Dane znakowe
Gliwice, Krnik
Wyjazd
Czas
4:20, 10:12
Przyjazd
Czas
10:45, 10:37
W tym momencie a cinie si na usta pytanie: Po co w ogle stosuje si rne typy danych?. Dlaczego nie mona po prostu wszystkich informacji traktowa jak danych tekstowych? Gwnym powodem takiego rozwizania jest efektywno. Ilo wykorzystywanej
pamici jest znacznie mniejsza, a operacje dostpu s znacznie szybsze, jeli system bazy
danych wie, z jakimi danymi ma do czynienia. Przykadowo, liczba 243 787 452 moe by
skadowana zaledwie w 4 bajtach pamici komputerowej. Przechowywanie tej samej liczby
w formie tekstu (danych znakowych) zajoby a 9 bajtw.
Rozdzia 1.
37
Typy danych peni jeszcze jedn wan rol: pozwalaj relacyjnemu systemowi zarzdzania
baz danych okreli zbir moliwych do wykonania operacji na skadowanych informacjach.
Przykadowo, w przypadku danych numerycznych wyraenie 123 + 123 bdzie interpretowane
jak dodawanie, ktrego wynikiem bdzie liczba 246. Gdyby jednak oba operandy byy danymi
tekstowymi, relacyjny system zarzdzania baz danych zinterpretowaby znak plusa jako operator zczenia dwch acuchw znakowych w jeden (w tym przypadku 123123).
Jakie wic typy danych ma do dyspozycji uytkownik relacyjnego systemu zarzdzania baz
danych? Niestety, okazuje si, e dostpne typy rni si w zalenoci od producentw tego
rodzaju systemw. Problem w tym, e mimo zdefiniowania w specyfikacjach ANSI SQL
(takich jak SQL-92, SQL-99 czy SQL-2003) standardowych typw danych, istniej zasadnicze rnice w kwestii praktycznych rozwiza zaimplementowanych przez poszczeglnych
producentw relacyjnych systemw zarzdzania bazami danych. Nie wszystko jednak stracone.
Wspomniane standardy s obsugiwane w wystarczajcym stopniu, aby oprze na nich przykady prezentowane i analizowane w tej ksice. Kiedy ju opanujesz podstawowe typy danych standardu ANSI SQL, odkrywanie typw danych obsugiwanych przez Twj relacyjny
system zarzdzania baz danych nie powinno stanowi wikszego problemu. Typw waciwych dla Twojego systemu bdziesz mg uywa jako uzupenienia dla omawianych w tym
podpunkcie typw podstawowych.
W poniszej tabeli przedstawiono podzbir najczciej stosowanych typw danych standardu ANSI SQL wraz z odpowiednimi nazwami stosowanymi w takich relacyjnych systemach zarzdzania bazami danych jak SQL Server, IBM DB2 itp.
ANSI SQL
MS Access
IBM DB2
MySQL
Oracle 10
Znakowy
char
char
char
char
char
Znakowy o zmiennej
dugoci
varchar
varchar
varchar
varchar
varchar
Regionalny znakowy
char
nchar
graphic
char
nchar
Regionalny znakowy
o zmiennej dugoci
varchar
nvarchar
vargraphic
varchar
nvarchar
Cakowitoliczbowy
number
(long integer)
int
int
int
int
May
cakowitoliczbowy
number
(integer)
smallint
smallint
smallint
smallint
Rzeczywisty
number (double)
real
real
real
real
Dziesitny
number
(decimal)
decimal
decimal
decimal
decimal
Daty
date
datetime
date
date
date
Czasu
time
datetime
time
time
time
Powysza tabela zawiera co prawda tylko niewielki podzbir wszystkich moliwych typw danych dostpnych w poszczeglnych relacyjnych systemach zarzdzania bazami
danych, ale przedstawiony zestaw na tym etapie w zupenoci wystarczy. Zwr uwag
na fakt obsugi typw nchar i nvarchar w systemie Oracle typy te s obsugiwane
38
SQL. Od podstaw
tylko podczas tworzenia nowej bazy danych i wyznaczania zbioru znakw Unicode
(np. AL16UTF16); w przeciwnym przypadku system Oracle domylnie odrzuca zarwno
typ nchar, jak i typ nvarchar.
W poniszej tabeli wymieniono i opisano poszczeglne typy danych wcznie z zajmowan
przez nie przyblion iloci pamici oraz przykadami najczstszych zastosowa. Dla poszczeglnych typw danych uyto nazw zgodnych ze standardem ANSI.
Typ danych
Opis
Wymagana pami
Przykad
Znakowy
Jeden bajt
na kady
zarezerwowany
znak
char(8) rezerwuje
Znakowy
o zmiennej dugoci
Jeden bajt
na kady
skadowany znak
varchar(8) rezerwuje
przestrze dla
maksymalnie omiu
znakw. Skadowanie
tylko jednego znaku
wymaga jednak jedynie
1 bajta pamici,
skadowanie dwch
znakw wymaga
2 bajtw itd.;
takie pole moe zaj
maksymalnie 8 bajtw.
Regionalny
znakowy
Dwa bajty
na kady
zarezerwowany
znak
nchar(8) rezerwuje
przestrze dla omiu
znakw i zajmuje
16 bajtw pamici
niezalenie od liczby
rzeczywicie
skadowanych znakw.
Regionalny
znakowy
o zmiennej dugoci
Dwa bajty
na kady
skadowany znak
nvarchar(8) rezerwuje
przestrze pamiciow
dla omiu znakw.
Ilo faktycznie
wykorzystywanej
pamici zaley od liczby
rzeczywicie
skadowanych znakw.
Rozdzia 1.
39
Typ danych
Opis
Wymagana pami
Przykad
Cakowitoliczbowy
Cztery bajty
May
cakowitoliczbowy
Dwa bajty
Rzeczywisty
Liczby zmiennoprzecinkowe
z przedziau od 3,40E+38
do 3,40E+38. Liczby tego typu
mog zawiera maksymalnie
osiem cyfr po znaku dziesitnym;
np. 87,12342136.
Cztery bajty
Dziesitny
Liczby zmiennoprzecinkowe,
ktre dodatkowo umoliwiaj
deklarowanie wartoci
maksymalnej i iloci cyfr
po znaku dziesitnym. Liczby tego
typu musz si mieci w przedziale
od 1038+1 do 10381.
5 17 bajtw
decimal(38,12) ustawia
liczb, ktrej dugo
nie przekracza 38 cyfr,
z czego 12 cyfr
wystpuje po znaku
dziesitnym.
Daty
Reprezentuje dat.
Cztery bajty
przestrzeni pamiciowej
niezalenie od wielkoci
reprezentowanej liczby.
przestrzeni pamiciowej
niezalenie od wielkoci
reprezentowanej liczby.
Warto pamita
o istotnych rnicach
w interpretowaniu
formatw daty;
przykadowo, w Wielkiej
Brytanii zapis 12/01/2006
oznacza 12 stycznia
2006, natomiast
w Stanach
Zjednoczonych ten sam
zapis to 1 grudnia
2006 roku.
Czasu
Reprezentuje godzin.
Trzy bajty
40
SQL. Od podstaw
Znaki
Jeli chcesz w swojej bazie danych skadowa tekst, powiniene uy znakowego typu danych.
Pamitaj, e pojcie acucha odnosi si do jednego lub wielu znakw wystpujcych
w ramach jednej struktury. Istniej cztery moliwe odmiany znakowych typw danych:
Q
staej dugoci,
zmiennej dugoci,
Najpierw wyjani rnic pomidzy typami danych tekstowych staej i zmiennej dugoci.
Przeanalizuj poniszy fragment kodu:
char(127)
Jeli uyjesz tego kodu, relacyjny system zarzdzania baz danych zarezerwuje obszar pamici
potrzebny do skadowania 127 znakw. Jeli umiecisz w tak zadeklarowanej strukturze tylko
10 znakw, pozostae 117 bajtw zarezerwowanego obszaru zostanie wypenionych spacjami
(bd wic bezuyteczne). Jeli planujesz stosowanie tylko 10-znakowych danych, powiniene rozway uycie nastpujcej struktury:
char(10)
Takie rozwizanie jest jak najbardziej prawidowe, pod warunkiem jednak, e nigdy nie
bdziesz prbowa wykorzysta wicej ni 10 znakw (np. 127 znakw zgodnie z oryginaln
deklaracj).
Zupenie inaczej bdzie interpretowana deklaracja varchar(127), ktra nie rezerwuje adnej
pamici, a jedynie sygnalizuje relacyjnemu systemowi zarzdzania baz danych moliwo
umieszczenia w przyszoci maksymalnie 127 znakw w danej strukturze. Jeli wic umiecisz 10 znakw w tak zadeklarowanej strukturze, zostanie wykorzystany wycznie obszar
pamici potrzebny do skadowania tych 10 znakw. Rwnie dobrze mgby w tej strukturze umieci 127 znakw, jednak wwczas zostanie zajty obszar potrzebny do przechowania 127 znakw.
Na tym etapie moe Ci si wydawa, e stosowanie znakowych typw danych staej dugoci w ogle nie jest uzasadnione. Czy nie mona by zawsze stosowa typu varchar? Dzieje
si tak z dwch powodw. Po pierwsze, wstawianie i aktualizacja danych znakowych staej
dugoci jest szybsze rnica nie jest wielka, ale w przypadku niektrych baz danych
aktualizacja moe dotyczy dziesitek tysicy rekordw na sekund, a wwczas nawet najmniejsze rnice mog decydowa o oglnej wydajnoci systemu. Oznacza to, e wszdzie
tam, gdzie przechowujesz niewielk liczb znakw i gdzie zasadnicze znaczenie ma szybko przetwarzania, dane znakowe staej dugoci speniaj swoj rol znacznie lepiej.
Po drugie, jeli przechowujesz tylko po kilka znakw, rnice w poziomach wykorzystania
pamici mona uzna za nieistotne.
Rozdzia 1.
41
Kolejna rnica dotyczy typw danych char-varchar, ktre wykorzystuj tylko po jednym
bajcie dla kadego znaku, i typw danych nchar-nvarchar, ktre wykorzystuj po dwa bajdy
dla kadego przechowywanego znaku. System 1-bajtowy wywodzi si z oryginalnego zbioru
znakw standardu ASCII (ang. American Standard Code for Information Interchange), ktry
zosta opracowany we wczesnych latach szedziesitych jako uniwersalny sposb reprezentowania znakw w systemach komputerowych. Komputery pracuj wycznie na bitach
i potrafi przetwarza tylko liczby binarne, zatem w takiej wanie postaci s przechowywane znaki (gdzie pojedyncza litera, cyfra lub znak interpunkcyjny jest reprezentowany
przez liczb z przedziau od 0 do 255). Przykadowo, litera A jest reprezentowana przez
warto numeryczn 65, litera B jest reprezentowana przez liczb 66 itd. O ile pula 255
liczb w zupenoci wystarczy do reprezentowania liter alfabetu jzyka angielskiego, liczb
i niektrych znakw interpunkcyjnych, naley pamita, e istnieje mnstwo innych znakw (szczeglnie tych stosowanych w obcych jzykach, take polskim), ktrych z oczywistych
wzgldw nie mona reprezentowa za pomoc przestarzaego standardu ASCII. Aby obej
ten problem, opracowany zosta zbir znakw Unicode. W standardzie Unicode do reprezentowania pojedynczego znaku wykorzystuje si dwa bajty, co cznie daje pul a 65 536
moliwych znakw.
Typy danych char i varchar wykorzystuj tradycyjny, jednobajtowy schemat reprezentowania danych zgodny ze standardem ASCII. Typy danych nchar i nvarchar obsuguj dwubajtowy zbir znakw Unicode. Decyzja o stosowaniu typw char-varchar lub nchar-nvarchar
powinna zalee wycznie od tego, czy chcesz, aby Twoja baza danych obsugiwaa jzyki
inne ni angielski. Niezalenie od wybranego przez Ciebie zbioru znakw technika wykorzystywania obu typw w kodzie jzyka SQL jest z grubsza taka sama, chyba e Twj system
bazy danych zawiera specjalnie zaprojektowane mechanizmy obsugi danych tekstowych
(inne dla kodowania ASCII, inne dla kodowania Unicode). Oczywist wad typw nchar
i nvarchar jest konieczno zajmowania dwukrotnie wikszego obszaru pamici do przechowywania tej samej liczby znakw (poniewa kady znak jest reprezentowany przez dwa
zamiast jednego bajta).
Zanim przejdziemy dalej, powiniene uzyska pewn wiedz na temat maksymalnych
liczb skadowania znakw. Przykadowo, systemy Microsoft Access i MySQL dopuszczaj
moliwo umieszczania w polu znakowym (tekstowym) najwyej 255 znakw. Aby obej
to ograniczenie, w systemie Microsoft Access naley uy typu danych memo, ktry moe
zawiera maksymalnie 65 535 znakw, czyli wystarczajco wiele dla wikszoci zastosowa. Jeli korzystasz z systemu MySQL i chcesz przechowywa wiksze iloci tekstu,
powiniene uy typu danych text, ktry take daje moliwo przechowywania 65 535
znakw. Ani typ memo, ani typ text nie wymagaj dodatkowego okrelania maksymalnej
liczby skadowanych znakw taki limit jest z gry ustalany przez sam system bazy
danych.
Dane numeryczne
Najprostszym typem danych numerycznych (zarwno z punktu widzenia ich rozumienia,
jak i interpretacji w samym systemie) s liczby cakowite, czyli liczby bez czci dziesitnej
(i punktu dziesitnego). Tego rodzaju liczby s szczeglnie przydatne w roli unikalnych identyfikatorw dla rekordw (wicej informacji na ten temat znajdziesz w dalszej czci tego
rozdziau, kiedy bdziesz tworzy przykadow baz danych z kluczem gwnym). Liczby
42
SQL. Od podstaw
zmiennoprzecinkowe s obcione bdami zaokrgle i z tego powodu nie powinny by
traktowane jako unikane (a przynajmniej nie powinny wystpowa w roli unikalnych identyfikatorw rekordw). Co wicej, operacje na liczbach cakowitych s mniej kosztowne z perspektywy relacyjnych systemw zarzdzania bazami danych, a mniejsze koszty oznaczaj
szybsz realizacj tych operacji. Oznacza to, e liczby cakowite zapewniaj wiksz efektywno wszdzie tam, gdzie stosowanie czci uamkowej nie jest konieczne. Przykadowo, cz
uamkowa jest niezbdna, jeli ktre z pl Twojej bazy danych reprezentuje wartoci pienine z uwzgldnieniem zotych i groszy.
W niniejszej ksice bd wykorzystywane dwa typy danych cakowitoliczbowych: int
i smallint. Rnica pomidzy t par jest bardzo prosta dotyczy maksymalnego rozmiaru
reprezentowanych przez nie liczb i, tym samym, iloci bajtw zajmowanych przez odpowiednie
pola w pamici. Liczby typu smallint musz nalee do przedziau od 32 768 do 32 767, natomiast liczby typu int musz nalee do przedziau od 2 147 483 648 do 2 147 483 647.
Ostatnie dwa typy numeryczne wymienione w tabeli mog dodatkowo reprezentowa czci
dziesitne liczb: s to real i decimal. Typ danych real umoliwia przechowywanie liczb
z przedziau od 3,40E+38 do 3,40E+38, cho w tym wzgldzie istniej pewne rnice pomidzy poszczeglnymi relacyjnymi systemami zarzdzania bazami danych. Warto zwrci
uwag na sam zapis 3,40E+38, ktry jest przykadem tzw. notacji naukowej. Znaczenie tak
zapisanej liczby jest rwnowane ze stwierdzeniem, e jest to liczba 3,4 pomnoona przez
liczb 10 podniesion do potgi 38. Przykadowo, liczb 539 000 000 w notacji naukowej
naleaoby zapisa jako 5,39E+8. Typ danych real jest przydatny wszdzie tam, gdzie trzeba
reprezentowa wielkie liczby i gdzie nie jest z gry znana ich precyzja. Jeli dana liczba
jest zbyt dua, by mona j byo precyzyjnie reprezentowa w ramach pola typu real, system bazy danych automatycznie konwertuje j na notacj naukow, jednoczenie obniajc
jej precyzj (dostosowujc do maksymalnego rozmiaru tego typu danych). real nie jest typem
danych, z ktrego bdziesz korzysta szczeglnie czsto.
Typ danych decimal o tyle przypomina opisany przed chwil typ real, e take umoliwia
przechowywanie liczb zmiennoprzecinkowych (w przeciwiestwie do typw int i smallint
reprezentujcych liczby cakowite). Liczba zmiennoprzecinkowa to taka, ktra zawiera cz
dziesitn (cz uamkow wystpujc za punktem dziesitnym) i ktrej punkt dziesitny
nie jest trwale przypisany do okrelonej pozycji (prawidowa jest zarwno liczba 123,445,
jak i liczba 4455,5). Liczby cakowite (ang. whole numbers, integers) nie mog zawiera czci
uamkowych, poniewa w ogle nie zawieraj punktu dziesitnego. Typ danych decimal
jest nie tylko bardziej precyzyjny (dokadny), ale te bardziej elastyczny od typu real. Zapewne zastanawiasz si, jak to jest moliwe, e liczby typu decimal s bardziej precyzyjne
od liczb typu real. Odpowied na to pytanie oczywicie musi by jednoznaczna poruszamy si przecie w wiecie matematyki, nie socjologii, nie ma wic miejsca na prne
debaty. Typ danych real moe co prawda zawiera wielkie liczby, ale poniewa wykorzystuje notacj naukow, nie ma gwarancji, e wszystkie cyfry rzeczywicie bd reprezentowane (jeli zostanie przekroczony okrelony rozmiar).
Aby nasze rozwaania byy bardziej zrozumiae, warto przeanalizowa odpowiedni przykad.
Jeli liczb 101 236,8375 sprbujesz umieci w polu typu real, relacyjny system zarzdzania
baz danych automatycznie zapisze liczb 101236,84. Dlaczego cyfry 7 i 5 znikny z koca tej liczby? W niektrych systemach RDBMS (np. SQL Server i DB2) liczby typu real
mog zawiera tylko po osiem cyfr. Przytoczona liczba skada si z dziesiciu cyfr, zatem
relacyjny system zarzdzania baz danych zaokrgla t liczb i odrzuca dwie ostatnie cyfry.
Rozdzia 1.
43
Typ danych decimal tym rni si od typu real, e przechowuje wszystkie cyfry, ktre zdoa
umieci w przydzielonym sobie obszarze pamici. Jeli umiecisz w polu typu decimal
liczb przekraczajc moliwoci tego typu, relacyjny system zarzdzania baz danych wygeneruje komunikat o bdzie przepenienia. Oznacza to, e liczby na lewo od punktu dziesitnego s zawsze prawidowe. Typ danych decimal zaokrgla jednak wszelkie cyfry na
prawo od znaku dziesitnego, jeli nie znajdzie wystarczajcej przestrzeni pamiciowej.
Elastyczno typu danych decimal ujawnia si w momencie, w ktrym okrelasz zarwno
liczb skadowanych cyfr, jak i liczb cyfr wystpujcych po prawej stronie znaku dziesitnego. Poniszy kod nakazuje relacyjnemu systemowi zarzdzania baz danych przydzia
(rezerwacj) pamici dla 38 cyfr, w tym dla 12 cyfr czci uamkowej:
decimal(38,12)
Oznacza to, e system RDBMS bdzie prawidowo reprezentowa liczb 101 249 986,8365,
mimo e do czci dziesitnej (ostatnich czterech cyfr) doda osiem zer dopeniajcych zadeklarowany i przydzielony obszar dwunastu cyfr.
Maksymalna liczba cyfr skadowanych w polach typu decimal w wikszoci relacyjnych
systemw zarzdzania bazami danych wynosi 38. Im wicej cyfr jest skadowanych, tym
wiksze s wymagania w zakresie zajmowanej przestrzeni pamiciowej. atwo zauway, e
liczba typu decimal(9,2) bdzie wymagaa 5 bajtw, natomiast liczba typu decimal(38,2)
zajmie a 17 bajtw!
Data i godzina
Godzina jest stosunkowo prosta w reprezentacji i obsudze. Jest skadowana w naturalnym
formacie godziny:minuty:sekundy. Przykadowo, godzina 15:56:22 moe by tumaczona
np. na 5:56 po poudniu (ang. P.M.) i 22 sekundy.
Wikszo relacyjnych systemw zarzdzania bazami danych stosuje zegar 24-godzinny,
zatem aby zapisa 5:36 po poudniu, naley uy wyraenia 17:36:00.
Niektre relacyjne systemy zarzdzania bazami danych nie oddzielaj daty od godziny zwykle cz je w taki sposb, aby godzina (w standardowym formacie godziny:minuty:sekundy)
wystpowaa po dacie. Przykadowo, w niektrych systemach mona spotka dat i godzin
zapisan w takiej formie: 1 Mar 2006 10:45:55.
O ile format godziny jest standardem w skali midzynarodowej, daty mog wystpowa
w wielu moliwych i bardzo zrnicowanych odmianach. Przykadowo, wszystkie ponisze
formaty s poprawne w Stanach Zjednoczonych lub w Europie:
Q
12 Mar 2006
12 March 2006
12/03/2006
03/12/2006
03-12-2006
44
SQL. Od podstaw
Wikszo relacyjnych systemw zarzdzania bazami danych obsuguje pewien wsplny zbir
formatw daty (zgodnych z przedstawionymi powyej przykadami). Najwikszym problemem jest interpretacja daty, w ktrej miesic okrelono w formie liczby, a nie nazwy
jak w przypadku 03/12/2006. Amerykanie zinterpretuj ten zapis jako 12 dzie marca 2006
roku, ale ju dla Europejczykw bdzie to 3 dzie grudnia 2006 roku ot, drobna rnica!
Jak si okazuje, daty nie s najwikszym rdem nieporozumie w wiecie baz danych!
Z jeszcze gorszym problemem mamy do czynienia w sytuacji, gdy relacyjny system zarzdzania baz danych z jednej strony zosta skonfigurowany do przetwarzania dat w formacie
amerykaskim, z drugiej strony uzyskuje dostp do informacji zawartych w bazie danych
wykorzystujcej format stosowany np. w Wielkiej Brytanii. Takie przypadki wcale nie s
rzadkie w firmach, ktre maj swoje centrale w Stanach Zjednoczonych i oddziay w rozsiane po caym wiecie.
Wszdzie tam, gdzie jest to moliwe, naley unika formatu liczbowego (np. 12/03/2006) i zamiast niego stosowa nazwy miesicy lub przynajmniej ich skrty (np. 12 mar 2006). Niestety, wiele relacyjnych systemw zarzdzania bazami danych zwraca daty wanie w formacie 12/03/2006, nawet jeli uytkownik wpisa w formularzu lub w kodzie jzyka SQL dat
jako 12 mar 2006. W takim przypadku naley si posuy specjalnymi poleceniami formatowania (patrz rozdzia 5.), ktre stanowi skuteczne obejcie tego problemu. Zawsze warto te
si upewni co do formatu stosowanego w wykorzystywanym przez nas serwerze RDBMS.
Po tym krtkim wprowadzeniu do typw danych, moemy przej do czego znacznie bardziej interesujcego tworzenia tabel!
Tworzenie tabeli
Do tworzenia tabel suy wyraenie CREATE TABLE jzyka SQL. Najprostszy sposb tworzenia
tabel wymaga podania ich nazw oraz zdefiniowania odpowiednich kolumn (wraz z typami
danych).
Wicej zaawansowanych opcji zwizanych z tabelami i ograniczeniami omwiono
w rozdziale 4.
Podstawow skadni wyraenia tworzcego tabel przedstawiono poniej:
Rozdzia 1.
45
CREATE TABLE jest sowem kluczowym wskazujcym systemowi bazy danych, co chcesz zrobi w tym przypadku chodzi oczywicie o utworzenie nowej tabeli. Bezporednio za tym
sowem kluczowym naley uy unikalnej nazwy lub identyfikatora nowej tabeli. Dalej
(w nawiasach klamrowych) powinna si znale lista definiujca poszczeglne kolumny tabeli
wraz z waciwymi typami danych. Skadnia wyraenia CREATE TABLE wyda Ci si prostsza,
jeli przeanalizujesz odpowiedni przykad.
Poniszy fragment kodu jzyka SQL tworzy tabel w oparciu o przedstawiony wczeniej
przykad rozkadu jazdy:
CREATE TABLE Rozkad_jazdy
(
miejsce_wyjazdu varchar(75),
miejsce_przyjazdu varchar(75),
godzina_wyjazdu time,
godzina_przyjazdu time
);
Microsoft SQL Server nie obsuguje typu danych time, zatem bdziesz musia zmieni ten
typ na datetime. Jeli uywasz systemu Oracle, bdziesz musia zmieni typ danych time
na date, poniewa typ date w tym systemie reprezentuje zarwno dat, jak i godzin.
Podczas analizy tego i wszystkich kolejnych przykadw prezentowanych w tej ksice
powiniene uruchomi odpowiednie narzdzie swojego relacyjnego systemu zarzdzania bazami danych, ktre umoliwi Ci napisanie i wykonanie prezentowanego kodu
SQL. Szczegy zwizane z instalacj tego typu narzdzi znajdziesz w dodatku B na
kocu ksiki.
Przeanalizujmy teraz ten kod wiersz po wierszu. W pierwszej kolejnoci naley okreli, e
tworzona tabela ma si nazywa Rozkad_jazdy:
CREATE TABLE Rozkad_jazdy
Nastpnie (w nawiasach klamrowych) okrelasz cztery pola skadajce si na kady z rekordw nowej tabeli. Definicja kadego pola wymaga zadeklarowania nazwy identyfikujcej
i typu danych:
(
miejsce_wyjazdu varchar(75),
miejsce_przyjazdu varchar(75),
godzina_wyjazdu time,
godzina_przyjazdu time
)
46
SQL. Od podstaw
uatwia odnajdywanie ewentualnych bdw w sytuacji, gdy wynik wykonywania zapyta
jest niezgodny z oczekiwaniami programisty.
Jak wida, tworzenie tabel jest bardzo proste. Tego typu wyraenia mog jednak by znacznie
bardziej skomplikowane (patrz rozdzia 4.). W nastpnym punkcie zajmiemy si technikami
modyfikowania struktury tabel. Przypumy, e chcesz doda nowe pole, usun pole istniejce lub dokona innej zmiany w strukturze utworzonej wczeniej tabeli. Jzyk SQL oferuje na szczcie bogaty zestaw konstrukcji skadniowych w tym zakresie w szczeglnoci wyraenie ALTER TABLE.
ALTER TABLE jest sowem kluczowym, ktre sygnalizuje systemowi bazy danych konieczno
wykonania okrelonej operacji. Po samym sowie kluczowym ALTER TABLE naley poda
naw modyfikowanej tabeli. I wreszcie przedstawione powyej wyraenie wskazuje, e chcesz
doda now kolumn (bezporednio po sowie kluczowym ADD podae jej nazw i typ
danych forma deklarowania dodawanej kolumny nie rni si od tej stosowanej podczas
tworzenia tabeli).
Aby usun istniejc kolumn, naley si posuy niemal identyczn skadni z t rnic,
e tym razem wskazujesz systemowi bazy danych na konieczno usunicia kolumny i podajesz wycznie jej nazw (bez typu reprezentowanych przez ni danych):
ALTER TABLE nazwa_tabeli
DROP COLUMN nazwa_pola
Myl, e kilka przykadw wystarczy do penego wyjanienia tego zagadnienia. Aby doda
do tabeli Rozkad_jazdy kolumn nazwan kursuje_w_weekendy typu char(1), naley uy nastpujcego wyraenia jzyka SQL:
ALTER TABLE Rozkad_jazdy
ADD kursuje_w_weekendy char(1)
Wyraenie DROP COLUMN nie jest obsugiwane w systemie DB2 firmy IBM.
Rozdzia 1.
47
Pamitaj, e podobnie jak w przypadku operacji usuwania tabeli take usuwanie kolumn najczciej oznacza trwae usunicie zawartych w nich danych. Wyraenia DROP COLUMN naley
wic uywa bardzo ostronie!
W kolejnym punkcie zostanie omwiona technika usuwania istniejcych tabel za pomoc
jzyka SQL.
48
SQL. Od podstaw
lekceway)! Powiniene raczej zada sobie (lub docelowemu odbiorcy bazy danych) pytanie o rodzaj skadowanych danych i mechanizmy korzystania z tak zapisanych informacji.
Przykadowo, wyobra sobie, e postanowie zaoy klub mionikw kina i e jako osoba
zafascynowana nowymi technologiami zdecydowae o zastosowaniu nowoczeniejszej formy
skadowania szczegowych danych o czonkach tego klubu ni sterta teczek w szufladzie!
Szybko doszede do przekonania, e prowadzenie takiego klubu bdzie znacznie prostsze,
jeli wykorzystasz baz danych. Na tym etapie powiniene si dobrze zastanowi, do czego
bdziesz uywa swojej bazy danych i jakie informacje powinny si w niej znale. W przypadku bazy danych o czonkach klubu naturalnym rozwizaniem bdzie przechowywanie
szczegowych informacji o mionikach filmw. By moe powiniene mie moliwo ledzenia popularnoci klubu przez rejestrowanie szczegowych danych o frekwencji na organizowanych spotkaniach. Na dobry pocztek powiniene zapisa list wszystkich informacji,
ktre w przyszoci bdziesz chcia przechowywa w swojej bazie danych.
Przypumy, e chcesz mie moliwo kontaktowania si z poszczeglnymi czonkami klubu
za porednictwem tradycyjnej poczty lub poczty elektronicznej. Zapewne chciaby te wysya im yczenia z okazji urodzin (jeli tak, bardzo dobrze to o Tobie wiadczy!). I wreszcie musisz mie moliwo sprawdzania, czy czonkowie klubu opacaj roczne skadki
powiniene wic wiedzie, kiedy poszczeglni czonkowie podpisali swoje deklaracje czonkowskie. Ponisza lista podsumowuje informacje, ktre chcesz skadowa w swojej bazie:
Q
Imi i nazwisko
Data urodzenia
Adres pocztowy
Celem organizowanych spotka jest ledzenie ich popularnoci w poszczeglnych miejscowociach oraz analiza zaangaowania poszczeglnych czonkw. Ponisza lista obejmuje
dane niezbdne do realizacji tych dwch celw:
Q
Data spotkania
Miejsce spotkania
Wiesz ju, jakiego rodzaju informacje chcesz przechowywa w swojej bazie danych, nastpnym krokiem jest logiczny podzia tych danych, ktry wskae waciw struktur tabel.
Rozdzia 1.
Q
Imi i nazwisko
Data urodzenia
Adres pocztowy
Data spotkania
Miejsce spotkania
49
Dla przykadowych danych opisujcych troje czonkw klubu i jedno spotkanie naleaoby
utworzy nastpujc tabel z trzema rekordami:
Data
urodzenia
Adres
Marcin
27 lutego
1972
Janina
12 grudnia
1967
Kasia
22 maja
1980
Imi
Data
przystpienia
Data
spotkania
Lokalizacja
marcin@cokolwiek.com
10 stycznia
2005
30 marca
2005
Grna Wilda,
Pozna
ul. Chopina 2,
Gliwice
Janina@serwer.net
12 stycznia
2005
30 marca
2005
Grna Wilda,
Pozna
kasia@mail.pl
23 stycznia
2005
30 marca
2005
Grna Wilda,
Pozna
Wyglda niele (przynajmniej jak na pocztek). Takie rozwizanie jest jednak dalekie od
ideau. W jaki sposb byyby reprezentowane informacje o wicej ni jednym spotkaniu?
Jedn z moliwoci jest po prostu tworzenie nowego rekordu dla kadego spotkania, czyli
czego podobnego do poniszej tabeli:
Data
urodzenia
Adres
Marcin
27 lutego
1972
Marcin
27 lutego
1972
Janina
Data
przystpienia
Data
spotkania
Lokalizacja
marcin@cokolwiek.com
10 stycznia
2005
30 marca
2005
Grna Wilda,
Pozna
marcin@cokolwiek.com
10 stycznia
2005
28
kwietnia
2005
Jeyce, Pozna
12 grudnia
1967
ul. Chopina 2,
Gliwice
Janina@serwer.net
12 stycznia
2005
30 marca
2005
Grna Wilda,
Pozna
Janina
12 grudnia
1967
ul. Chopina 2,
Gliwice
Janina@serwer.net
12 stycznia
2005
28
kwietnia
2005
Jeyce, Pozna
Kasia
22 maja
1980
kasia@mail.pl
23 stycznia
2005
30 marca
2005
Grna Wilda,
Pozna
Kasia
22 maja
1980
kasia@mail.pl
23 stycznia
2005
28
kwietnia
2005
Jeyce, Pozna
Imi
50
SQL. Od podstaw
Taka metoda reprezentowania danych o czonkach klubu i organizowanych spotkaniach co
prawda zdaje egzamin, ale jest nieefektywna i trudna w konserwacji (szczeglnie jeli liczba czonkw i spotka bdzie si zwikszaa).
W czym waciwie tkwi problem?
Po pierwsze, mamy tu do czynienia z niepotrzebnym powielaniem danych. Za kadym razem,
gdy bdziesz chcia umieci w tak zaprojektowanej tabeli informacje o kolejnym spotkaniu, bdziesz musia raz jeszcze powtrzy szczegowe dane o wszystkich czonkach klubu. Oznacza to, e Twoja baza danych bdzie si bardzo szybko rozrastaa. Co wicej, kada operacja aktualizacji danych bdzie wymagaa znacznych nakadw. Przykadowo, jeli
zmieni si adres zamieszkania Janiny, bdziesz musia zaktualizowa wszystkie powizane
z ni rekordy (zamiast jednego zaktualizujesz po jednym rekordzie dla kadego ze spotka). Kolejnym problemem bdzie obsuga operacji wydobycia danych o czonku klubu.
Wybr jednego z rekordw dotyczcych odpowiedniej osoby bdzie wyjtkowo trudny;
moesz przecie wydobywa potrzebne dane z wicej ni jednego rekordu.
Po ponownym przeanalizowaniu oryginalnej organizacji bazy danych zapewne dojdziesz do
wniosku, e naleaoby zagwarantowa moliwo skadowania szczegowych danych na
temat wicej ni jednego spotkania, zatem zamiast tworzy wicej ni po jednym rekordzie
dla poszczeglnych czonkw klubu powiniene utworzy now kolumn dla kadego spotkania takie rozwizanie wizaoby si z koniecznoci zdefiniowania w ramach jednej
tabeli nastpujcych pl:
Q
Imi i nazwisko
Data urodzenia
Adres pocztowy
Data spotkania 1
Miejsce spotkania 1
Data spotkania 2
Miejsce spotkania 2
Data spotkania 3
Miejsce spotkania 3
Taka organizacja kolumn przynajmniej w jakim stopniu ograniczy problem powielania danych, ale spowoduje te mniejsz elastyczno caej struktury. Przypumy, e chcesz przechowywa rekordy np. o ostatnich dziesiciu spotkaniach. Aby ten cel osign, bdziesz po-
Rozdzia 1.
51
trzebowa a 30 kolumn. Co wicej, za kadym razem, gdy bdziesz chcia doda informacje
o nowym spotkaniu, bdziesz musia ponownie zaprojektowa swoj baz danych (przebudowa jej struktur). Taka organizacja znacznie utrudnia pisanie wyrae jzyka SQL wydobywajcych informacje z Twojej bazy danych.
Najwyszy czas, aby podzieli dane na logiczne czci. W tym przypadku gromadzisz informacje o dwch rnych rodzajach obiektw czonkach klubu i ich uczestnictwie w zebraniach. Istnieje oczywista relacja pomidzy tymi obiektami. Bez czonkw nie byoby przecie mowy o klubowych spotkaniach! Nietrudno si wic domyli, e dane powinny zosta
podzielone pomidzy dwie tabele, z ktrych jedna bdzie zawieraa informacje o klubowiczach, a druga o ich spotkaniach.
W tabeli zawierajcej dane o czonkach klubu powinny si znale nastpujce informacje:
Q
Imi i nazwisko
Data urodzenia
Adres pocztowy
Imi i nazwisko
Data spotkania
Miejsce spotkania
Data urodzenia
Adres
Data przystpienia
Marcin
27 lutego 1972
marcin@cokolwiek.com
10 stycznia 2005
Janina
12 grudnia 1967
ul. Chopina 2,
Gliwice
Janina@serwer.net
12 stycznia 2005
Kasia
22 maja 1980
kasia@mail.pl
23 stycznia 2005
Data spotkania
Lokalizacja
Marcin
30 marca 2005
Marcin
28 kwietnia 2005
Jeyce, Pozna
52
SQL. Od podstaw
Imi
Data spotkania
Lokalizacja
Janina
30 marca 2005
Janina
28 kwietnia 2005
Jeyce, Pozna
Kasia
30 marca 2005
Kasia
28 kwietnia 2005
Jeyce, Pozna
Rozmiar danych. Wybierz taki typ danych, ktry zapewni moliwo skadowania
najwikszych przewidywanych wartoci. Przykadowo, jeli podejrzewasz, e w Twojej
bazie mog by reprezentowane osoby, ktrych imi i nazwisko osiga dugo
100 znakw, Twoje pole tekstowe musi obsugiwa tak dugo. Jeli definiujesz
dane numeryczne, upewnij si, e pole to bdzie mogo reprezentowa najwiksz
moliw liczb.
Rozdzia 1.
53
Oglnie, wybr typw danych w wielu sytuacjach wydaje si wrcz oczywisty. Przykadowo,
we wspominanej ju tabeli SzczegoloweDaneCzlonkow bazy danych klubu mionikw kina
dobr nazw i typw danych dla pl moe by nastpujcy:
Nazwa pola
Typ danych
Imie
nvarchar(75)
DataUrodzenia
date
Adres
nvarchar(200)
nvarchar(200)
DataPrzystapienia
date
Typ danych
Imie
nvarchar(75)
DataSpotkania
date
Lokalizacja
nvarchar(200)
UczestnictwoCzlonka
char(1)
Take tym razem wybr waciwych typw danych okaza si do prosty pola Imie i Lokalizacja zawieraj dane tekstowe, zatem zadeklarowano je jako pola typu znakowego (w tym
przypadku nvarchar). Pole DataSpotkania bdzie oczywicie reprezentowao dat, zatem
wybr typu date by zupenie naturalny. Pole UczestnictwoCzlonka jest o tyle nietypowe, e
w zaoeniu ma suy do reprezentowania ewentualnego uczestnictwa danego czonka klubu
w danym spotkaniu. Odpowiedni efekt osignito, stosujc pojedyncz liter T dla odpowiedzi
54
SQL. Od podstaw
tak oraz liter N dla odpowiedzi nie. W tym przypadku znakowy typ danych jest najlepszy,
poniewa planowane jest skadowanie w tym polu tylko jednej litery. Rozwizanie oparte na
typie char i okreleniu jednoznakowej dugoci pola zapewnia waciw efektywno.
Typ danych
IdentyfikatorCzlonka
integer
Imie
nvarchar(75)
DataUrodzenia
date
Adres
nvarchar(200)
nvarchar(200)
DataPrzystapienia
date
Rozdzia 1.
55
Zwr uwag na fakt, e kolumna IdentyfikatorCzlonka jest kluczem gwnym tej tabeli.
Tabela Frekwencja mogaby wwczas wyglda nastpujco:
Nazwa pola
Typ danych
DataSpotkania
date
Lokalizacja
nvarchar(200)
UczestnictwoCzlonka
char(1)
IdentyfikatorCzlonka
integer
Kolumna IdentyfikatorCzlonka peni funkcj klucza obcego tej tabeli. Klucz obcy zawiera
warto klucza gwnego innej tabeli, stanowi zatem jednoznaczne odwoanie (referencj) do
zewntrznej tabeli. W przypadku klubu zrzeszajcego kinomanw pole IdentyfikatorCzlonka
tabeli Frekwencja wskazuje na szczegowe informacje o odpowiednim czonku klubu (na
waciwy rekord w tabeli SzczegoloweDaneCzlonkow).
Masz ju klucz gwny dla tabeli SzczegoloweDaneCzlonkow, pole IdentyfikatorCzlonka,
ale co z tabel Frekwencja? Tabela Frekwencja ma ju swj unikalny identyfikator kombinacj pl DataSpotkania i IdentyfikatorCzlonka, poniewa jeden klubowicz nie moe
uczestniczy w tym samym spotkaniu wicej ni raz! Stosowanie kombinacji tych pl w roli
unikalnego identyfikatora jest wic cakowicie bezpieczne. Przedstawione rozwizanie jest
dobrym przykadem jeszcze jednej istotnej cechy kluczy gwnych, ktre nie musz si skada z jednej kolumny mog by poczeniem wikszej ich liczby (jak w przypadku tabeli
Frekwencja). Jeli zechcesz, moesz oczywicie utworzy unikalny identyfikator spotkania,
jednak w tym przypadku nie jest to konieczne, a zatem oznacza niepotrzebn strat przestrzeni pamiciowej. Argumentem przemawiajcym za stosowaniem takich sztucznych
identyfikatorw jest wysza szybko przeszukiwania danych, ale w wikszoci sytuacji takie
rozwizanie nie znajduje uzasadnienia.
Koncepcja klucza gwnego sprowadza si do koniecznoci stosowania kolumny zawierajcej
unikaln warto i odpowiedniego generowania tej wartoci. Wikszo relacyjnych systemw zarzdzania bazami danych oferuje jednak moliwo wskazywania kolumny penicej
t funkcje i automatycznie zarzdza zawartymi tam danymi. W szczeglnoci moesz stosowa
ograniczenia okrelajce, jakie dokadnie dane powinny si znale w tak zadeklarowanej
kolumnie. Przykadowo, odpowiednie ograniczenie moe zapobiega umieszczaniu tej samej
wartoci klucza obcego w dwch rekordach tabeli. Przecie celem stosowania kluczy gwnych jest wanie zapewnienie unikalnoci rekordw. W rozdziale 4. znajdziesz szczegowe
omwienie bardziej zaawansowanych i jednoczenie ciekawszych aspektw kluczy gwnych
oraz ogranicze, jednak wiedza nabyta przez Ciebie do tej pory w zupenoci wystarczy do
utworzenia penowartociowej bazy danych. Baza, ktr utworzysz w nastpnym podrozdziale, bdzie Ci suya przez wszystkie kolejne rozdziay tej ksiki.
56
SQL. Od podstaw
Typ danych
Uwagi
IdentyfikatorCzlonka
integer
Klucz gwny.
Imie
nvarchar(50)
Nazwisko
nvarchar(50)
DataUrodzenia
date
Rozdzia 1.
57
Nazwa pola
Typ danych
Uwagi
Ulica
nvarchar(100)
Miasto
nvarchar(75)
Wojewodztwo
nvarchar(75)
KodPocztowy
varchar(6)
varchar(200)
DataPrzystapienia
date
Zwr uwag na podzia pl nazwiska i adresu na mniejsze czci. Nazwisko (w oryginalnym projekcie z poprzedniego podrozdziau stosowalimy pole Imie) zostao podzielone na
pola Imie i Nazwisko, natomiast pole Adres podzielono na pola Ulica, Miasto, Wojewodztwo
i KodPocztowy. Podzia tych danych poprawia efektywno procesu wyszukiwania konkretnych danych. Przykadowo, gdyby chcia odszuka wszystkich klubowiczw zamieszkaych
w Poznaniu, wystarczy, e w swoim zapytaniu dodaby klauzul sprawdzajc warto pola
Miasto. Gdyby umieci ulic, miasto, wojewdztwo i kod pocztowy w jednym polu adresu,
wyszukiwanie czonkw klubu wedug miasta zamieszkania byoby znacznie trudniejsze.
Teraz powiniene przygotowa kod jzyka SQL, ktry utworzy powysz tabel. Jeli wolisz,
do tworzenia tabeli moesz uy konsoli zarzdzania swojego systemu RDBMS.
CREATE TABLE SzczegoloweDaneCzlonkow
(
IdentyfikatorCzlonka integer,
Imie nvarchar(50),
Nazwisko nvarchar(50),
DataUrodzenia date,
Ulica nvarchar(100),
Miasto nvarchar(75),
Wojewodztwo nvarchar(75),
KodPocztowy varchar(6),
Email varchar(200),
DataPrzystapienia date
);
58
SQL. Od podstaw
W zalenoci od wykorzystywanego przez Ciebie relacyjnego systemu zarzdzania bazami
danych by moe bdziesz zmuszony do zmiany niektrych typw danych (zgodnie z tym,
co napisano w poprzedniej tabeli). Jeli korzystasz z systemu IBM DB2, zamiast typu varchar powiniene stosowa typ vargraphic. Jeli natomiast jeste uytkownikiem systemu Microsoft SQL Server, zamiast typu date musisz zastosowa typ datetime. W systemach MySQL
i Microsoft Access nie ma typu nvarchar zamiast niego naley uywa typu varchar.
Kolejnym krokiem w procesie budowy bazy danych jest stworzenie tabeli Frekwencja, ktra
bdzie zawieraa nastpujce pola i typy danych:
Nazwa pola
Typ danych
Uwagi
DataSpotkania
date
Lokalizacja
nvarchar(200)
UczestnictwoCzlonka
char(1)
IdentyfikatorCzlonka
integer
Tabela Frekwencja nie zostaa zmieniona wzgldem oryginalnego projektu omwionego w poprzednim podrozdziale. Wyraenie jzyka SQL, ktre tworzy t tabel, powinno mie nastpujc posta:
CREATE TABLE Frekwencja
(
DataSpotkania date,
Lokalizacja nvarchar(200),
UczestnictwoCzlonka char(1),
IdentyfikatorCzlonka integer
);
Ktre z pl mogoby peni funkcj unikalnego klucza gwnego tej tabeli? Jeli przyjmiemy,
e w danej miejscowoci lub dzielnicy moe si odbywa tylko jedno spotkanie dziennie,
kombinacja tych dwch pl bdzie stanowia bezpieczny, unikalny identyfikator rekordu. Jeli
nie mona wykluczy dwch lub wikszej liczby spotka tego samego dnia w tym samym
miejscu, by moe powiniene zbada, czy takie spotkania odbywaj si o tej samej godzinie;
jeli nie, poza polem daty spotkania naleaoby uy dodatkowego pola godziny spotkania
tabela Frekwencja musiaaby zosta poszerzona o kolumn GodzinaSpotkania. Kombinacja pl
DataSpotkania, GodzinaSpotkania i Lokalizacja stanowiaby wwczas unikalny klucz gwny.
Alternatywnym rozwizaniem jest oczywicie utworzenie kolumny nazwanej IdentyfikatorSpotkania, ktra zawieraaby unikaln (w skali wszystkich spotka) liczb cakowit i peniaby funkcj klucza gwnego tabeli Frekwencja. Tego typu sytuacje z reguy wymagaj
konsultacji z przyszymi uytkownikami bazy danych i dokadnego okrelenia ich wymaga czsto si zdarza, e dopiero na podstawie tak uzyskanych informacji mona zaprojektowa baz danych i unikn koniecznoci jej pniejszego przebudowywania.
Rozdzia 1.
59
Najpierw utworzymy now tabel nazwan Filmy. Poniej przedstawiono informacje, ktre
bd skadowane w tej tabeli:
Q
Tytu filmu.
Rok premiery.
I wreszcie musisz przypisa kady z filmw do kategorii np. do horrorw, filmw akcji,
romansw itp.
Poniej przedstawiono szkic struktury przyszej tabeli Filmy:
Nazwa pola
Typ danych
Uwagi
IdentyfikatorFilmu
integer
Klucz gwny.
TytulFilmu
nvarchar(100)
RokPremiery
integer
StreszczenieFabuly
nvarchar(2000)
DostepnyNaDVD
char(1)
Ocena
integer
IdentyfikatorKategorii
integer
Klucz obcy
60
SQL. Od podstaw
jest ona wyznaczana na poziomie 65 536 znakw, zatem deklaracja StreszczenieFabuly memo
jest rwnowana deklaracji StreszczenieFabuly nvarchar(65536).
Drugim ciekawym skadnikiem tabeli Filmy jest pole IdentyfikatorKategorii, ktre peni funkcj klucza obcego. Oznacza to, e warto tego pola musi odpowiada wartoci pola klucza
gwnego innej tabeli i e pole to reprezentuje relacj pomidzy obiema tabelami. Tabel zawierajc klucz gwny, do ktrego odwouje si tabela Filmy, jest KategorieFilmow. Wspomnian tabel utworzymy za chwil najpierw przyjrzyj si poniszemu wyraeniu jzyka SQL, ktre tworzy tabel Filmy:
CREATE TABLE Filmy
(
IdentyfikatorFilmu integer,
TytulFilmu nvarchar(100),
RokPremiery integer,
StreszczenieFabuly nvarchar(2000),
DostepnyNaDVD char(1),
Ocena integer,
IdentyfikatorKategorii integer
);
Po utworzeniu tabeli Filmy moesz utworzy tabel kategorii filmw (nazwanej KategorieFilmow), ktra bdzie zawieraa nastpujce dane:
Nazwa pola
Typ danych
Uwagi
IdentyfikatorKategorii
integer
Klucz gwny.
Kategoria
nvarchar(100)
Tabela KategorieFilmow jest bardzo maa i prosta. Take tworzce t tabel wyraenie jzyka
SQL jest stosunkowo nieskomplikowane:
CREATE TABLE KategorieFilmow
(
IdentyfikatorKategorii integer,
Kategoria nvarchar(100)
);
Ostatni tworzon tabel nazwano UlubioneKategorie rekordy tej tabeli bd reprezentoway ulubione kategorie filmw poszczeglnych czonkw klubu.
Nazwa pola
Typ danych
Uwagi
IdentyfikatorKategorii
integer
Klucz obcy
IdentyfikatorCzlonka
integer
Klucz obcy
Rozdzia 1.
61
Jak wida, tabela UlubioneKategorie jest wyjtkowo prosta. Zarwno pole IdentyfikatorKategorii, jak i pole IdentyfikatorCzlonka s kluczami obcymi pierwsze wskazuje na
odpowiedni rekord tabeli KategorieFilmow, drugi na rekord tabeli SzczegoloweDaneCzlonkow. Kombinacja obu tych pl stanowi unikalny klucz gwny tabeli UlubioneKategorie.
Poniej przedstawiono wyraenie jzyka SQL, ktre tworzy t tabel:
CREATE TABLE UlubioneKategorie
(
IdentyfikatorKategorii integer,
IdentyfikatorCzlonka integer
);
Podsumowanie
Materia zawarty w tym rozdziale nie tylko wprowadzi Ci w wiat jzyka SQL i projektowania baz danych, ale te zademonstrowa technik pisania kodu jzyka SQL niezbdnego do tworzenia struktury bazy danych. Wiedza uzyskana podczas lektury tego rozdziau w zupenoci
wystarcza do samodzielnego eksperymentowania z prostymi projektami baz danych.
Z rozdziau dowiedziae si o nastpujcych faktach:
Q
Relacyjne bazy danych zawieraj tabele i pola oraz umoliwiaj definiowanie relacji
pomidzy danymi skadowanymi w rnych tabelach, a take mechanizmy zapewniania
spjnoci bazy danych podczas operacji dodawania nowych i modyfikowania
istniejcych informacji.
62
SQL. Od podstaw
Po zdobyciu niezbdnej wiedzy podstawowej przystpie do realizacji kilku zada praktycznych. W szczeglnoci, utworzye baz danych i nauczye si prostych konstrukcji jzyka
SQL w zakresie tworzenia tabel. Podczas pracy z jzykiem SQL poznae kilka istotnych
aspektw tego jzyka i samych baz danych:
Q
I wreszcie, na kocu tego rozdziau utworzye przykadow baz danych dla pozostaych rozdziaw tej ksiki, stosujc techniki i omwione wczeniej wyraenia jzyka SQL. Podczas
lektury kolejnego rozdziau nauczysz si dodawa, aktualizowa i usuwa dane za pomoc
odpowiednich polece jzyka SQL. Nie zapomnij tylko o starannym wykonaniu wicze!
wiczenia
1. Po pewnym czasie klub kinomanw liczy ju tylu czonkw, e spotkania odbywaj
si regularnie w rnych miastach Polski, co oznacza, e w tabeli Frekwencja nasila