Vous êtes sur la page 1sur 50

IDZ DO

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

ZAMW DRUKOWANY KATALOG

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

Dane i informacje to dzi najcenniejszy towar. Systemy zarzdzania bazami danych to


potne narzdzia, pozwalajce nie tylko na przechowywanie danych, ale take na ich
przetwarzanie, modyfikowanie i wydobywanie w oparciu o przerne kryteria. Podstaw
wszystkich operacji na danych zgromadzonych w bazach jest jzyk SQL narzdzie
suce do manipulowania zbiorami informacji. SQL, przyjty i zatwierdzony przez
midzynarodowe organizacje i komitety standaryzacyjne, jest wykorzystywany
w niemal wszystkich systemach zarzdzania bazami danych. Kady z producentw
dodaje do niego "wasne" elementy, ale rdze jzyka pozostaje taki sam niezalenie
od platformy.
Ksika SQL. Od podstaw to podrcznik jzyka SQL i omwienie zagadnie
zwizanych z projektowaniem baz danych przeznaczone dla osb wkraczajcych
dopiero w wiat baz danych. Przedstawia podstawowe wyraenia jzyka SQL,
suce do wprowadzania danych do bazy, wycigania ich oraz manipulowania nimi.
Czytajc t t ksik, dowiesz si, czym s zczenia i podzapytania, postaci normalne
baz danych oraz transakcje i perspektywy. Poznasz sposoby projektowania tabel,
zabezpieczania zgromadzonych w nich informacji oraz metody podnoszenia wydajnoci
i szybkoci dziaania baz danych.
Struktura relacyjnych baz danych
Wpisywanie danych do bazy
Wydobywanie i porzdkowanie danych
Normalizacja i postaci normalne
Projektowanie baz danych
Operacje matematyczne, grupujce i agregujce
Stosowanie zcze i podzapyta
Tworzenie i wykorzystywanie perspektyw
Mechanizmy transakcyjne
Podnoszenie wydajnoci bazy danych i optymalizowanie zapyta
Dziki tej ksice poznasz wszystko znajdziesz omwienie tego, co moe okaza si
potrzebne podczas projektowania i korzystania z baz danych.

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

Rozdzia 1. Wprowadzenie do jzyka SQL ............................................................................................... 21


Krtka historia baz danych ............................................................................................ 21
Identyfikacja baz danych .......................................................................................... 22
W jakich okolicznociach naley korzysta z baz danych ........................................ 24
Stosowane w tej ksice systemy zarzdzania bazami danych ............................... 26
Strukturalny jzyk zapyta (SQL) .................................................................................... 27
Wprowadzenie do zapyta jzyka SQL ....................................................................... 27
Zestawienie jzyka SQL z pozostaymi jzykami programowania .................................. 28
Standardy jzyka SQL .............................................................................................. 29
Tworzenie baz danych ................................................................................................... 30
Organizacja relacyjnych baz danych .......................................................................... 31
Skadnia jzyka SQL .......................................................................................... 33
Tworzenie bazy danych ....................................................................................... 35
Typy danych ...................................................................................................... 36
Tworzenie, modyfikowanie i usuwanie tabel .................................................................... 44
Tworzenie tabeli ..................................................................................................... 44
Modyfikowanie istniejcej tabeli ............................................................................... 46
Usuwanie istniejcej tabeli ...................................................................................... 47
Dobry projekt bazy danych ............................................................................................ 47
Gromadzenie i analiza rzeczywistych potrzeb zwizanych z danymi .............................. 48
Logiczny podzia danych .......................................................................................... 49
Dobr waciwych typw danych ............................................................................... 52
Stosowanie klucza gwnego ................................................................................... 54
Tworzenie przykadowej bazy danych .............................................................................. 56
Podsumowanie ............................................................................................................ 61
wiczenia .................................................................................................................... 62

Rozdzia 2. Wpisywanie informacji ........................................................................................................63


Wstawianie nowych danych ........................................................................................... 63
Wstawianie danych do bazy danych przykadu uycia ....................................................... 67
Aktualizowanie danych ................................................................................................. 68
Klauzula WHERE ..................................................................................................... 70

SQL. Od podstaw
Operatory logiczne AND i OR ............................................................................... 71
Usuwanie danych ......................................................................................................... 73
Podsumowanie ............................................................................................................ 74
wiczenia .................................................................................................................... 75

Rozdzia 3. Wydobywanie informacji .....................................................................................................77


Wyraenie SELECT ....................................................................................................... 77
Zwracanie tylko rnych wierszy ............................................................................... 79
Stosowanie aliasw ................................................................................................ 80
Filtrowanie danych wynikowych za pomoc klauzuli WHERE ........................................ 81
Jak to dziaa? .................................................................................................... 85
Operatory logiczne i kolejno operatorw ...................................................................... 86
Wprowadzenie do kolejnoci operatorw ................................................................... 87
Jak to dziaa? .................................................................................................... 90
Stosowanie operatorw logicznych ........................................................................... 91
Operator NOT .................................................................................................... 91
Operator BETWEEN ............................................................................................ 92
Jak to dziaa? .................................................................................................... 93
Operator LIKE .................................................................................................... 95
Jak to dziaa? .................................................................................................... 98
Operator IN ....................................................................................................... 99
Jak to dziaa? .................................................................................................. 100
Porzdkowanie danych wynikowych za pomoc klauzuli ORDER BY ................................. 101
Jak to dziaa? .................................................................................................. 106
czenie kolumn konkatenacja .......................................................................... 108
Microsoft SQL Server i Microsoft Access ........................................................... 109
Oracle i IBM DB2 ............................................................................................. 111
MySQL ............................................................................................................ 114
Wydobywanie danych z wielu tabel ............................................................................... 117
Stosowanie nawiasw wok zcze wewntrznych w systemie Microsoft Access ...... 128
Jzyk SQL i zbiory ................................................................................................. 130
Jak to dziaa? .................................................................................................. 137
Wprowadzenie do danych NULL ................................................................................... 141
Podsumowanie .......................................................................................................... 144
wiczenia .................................................................................................................. 145

Rozdzia 4. Zaawansowane projektowanie baz danych ...................................................................... 147


Normalizacja .............................................................................................................. 147
Pierwsza posta normalna ..................................................................................... 148
Druga posta normalna ......................................................................................... 150
Trzecia posta normalna ....................................................................................... 151
Zapewnianie poprawnoci danych za pomoc ogranicze .............................................. 154
Ograniczenie NOT NULL ......................................................................................... 155
Ograniczenie UNIQUE ............................................................................................ 157
Ograniczenie CHECK ............................................................................................. 161
Jak to dziaa? .................................................................................................. 162
Klucz gwny i ograniczenie PRIMARY KEY .............................................................. 164
Jak to dziaa? .................................................................................................. 166
Klucz obcy ............................................................................................................ 168
Jak to dziaa? .................................................................................................. 172
Przyspieszanie procesu generowania zbiorw wynikowych za pomoc indeksw .............. 173
Udoskonalanie projektu bazy danych Klub Filmowy .................................................. 177
Ponowna analiza struktury bazy danych Klub Filmowy ......................................... 177

Spis treci

Udoskonalanie mechanizmw weryfikowania poprawnoci danych


i poprawa efektywnoci ...................................................................................... 180
Wskazwki dotyczce projektowania lepszych baz danych ........................................ 188
Podsumowanie .......................................................................................................... 190
wiczenia .................................................................................................................. 190

Rozdzia 5. Przetwarzanie danych ....................................................................................................... 193


Arytmetyka jzyka SQL ............................................................................................... 193
Podstawowe operacje matematyczne ..................................................................... 194
Najczciej stosowane funkcje matematyczne ......................................................... 195
Funkcja ABS() .................................................................................................. 196
Funkcja POWER() ............................................................................................. 197
Funkcja SQRT() ................................................................................................ 198
Funkcja RAND() ............................................................................................... 199
Zaokrglanie liczb ................................................................................................. 200
Funkcja CEILING() ............................................................................................ 201
Funkcja FLOOR() .............................................................................................. 202
Funkcja ROUND() ............................................................................................. 203
Wprowadzenie do funkcji przetwarzajcych acuchy ..................................................... 205
Funkcja SUBSTRING() ............................................................................................ 206
Funkcje konwertujce wielko znakw ................................................................... 208
Funkcja REVERSE() ............................................................................................... 209
Funkcja TRIM() ...................................................................................................... 209
Funkcja LENGTH() ................................................................................................. 210
Funkcje SOUNDEX() i DIFFERENCE() ....................................................................... 213
Funkcje przetwarzajce daty .................................................................................. 216
Konwertowanie rnych typw danych .......................................................................... 217
Ponowna analiza wartoci NULL .................................................................................. 219
Wartoci NULL w wyraeniach matematycznych ....................................................... 219
Wartoci NULL w operacjach na acuchach ............................................................ 220
Funkcja COALESCE() ............................................................................................. 222
Stosowanie polece INSERT INTO w wyraeniach SELECT ............................................. 224
Podsumowanie .......................................................................................................... 226
wiczenia .................................................................................................................. 227

Rozdzia 6. Grupowanie i agregowanie danych .................................................................................. 229


Wyniki grupowania ..................................................................................................... 229
Podsumowywanie i agregowanie danych ...................................................................... 232
Zliczanie wierszy wynikowych ................................................................................. 232
Jak to dziaa? .................................................................................................. 236
Sumowanie wynikw ............................................................................................. 237
Jak to dziaa? .................................................................................................. 238
Urednianie wynikw ............................................................................................. 239
Jak to dziaa? .................................................................................................. 240
Szukanie wartoci maksymalnych i minimalnych w danych wynikowych ..................... 241
Jak to dziaa? .................................................................................................. 243
Stosowanie wyrae GROUP BY cznie z klauzul HAVING ............................................ 244
Jak to dziaa? .................................................................................................. 245
Podsumowanie .......................................................................................................... 247
wiczenia .................................................................................................................. 247

Rozdzia 7. Wydobywanie danych z rnych tabel ............................................................................. 249


Jeszcze raz o zczeniach ........................................................................................... 249

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

Rozdzia 8. Zapytania w zapytaniach ................................................................................................... 279


Terminologia zwizana z podzapytaniami ...................................................................... 279
Podzapytania na licie kolumn wyraenia SELECT ......................................................... 280
Podzapytanie w klauzuli WHERE .................................................................................. 285
Operatory w podzapytaniach ....................................................................................... 287
Przypomnienie operatora IN ................................................................................... 288
Stosowanie operatorw ANY, SOME i ALL ............................................................... 291
Operatory ANY i SOME ..................................................................................... 291
Operator ALL ................................................................................................... 293
Stosowanie operatora EXISTS ................................................................................ 295
Jak to dziaa? .................................................................................................. 298
Stosowanie klauzuli HAVING z podzapytaniami ........................................................ 299
Podzapytania skorelowane .......................................................................................... 300
Podzapytania stosowane w innych wyraeniach ............................................................ 302
Stosowanie podzapyta w wyraeniach INSERT ....................................................... 302
Jak to dziaa? .................................................................................................. 305
Stosowanie podzapyta w wyraeniach UPDATE ...................................................... 305
Stosowanie podzapyta w wyraeniach DELETE FROM ............................................. 307
Podsumowanie .......................................................................................................... 309
wiczenia .................................................................................................................. 310

Rozdzia 9. Zapytania zaawansowane ................................................................................................... 311


Aktualizowanie bazy danych ........................................................................................ 311
Procedura postpowania z trudnymi zapytaniami .......................................................... 318
Rb co chcesz, rb co Ci si ywnie podoba ........................................................... 319
Wybr listy kolumn wyraenia SELECT ............................................................... 320
Tworzenie klauzuli FROM .................................................................................. 320
Jak to dziaa? .................................................................................................. 327
Najwaniejsze wskazwki w zakresie tworzenia efektywnych zapyta .............................. 334
Podsumowanie .......................................................................................................... 336
wiczenia .................................................................................................................. 337

Rozdzia 10. Perspektywy .................................................................................................................... 339


Wprowadzenie do perspektyw ..................................................................................... 339
Tworzenie perspektyw ........................................................................................... 341
Jak to dziaa? .................................................................................................. 342
Typy perspektyw ................................................................................................... 342
Perspektywy tabel zczonych ........................................................................... 343
Perspektywa bazowa ........................................................................................ 343
Perspektywy wierszowe .................................................................................... 345

Spis treci

Perspektywy kolumnowe .................................................................................. 346


Filtrowane perspektywy okien ........................................................................... 346
Perspektywy podsumowa ................................................................................ 347
Aktualizowanie perspektyw .................................................................................... 348
Ograniczenia dotyczce aktualizowania perspektyw ............................................ 349
Sowo kluczowe CHECK OPTION ........................................................................ 349
Usuwanie perspektyw ........................................................................................... 352
Podsumowanie .......................................................................................................... 353
wiczenia .................................................................................................................. 354

Rozdzia 11. Transakcje ........................................................................................................................ 355


Wprowadzenie do transakcji ........................................................................................ 356
Przykadowe dane ................................................................................................. 357
Jak to dziaa? .................................................................................................. 360
Model ANSI .......................................................................................................... 361
COMMIT ......................................................................................................... 361
ROLLBACK ...................................................................................................... 362
Transact-SQL ........................................................................................................ 364
BEGIN TRANSACTION ....................................................................................... 364
COMMIT TRANSACTION .................................................................................... 364
SAVE TRANSACTION ........................................................................................ 365
ROLLBACK TRANSACTION ................................................................................ 365
Dzienniki transakcji .................................................................................................... 367
Blokady ..................................................................................................................... 369
Ziarnisto blokowania .......................................................................................... 370
Baza danych ................................................................................................... 370
Tabela ............................................................................................................ 370
Strona ............................................................................................................ 370
Wiersz ............................................................................................................ 371
Kolumna ......................................................................................................... 371
Poziomy blokad .................................................................................................... 371
Blokada dzielona ............................................................................................. 371
Blokada wyczna ............................................................................................ 372
Blokada wzajemna (zakleszczenie) .................................................................... 372
Ustawianie parametrw blokad .............................................................................. 373
Rozmiar blokady .............................................................................................. 374
Liczba blokad .................................................................................................. 374
Rozszerzanie blokad ........................................................................................ 374
Limit czasu ..................................................................................................... 374
Poziomy izolacji .......................................................................................................... 375
SET TRANSACTION ................................................................................................ 376
SERIALIZABLE ...................................................................................................... 376
REPEATABLE READ ............................................................................................... 377
READ COMMITTED ................................................................................................ 377
READ UNCOMMITTED ............................................................................................ 378
Zarzdzanie wersjami ............................................................................................ 378
Przykadowe problemy ................................................................................................ 379
Utracona aktualizacja ............................................................................................ 379
Niezatwierdzone dane ........................................................................................... 380
Niespjne dane .................................................................................................... 380
Wstawianie widm .................................................................................................. 381
Ponowna analiza przykadowego kodu .......................................................................... 382
Jak to dziaa? .................................................................................................. 384
Podsumowanie .......................................................................................................... 385

10

SQL. Od podstaw
wiczenia .................................................................................................................. 386

Rozdzia 12. Bezpieczestwo w jzyku SQL ......................................................................................... 387


Zagadnienia zwizane z bezpieczestwem .................................................................... 388
Identyfikatory uytkownikw ................................................................................... 389
Tworzenie identyfikatorw uytkownikw ............................................................ 391
Modyfikowanie danych uytkownika ................................................................... 391
Usuwanie kont uytkownikw ............................................................................ 392
Jak to dziaa? .................................................................................................. 394
Identyfikatory grup (role) ........................................................................................ 394
Jak to dziaa? .................................................................................................. 396
Obiekty ................................................................................................................ 397
Uprawnienia ......................................................................................................... 398
Rozszerzone uprawnienia ................................................................................. 398
Uprawnienie USAGE ......................................................................................... 399
Wasno ........................................................................................................ 400
Perspektywy i bezpieczestwo ............................................................................... 400
Perspektywy pionowe i poziome ........................................................................ 400
Perspektywy grupowane ................................................................................... 403
Ograniczenia zwizane z perspektywami ............................................................ 404
Przyznawanie uprawnie ........................................................................................ 404
Tabele i perspektywy ....................................................................................... 404
Jak to dziaa? .................................................................................................. 405
Kolumny ......................................................................................................... 406
Klauzula GRANT OPTION .................................................................................. 406
Wycofywanie uprawnie ......................................................................................... 408
Wyraenie REVOKE .......................................................................................... 408
Wycofywanie uprawnie przekazywanych dalej przez samych uprawnionych .......... 409
Opcje CASCADE i RESTRICT ............................................................................. 411
Podsumowanie .......................................................................................................... 412
wiczenia .................................................................................................................. 413

Rozdzia 13. Dostrajanie bazy danych .................................................................................................. 415


Dostrajanie sprztu .................................................................................................... 416
Stacje robocze ...................................................................................................... 417
Pliki baz danych .................................................................................................... 417
Procesory ............................................................................................................. 418
Sieci gigahercowe oraz sieci podzielone na segmenty .............................................. 419
Pami podrczna ................................................................................................ 419
Pami podrczna procesora ............................................................................ 420
Pami podrczna dysku twardego .................................................................... 420
Pami podrczna bazy danych ......................................................................... 421
Dostrajanie wyrae jzyka SQL .................................................................................. 423
Na czym waciwie polega dostrajanie wyrae jzyka SQL? ..................................... 424
Po co w ogle to robi? ......................................................................................... 424
Jak to robi? ........................................................................................................ 425
Czym s indeksy? ............................................................................................ 425
Jak to dziaa? .................................................................................................. 429
Indeksy kiedy pomagaj, kiedy szkodz, a kiedy nie maj adnego znaczenia? .... 429
Skanowanie tabel co to takiego? .................................................................. 431
Kiedy skanowanie tabel pomaga, kiedy szkodzi,
a kiedy nie ma adnego znaczenia? ................................................................ 432
Wskazwki dotyczce dostrajania baz danych ............................................................... 432
Podsumowanie .......................................................................................................... 434

Spis treci

11

wiczenia .................................................................................................................. 435

Dodatek A Rozwizania wicze .......................................................................................................... 437


Dodatek B Konfigurowanie i stosowanie piciu systemw baz danych ............................................ 463
Dodatek C Dane pocztkowe ................................................................................................................. 519
Skorowidz .............................................................................................................................................. 541

Wprowadzenie do jzyka SQL


Na dobry pocztek zastanowimy si, czym w ogle s bazy danych oraz kiedy i dlaczego
naley z nich korzysta. W dalszej czci rozdziau przejdziemy do omawiania strukturalnego
jzyka zapyta (SQL) i przyjrzymy si jego zwizkom z bazami danych oraz technikom wykorzystywania w praktycznych zastosowaniach. Po poznaniu podstaw i teoretycznych moliwoci jzyka SQL dowiesz si, jak mona za jego pomoc stworzy baz danych. Niniejszy
rozdzia przeprowadzi Ci te przez proces budowania struktury przykadowej bazy danych,
ktra bdzie wykorzystywana w kolejnych rozdziaach tej ksiki.
Po przeczytaniu tego rozdziau powiniene nie tylko rozumie, jak to si dzieje, e bazy
danych umoliwiaj efektywne organizowanie i wyszukiwanie potrzebnych informacji, ale te
wiedzie, jak tworzy w peni funkcjonalne bazy danych (gotowe do przyjmowania i skadowania nowych danych). Zanim jednak zagbisz si w pisanie kolejnych wierszy kodu jzyka
SQL, powiniene uzyska niezbdne podstawy teoretyczne.

Krtka historia baz danych


Bazy danych we wspczesnej formie istniej od lat szedziesitych s efektem bada
midzy innymi firmy IBM. Wysiki laboratoriw badawczych koncentroway si wok
automatyzacji typowych zada biurowych, w szczeglnoci zada skadowania i indeksowania danych, ktre wczeniej wymagay pracy ludzkich rk i jako takie byy bardzo czasochonne. Z czasem koszt mocy obliczeniowej i pamici znacznie si obniy, co pozwolio
na du popularyzacj komputerw w obszarze skadowania i indeksowania danych. Prekursorem zastosowa baz danych by Charles W. Bachman, ktry w roku 1973 otrzyma Nagrod
Turinga za swoje pionierskie dokonania w dziedzinie technologii baz danych. W roku 1970
Ted Codd, naukowiec zatrudniony w laboratoriach firmy IBM, opublikowa pierwszy artyku powicony relacyjnym bazom danych.

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.

Identyfikacja baz danych


Zastanawiasz si pewnie, czym tak naprawd jest baza danych.
Darmowy internetowy sownik techniki komputerowej (Free On-Line Dictionary of Computing patrz strona internetowa http://foldoc.doc.ic.ac.uk) definiuje baz danych jako jeden lub wiele strukturalnych zbiorw trwaych danych, zwykle zwizanych z oprogramowaniem umoliwiajcym aktualizowanie i wykonywanie zapyta na tych danych. Prosta baza
danych moe mie posta pojedynczego pliku obejmujcego wiele rekordw, z ktrych kady
zawiera ten sam zbir pl (gdzie kade pole ma ustalon z gry, sta szeroko)..
Sprbujmy rozbi t definicj na mniejsze, bardziej zrozumiae skadniki; po pierwsze, zgodnie z zacytowanym opisem, baza danych skada si ze strukturalnych zbiorw danych, co
oznacza, e zawiera kolekcje danych. Przykadowo, baza danych moe zawiera szczegowe
informacje na temat osigni wuja Bronka na polu golfowym lub dane na temat wszystkich
ksiek w jakiej bibliotece. Najprawdopodobniej mieszanie tych danych ze sob nie byoby
dla Ciebie korzystne; innymi sowy, zapewne nie chciaby szuka informacji o interesujcej
Ci ksice wrd niezwizanych z nimi danych o wynikach pojedynkw golfowych. Krtko
mwic, bazy danych uatwiaj organizowanie danych. Bazy danych przechowuj swoje kolekcje danych w tabelach (pojcie tabeli wyjani bardziej szczegowo w rozdziale 2.).
Przytoczona definicja mwi te, e bazy danych s zwykle zwizane z oprogramowaniem
umoliwiajcym aktualizowanie i wykonywanie zapyta na danych. Do przykadw oprogramowania baz danych, ktre znajduj zastosowanie w wiecie rzeczywistym, naley Access
firmy Microsoft, system 10g firmy Oracle, DB2 firmy IBM, MySQL firmy MySQL AB oraz
SQL Server 2000 firmy Microsoft. Wymienione programy czsto s nazywane bazami danych,
cho tak naprawd s systemami zarzdzania bazami danych (ang. Database Management
System DBMS). Baza danych to zbiory (kolekcje) wzajemnie powizanych danych zgrupowane w jednym bycie. Przykadowo, mgby stworzy baz danych w programie Access,
nazwa j MojaBazaDanych, doczy do nowej bazy rozmaite kolekcje danych i zarzdza
caoci za pomoc oprogramowania Microsoft Access.
I wreszcie przedstawiona definicja stwierdza, e (tak jak we wspomnianym przykadzie bazy
danych Access) prosta baza danych moe mie posta jednego pliku z wieloma rekordami,

Rozdzia 1.

Wprowadzenie do jzyka SQL

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.

Wikszo wspczesnych systemw zarzdzania bazami danych jest relacyjna mwi


si nawet o relacyjnych systemach zarzdzania bazami danych (ang. Relational Database Management System RDBMS). Tego typu systemy wyrniaj si atwoci
i efektywnoci skadowania danych i generowania danych wynikw. Umoliwiaj
generowanie odpowiedzi na rozmaite zapytania, wcznie z zapytaniami, ktrych obsuga
nigdy nie bya brana pod uwag przez programist bazy danych.

24

SQL. Od podstaw

W jakich okolicznociach naley korzysta z baz danych


Skoro istnieje mnstwo alternatywnych sposobw przechowywania danych, po co w ogle
robi sobie kopot i tworzy baz danych? Jakie s zalety takiego rozwizania?
Podstawow zalet baz danych jest szybkie i efektywne wydobywanie (wyszukiwanie) danych.
Baza danych uatwia te logiczne organizowanie danych. Systemy zarzdzania bazami danych
z reguy s przystosowane do byskawicznego wyszukiwania potrzebnych danych w sposb
odpowiadajcy Twoim oczekiwaniom. Wydobywanie danych z bazy danych jest nazywane
wykonywaniem zapyta. Czsto bdziesz te mia do czynienia z pojciem zapytanie jzyka
SQL (lup po prostu zapytanie SQL), ktre w najwikszym uproszczeniu oznacza dowolny
kod jzyka SQL majcy na celu wydobywanie informacji zapisanych w bazie danych. Problematyka zapyta zostanie omwiona bardziej szczegowo w dalszej czci tego rozdziau.
Relacyjne bazy danych maj jeszcze jedn istotn zalet umoliwiaj definiowanie relacji
czcych poszczeglne dane (jak choby w przypadku wspominanej bazy danych o sprzeday
samochodw). Jeli przechowujesz szczegowe dane o sprzeday i informacje o sprzedawcach
w tak powizanych bazach danych, znalezienie odpowiedzi na pytanie Ile samochodw
sprzeda X w styczniu? staje si bardzo proste. Gdyby jednak upchn wszystkie te informacje
w jednym wielkim pliku tekstowym, znalezienie odpowiedzi na to pytanie (wykonanie takiego zapytania) byoby niezwykle trudne i czasochonne.
Bazy danych umoliwiaj te definiowanie regu zapewniajcych zachowanie spjnoci danych po ich dodawaniu, aktualizowaniu i usuwaniu. Wyobra sobie raz jeszcze salon samochodowy z dwoma sprzedawcami o identycznym imieniu i nazwisku (np. Jan Nowak). Mona
tak zaprojektowa baz danych, aby kady sprzedawca mia przypisany unikalny identyfikator (w ten sposb unikniemy sytuacji, w ktrej obaj Janowie bd myleni); w przeciwnym przypadku jednoznaczne okrelenie, kto sprzeda poszczeglne samochody, byoby po
prostu niemoliwe. Pozostae systemy skadowania danych, w tym pliki tekstowe i arkusze
kalkulacyjne, nie udostpniaj tego typu mechanizmw i zwykle dopuszczaj do wprowadzania do swoich struktur nawet najbardziej dziwacznych danych. W dalszych rozdziaach zostan
przedstawione techniki definiowania take innych regu ograniczajcych ryzyko naruszenia spjnoci danych. Przykadowo, w bazie danych moesz stworzy regu, zgodnie z ktr numer
PESEL pracownika bdzie musia spenia warunek unikalnoci, lub jeli zostanie sprzedany
jaki samochd i odpowiednia tabela bdzie wskazywaa, e sprzeday dokona pracownik
z identyfikatorem 123, moesz wprowadzi mechanizm sprawdzajcy, czy w jednej z tabel
bazy danych znajduj si wszystkie wymagane informacje na temat tego pracownika.
Waciwie zaprojektowana i skonfigurowana baza danych minimalizuje nadmiarowo danych.
Wrmy raz jeszcze do przykadu salonu samochodowego wszystkie szczegowe informacje na temat sprzedawcy mog by skadowane w jednym miejscu bazy danych, a do jego
identyfikacji mona uywa unikalnego identyfikatora. Kiedy wprowadzisz inne dane zwizane z konkretnym sprzedawc (np. o sprzedanych przez niego samochodach), bdziesz
mg wykorzysta ten unikalny identyfikator do przeszukiwania tych danych. Taki unikalny
identyfikator czsto ma posta liczby, ktrej przechowywanie wymaga znacznie mniej przestrzeni ni odpowiednie imi i nazwisko.
Baza danych przechowuje surowe (nieprzetworzone) dane same fakty przy braku inteligentnych mechanizmw. Baza danych o sprzedanych samochodach moe zawiera mark,

Rozdzia 1.

Wprowadzenie do jzyka SQL

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.

Stosowane w tej ksice systemy zarzdzania bazami danych


Bazy danych doskonale nadaj si do przechowywania informacji, systemy zarzdzania bazami danych zapewniaj mechanizmy przeszukiwania tych informacji, a doczane oprogramowanie zwykle umoliwia te przegldanie danych. Jednak jak mona korzysta z tak reprezentowanych danych poza oprogramowaniem systemu zarzdzania baz danych? System
operacyjny, niezalenie od tego, czy jest to Windows, UNIX, Linux czy Macintosh, oferuje
rozmaite sposoby zagldania do systemu zarzdzania baz danych i wydobywania zapisanych
tam informacji. Jeli jednak chcesz udostpnia te dane uytkownikom zewntrznym, musisz
umieci odpowiedni kod w autonomicznej aplikacji (uruchamianej na komputerze tego uytkownika) lub skonstruowa odpowiedni stron internetow (otwieran w oknie przegldarki
internetowej uytkownika). Nie jeste ograniczony do adnego konkretnego jzyka programowania (tak naprawd jedynym wymaganiem jest moliwo czenia wyrae wybranego
jzyka z oprogramowaniem systemu zarzdzania baz danych).

Rozdzia 1.

Wprowadzenie do jzyka SQL

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.

Strukturalny jzyk zapyta (SQL)


Pierwszym pytaniem, na jakie naley odpowiedzie, brzmi: Czym waciwie jest jzyk SQL
i jak mona z niego korzysta podczas pracy z baz danych?. SQL peni trzy gwne funkcje:
Q

tworzenia bazy danych i definiowania jej struktury,

wykonywania na bazie danych zapyta w celu uzyskania danych niezbdnych


do wygenerowania odpowiedzi,

kontrolowania bezpieczestwa bazy danych.

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).

Wprowadzenie do zapyta jzyka SQL


Zapytania SQL s najbardziej popularnym zastosowaniem tego jzyka. Za obsug zapyta
i manipulowanie danymi odpowiada specjalny podjzyk jzyka SQL nazywany jzykiem manipulacji danymi (ang. Data Manipulation Language DML). Jzyk SQL umoliwia przekazywanie zapyta (czyli tak naprawd pyta) do bazy danych; baza danych generuje wwczas
zbir danych, ktry stanowi odpowied na otrzymane zapytanie. Przykadowo, w przypadku
bazy danych zawierajcej szczegowe informacje na temat sprzedawcw, transakcji sprzeday samochodw, typw sprzedawanych aut itd. moe zaistnie konieczno sprawdzenia,

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.

Zestawienie jzyka SQL z pozostaymi jzykami programowania


Teraz, kiedy ju wiesz, do czego mona uy jzyka SQL, moesz ten jzyk porwna z innymi popularnymi jzykami programowania. Trzeba przyzna, e jzyk SQL nie ma wiele
wsplnego z takimi jzykami proceduralnymi jak C++, Visual Basic, Pascal czy innymi jzykami programowania trzeciej generacji, ktre umoliwiaj programicie pisanie wyrae
krok po kroku i okrelanie w ten sposb, co dokadnie naley robi, aby osign okrelony
cel. Wrmy do przykadu sprzeday samochodw Twoim celem moe by wyselekcjonowanie wszystkich informacji na temat transakcji dokonanych w gliwickim salonie firmy
w lipcu. W najwikszym uproszczeniu mona przyj, e Twj jzyk proceduralny musiaby
postpowa wedug nastpujcych instrukcji:
1. Wczytaj dane o sprzeday do pamici operacyjnej komputera.
2. Wydobd pojedyncze elementy danych z caego zbioru informacji o sprzeday.
3. Sprawd, czy kady z tych elementw dotyczy lipca i salonu w Gliwicach.
4. Jeli tak, odpowiednio oznacz ten element.

Rozdzia 1.

Wprowadzenie do jzyka SQL

29

5. Przejd do nastpnego elementu danych i kontynuuj ten proces a wszystkie

elementy zostan sprawdzone.


6. Jeszcze raz przejrzyj w ptli cay zbir danych wynikowych i wywietl elementy

zgodne z okrelonym warunkiem.


SQL jest jednak jzykiem deklaratywnym, co oznacza, e zamiast okrela wprost, co naley
zrobi, aby otrzyma interesujcy Ci wynik, okrelasz tylko, jaki chcesz uzyska wynik, a za
dobr dziaa niezbdnych do wygenerowania oczekiwanych przez Ciebie wynikw odpowiada sam jzyk. Jeli w przypadku bazy danych reprezentujcej sprzeda samochodw uyjesz jzyka SQL, bdziesz tylko musia okreli interesujcy Ci rezultat, czyli zastosowa
wyraenie podobne do poniszego:
SELECT wszystkie dane z tabeli sprzeday WHERE transakcje odbyway si w lipcu w salonie
mieszczcym si w Gliwicach.

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";

Znak gwiazdki oznacza, e naley zwrci dane ze wszystkich pl danego rekordu.


Znacznie wicej informacji na temat wyraenia SELECT jzyka SQL znajdziesz w rozdziale 3.

Standardy jzyka SQL


Podobnie jak w przypadku samych baz danych take oryginalna wersja jzyka SQL powstaa w duej mierze dziki staraniom inynierw firmy IBM. Wielu innych producentw
wykorzystao jednak standard tej firmy do opracowania wasnych wersji jzyka zapyta. Istnienie tak wielu rnych dialektw jzyka SQL z punktu widzenia programisty stanowi niemay
problem, mimo e w roku 1986 Amerykaski Narodowy Instytut Normalizacji, a w roku
1987 Midzynarodowa Organizacja Normalizacyjna oficjalnie przyjy standard tego jzyka.
Ten krok pomg co prawda w minimalizowaniu rnic pomidzy poszczeglnymi dialektami jzyka SQL, jednak nadal istniej pewne rnice.
W poniszej tabeli zawarto krtkie podsumowanie rozmaitych standardw i ich rozszerze.
Materia prezentowany w naszej ksice koncentruje si na standardach SQL-92, SQL-99
i SQL-2003, poniewa zdecydowana wikszo wyspecyfikowanych w nich rozwiza zostaa zaimplementowana w wikszoci wspczesnych relacyjnych systemw zarzdzania
bazami danych (RDBMS). Prezentowane przykady dziaaj w wikszoci tych systemw
(cho czsto wymagaj nieznacznych modyfikacji). Zdarza si jednak, e rnice pomidzy
technikami realizacji okrelonych zada w rnych relacyjnych systemach zarzdzania bazami
danych uniemoliwiaj wykonywanie standardowego kodu bez bardzo istotnych zmian
tego typu przypadki wystpuj w tej ksice bardzo rzadko i s odpowiednio oznaczane.

30

SQL. Od podstaw
Rok

Nazwa

Alternatywna nazwa

Zmiany

1986

SQL-86

SQL-87
(data akceptacji przez ISO)

Pierwsza publikacja standardu organizacji


ANSI i ISO

1989

SQL-89

1992

SQL-92

SQL2

Zasadnicze zmiany wzgldem oryginalnego


standardu (SQL2 wci pozostaje najbardziej
popularnym standardem)

1999

SQL-99

SQL3

Aktualizuje standard z roku 1992 przez dodanie


nowych sposobw selekcji danych, nowych
regu w zakresie integralnoci danych i pewnych
elementw struktury obiektowej

2003

SQL2003

Nieznaczne udoskonalenia oryginalnej wersji

Wprowadza obsug formatu XML i pl


z automatycznie generowanymi wartociami

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.

Tworzenie baz danych


Do tej pory zajmowalimy si niemal wycznie tym, czym jest i kiedy naley uywa bazy
danych. Teraz przyjrzymy si dokadniej skadnikom bazy danych, jej strukturze oraz zwizan z tym terminologi. Na kocu przejdziemy od teorii do praktyki utworzysz swoj
pierwsz przykadow baz danych.
Skoro dysponujesz ju podstawow wiedz, czas omwi technik budowania efektywnej
struktury Twojej bazy danych. Dobry projekt bazy danych upraszcza proces wydobywania
danych oraz ogranicza nadmiarowo i narzuty pamiciowe przez unikanie powielania tych
samych informacji.
Na kocu tego rozdziau bdziesz dysponowa w peni funkcjonaln baz danych, ktra nie
bdzie wymagaa adnych modyfikacji przed podjciem eksperymentw w nastpnym rozdziale, gdzie uyjemy jzyka SQL do wstawiania, aktualizowania i usuwania informacji z bazy
danych. Co wicej, po przeczytaniu tego rozdziau bdziesz potrafi samodzielnie eksperymentowa z procesami tworzenia baz danych. Zanim to jednak nastpi, musisz pogbi
swoj wiedz w zakresie organizacji i struktury baz danych.

Rozdzia 1.

Wprowadzenie do jzyka SQL

31

Organizacja relacyjnych baz danych


W niniejszym punkcie przeanalizujemy nie tylko organizacj systemw baz danych, ale take
elementy skadajce si na ich struktur. Struktura relacyjnego systemu zarzdzania baz
danych obejmuje midzy innymi bazy danych, tabele i pola. W terminologii baz danych tego
typu struktury nazywa si obiektami.
System zarzdzania baz danych jest obszernym programem zarzdzajcym jedn lub wiksz
liczb baz danych. Kada z nich skada si z tabel, ktre z kolei zbudowane s z pl. Pole
zawiera okrelony element danych opisujcy jak rzecz np. wiek osoby, jej wzrost, kolor
oczu itp. Tabela zawiera jedno lub wielu pl, zwykle obejmuje te informacje na temat konkretnej rzeczy lub przynajmniej dane, ktre w jaki sposb s ze sob powizane. Przykadowo, dane na temat osoby mog by skadowane w tabeli Osoba. Jeli te informacje dotycz
okrelonego typu osoby, np. pracownika, jej nazwa moe by bardziej cisa Pracownicy.
Zgodnie z wymow nagwka, materia prezentowany w tym punkcie dotyczy relacyjnych
baz danych, gdzie kluczowe znaczenie ma okrelenie relacyjnych. Koncepcj relacyjnych
baz danych wyjani bardziej szczegowo za chwil, na razie wystarczy, jeli przyjmiemy,
e w tego typu strukturze istniej powizania (pewnego rodzaju relacje) pomidzy danymi
zawartymi w jednej tabeli a danymi w innej tabeli. Przykadowo, relacja pomidzy tabel
transakcji sprzeday samochodw a tabel sprzedawcw moe okrela, ktremu sprzedawcy
udao si sprzeda konkretne samochody.
Na rysunku 1.2 przedstawiono podstawow struktur relacyjnej bazy danych.
Rysunek 1.2.

Na samej grze zaprezentowanego diagramu znajduje si relacyjny system zarzdzania baz


danych (RDBMS). Taki system ma posta oprogramowania aplikacyjnego, ktre zarzdza

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.

Wprowadzenie do jzyka SQL

33

W przedstawionym rozkadzie jazdy wida wyranie, e odpowiednia tabela skada si z czterech


kategorii informacji: pocztek podry, cel podry, godzina wyjazdu i godzina przyjazdu.
W terminologii baz danych wymienione kategorie s nazywane polami, a kade z tych pl
ma wasn, unikatow nazw w ramach tabeli.
Kady wiersz przedstawionej tabeli rozkadu jazdy zawiera dane waciwe dla jednego aspektu
ruchu autobusw. Pierwszy wiersz reprezentuje autobus wyjedajcy z Poznania o godzinie
4:20 i przyjedajcy do Gliwic o godzinie 10:45. W bazach danych informacje zawarte w polach takiego wiersza tworz tzw. rekord. Zaprezentowana tabela zawiera pi takich rekordw. Kolumn tworz wszystkie egzemplarze (ze wszystkich rekordw) okrelonego pola
wystpujce w danej tabeli. Oznacza to, e w przypadku przedstawionego rozkadu jazdy kolumna pocztku podry reprezentuje wszystkie dane pola Pocztek dla wszystkich rekordw tej tabeli: Pozna, Zaniemyl, Wisa, d i Gdynia.
Podsumowujc struktur relacyjnych baz danych, naley stwierdzi, e relacyjny system zarzdzania baz danych odpowiada za zarzdzanie jedn lub wiksza liczb baz danych, z ktrych kada zawiera kolekcj jednej lub wielu tabel, a kada tabela zawiera jeden lub wielu
rekordw, gdzie kady rekord jest kolekcj pl.
Przedstawiona do tej pory wiedza stanowi wystarczajc podstaw do wszczcia eksperymentw z tworzeniem baz danych i tabel za pomoc jzyka SQL.

Skadnia jzyka SQL


W jzykach programowania skadnia jest nie tylko zbiorem regu, ktrych naley przestrzega podczas pisania kodu, ale take stosowan terminologi. Taka skadnia bardzo przypomina reguy gramatyczne w jzykach naturalnych. Przykadowo, reguy gramatyczne jzyka polskiego mwi, e zdanie powinno si koczy kropk. Istniej oczywicie wyjtki od
tej reguy. W przypadku zda pytajcych zamiast kropki na kocu stawia si znak zapytania.
W jzyku SQL nie ma co prawda zda, ale s wyraenia. Kade wyraenie reprezentuje autonomiczne dziaanie. Przykadowo, pojedyncze wyraenie moe suy do wyselekcjonowania
okrelonych danych, do zmiany bazy danych przez dodanie nowej tabeli itd. Wyraenie powinno si koczy rednikiem; mimo e wiele systemw baz danych pozwala swoim uytkownikom pomija ten znak koczcy, dobr praktyk jest konsekwentne stosowanie rednika na kocu kadego wyraenia.
W niniejszej ksice znajdziesz odwoania do trzech kategorii poj skadniowych: identyfikatorw, literaw i sw kluczowych. Identyfikator jest czym, co jednoznacznie definiuje
jaki element systemu bazy danych w oparciu o taki obiekt jak nazwa bazy danych, nazwa
tabeli lub nazwa pola. Jeli utworzysz baz danych nazwan MojaBazaDanych, w praktyce
zdefiniujesz jej identyfikator (ktrym bdzie wanie nazwa MojaBazaDanych). Identyfikatorem nowo utworzonej tabeli Sprzedawca bdzie jej nazwa (czyli wanie Sprzedawca) jeli
bdziesz si chcia odwoa do tej tabeli, powiniene uy jej identyfikatora:
SELECT ImiSprzedawcy
FROM Sprzedawca;

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.

Wprowadzenie do jzyka SQL

35

Tworzenie bazy danych


Pierwszym krokiem w pracy z baz danych jest oczywicie jej utworzenie. Istniej dwa gwne
sposoby tworzenia baz danych.
Po pierwsze, wiele relacyjnych systemw zarzdzania bazami danych udostpnia estetyczne,
przyjazne uytkownikowi interfejsy frontonw, ktre czyni proces tworzenia nowych baz
danych bardzo prostym. W wikszoci przypadkw utworzenie nowej bazy wymaga zaledwie kilku klikni mysz i wpisania nazwy bazy danych. Odpowiednie interfejsy frontonw
oferuj takie systemy jak Microsoft Access, Microsoft SQL Server, Oracle czy IBM DB2.
System MySQL co prawda nie udostpnia domylnego frontonu, istnieje jednak mnstwo
darmowych narzdzi tego typu, np. MySQL Control Center.
W przypadku systemu Microsoft Access uycie odpowiedniego programu jest jedynym sposobem tworzenia nowych baz danych. Pozostae relacyjne systemy zarzdzania bazami danych
oferuj moliwo uywania do tego celu jzyka SQL. W kadym z tych systemw zaimplementowano nieco inny mechanizm wpisywania i wykonywania wyrae jzyka SQL.
Przykadowo, system SQL Server zawiera narzdzie Query Analyzer, DB2 zawiera narzdzie
Command Center, a MySQL wsppracuje midzy innymi z narzdziem Control Center. Niezalenie od wykorzystywanego narzdzia utworzenie nowej bazy danych wymaga wykonania nastpujcego wyraenia jzyka SQL:
CREATE DATABASE mojaPierwszaBazaDanych;

To naprawd adna filozofia! Kiedy zdobdziesz wicej dowiadczenia, odkryjesz, e istnieje


mnstwo dodatkowych opcji, z ktrych moesz w dowolny sposb korzysta, jednak na potrzeby naszej ksiki w zupenoci wystarczy standardowa posta wyraenia CREATE DATABASE.
Nowa baza danych zostaa co prawda nazwana mojaPierwszaBazaDanych, ale rwnie dobrze
mogaby si nazywa jakkolwiek inaczej. Istniej pewne ograniczenia odnonie stosowanych nazw np. dotyczce dugoci. W systemie DB2 dugo nazwy jest ograniczana do
omiu znakw, natomiast w systemie SQL Server ograniczenie zdefiniowano na poziomie
123 znakw. Zawsze bezpieczniejszym rozwizaniem jest stosowanie w nazwach wycznie
liter, cyfr i znaku podkrelenia (unikajc jakichkolwiek znakw interpunkcyjnych). Przykadowo, nazwa Moja_bd jest prawidowa, ale ju nazwa $%^moja&&&bd najprawdopodobniej nie zostanie zaakceptowana przez system zarzdzania baz danych i (chyba si ze mn
zgodzisz) jest do trudna do wypowiedzenia! Cyfry zwykle s akceptowane, ale wikszo
relacyjnych systemw zarzdzania bazami danych nie dopuszcza do stosowania cyfr na pocztku nazw baz danych. I wreszcie warto pamita, e nazwa bazy danych musi by (co
oczywiste) unikalna w skali caego systemu zarzdzania baz danych. Gdyby dwie bazy
danych nazwa mojaBD, relacyjny system zarzdzania baz danych nie mgby jednoznacznie stwierdzi, do ktrej bazy danych odwoujesz si w swoich wyraeniach jzyka SQL.
Co powiniene zrobi, jeli uznasz, e naley usun jak baz danych? Ponownie okazuje
si, e wikszo relacyjnych systemw zarzdzania bazami danych udostpnia wygodn
konsol uytkownika, za pomoc ktrej moesz w prosty sposb usuwa bazy danych; operacja ta jest jednak moliwa take na poziomie jzyka SQL. Wbrew pozorom do usuwania
baz danych nie suy wyraenie delete database, zamiast niego masz do dyspozycji wyraenie DROP DATABASE, po ktrym musi wystpowa nazwa usuwanej bazy danych.

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;

Take do tego polecenia naley podchodzi bardzo ostronie.


Kolejnym krokiem po utworzeniu bazy danych jest dodanie do niej tabel. Zanim jednak bdziesz mg dodawa tabele, musisz si zapozna z dostpnymi typami danych.

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.

Wprowadzenie do jzyka SQL

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

SQL Server 2000

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

Reprezentuje dane tekstowe.


Znakiem moe by litera, cyfra lub
znak interpunkcyjny. Musisz z gry
okreli liczb reprezentowanych
znakw. Jeli rzeczywista liczba
znakw bdzie mniejsza
od zadeklarowanej, relacyjny system
zarzdzania baz danych dopeni
struktur dodatkowymi spacjami.

Jeden bajt
na kady
zarezerwowany
znak

char(8) rezerwuje

Znakowy
o zmiennej dugoci

Typ podobny do znakowego


z t rnic, e dugo danych
tekstowych jest zmienna.
Ten typ danych wykorzystuje
tylko pami niezbdn
do przechowywania rzeczywicie
reprezentowanych znakw.

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

Typ podobny do znakowego z t


rnic, e wykorzystuje po dwa
bajty do reprezentowania kadego
ze znakw. Takie rozwizanie
umoliwia reprezentowanie
wikszego zakresu znakw (co jest
szczeglnie przydatne w przypadku
danych tekstowych wyraonych
w jzyku innym ni angielski).

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

Typ podobny do znakowego


o zmiennej dugoci z t rnic,
e wykorzystuje po dwa bajty
do reprezentowania kadego
ze znakw. Takie rozwizanie
umoliwia reprezentowanie
wikszego zakresu znakw (co jest
szczeglnie przydatne w przypadku
danych tekstowych wyraonych
w jzyku innym ni angielski).

Dwa bajty
na kady
skadowany znak

nvarchar(8) rezerwuje

przestrze dla omiu


znakw i zajmuje okoo
8 bajtw przestrzeni
pamiciowej.

przestrze pamiciow
dla omiu znakw.
Ilo faktycznie
wykorzystywanej
pamici zaley od liczby
rzeczywicie
skadowanych znakw.

Rozdzia 1.

Wprowadzenie do jzyka SQL

39

Typ danych

Opis

Wymagana pami

Przykad

Cakowitoliczbowy

Liczby cakowite z przedziau


od 2 147 483 648
do 2 147 483 647.

Cztery bajty

int zajmuje 4 bajty

May
cakowitoliczbowy

Liczby cakowite z przedziau


od 32 768 do 32 767.

Dwa bajty

smallint zajmuje 2 bajty


przestrzeni pamiciowej
niezalenie od wielkoci
reprezentowanej liczby.

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

real zajmuje 4 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

date, np. 1 Dec 2006


lub 12/01/2006.

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

time, np. 17:54:45.

Zwr uwag na fakt, e w kolumnie Wymagana pami uwzgldniono tylko przestrze


potrzebn do przechowywania waciwych danych. Relacyjne systemy zarzdzania bazami
danych wymagaj oczywicie nieznacznie wicej przestrzeni do skadowania informacji na
temat fizycznego rozmieszczenia poszczeglnych danych w pamici. Tym dodatkowym narzutem nie powiniene si jednak przejmowa, przynajmniej dopki Twoja baza danych nie
jest zbyt obszerna i nie stosuje zaawansowanych mechanizmw. Same wielkoci tych narzutw s cile uzalenione od stosowanego systemu RDBMS.
Niektre z wymienionych powyej typw danych nie wymagaj dodatkowych wyjanie,
pozostae zasuguj na chwil uwagi. Poniej szczegowo omwiono wybrane typy danych
(poczwszy od typu znakowego).

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,

o rozmiarze jednego bajta na znak (typy char i varchar),

o rozmiarze dwch bajtw na znak (typy nchar i nvarchar).

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.

Wprowadzenie do jzyka SQL

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.

Wprowadzenie do jzyka SQL

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

Mar 12, 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, modyfikowanie i usuwanie tabel


W niniejszym podrozdziale zostan omwione podstawowe techniki tworzenia tabel za pomoc jzyka SQL. Dowiesz si, jak tworzy nowe tabele, jak modyfikowa tabele ju istniejce i wreszcie jak usuwa tabele, ktrych ju nie potrzebujesz. Po uzyskaniu odpowiedniej wiedzy bdziesz mg bez trudu utworzy tabele dla przykadowej bazy danych (omawianej
w dalszej czci tej ksiki).

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.

Wprowadzenie do jzyka SQL

45

CREATE TABLE nazwa_tabeli


(
nazwa_kolumny typ_danych_kolumny
)

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
)

Definicje poszczeglnych pl musz by oddzielone przecinkami. Zwr uwag na elegancki


ukad przedstawionego kodu jzyka SQL, w ktrym wyraenie CREATE TABLE i definicje
poszczeglnych pl znajduj si w osobnych wierszach. Takie rozmieszczanie elementw
zapyta nie jest konieczne, ale czyni kod znacznie bardziej czytelnym i tym samym

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.

Modyfikowanie istniejcej tabeli


Kluczem do modyfikowania istniejcych tabel jest wyraenie ALTER TABLE. Za jego pomoc
mona dodawa i usuwa kolumny tabeli. Standard ANSI SQL nie dopuszcza jednak moliwoci stosowania wyrae ALTER TABLE do zmiany oryginalnych typw danych istniejcych
kolumn. Mimo to w wielu relacyjnych systemach zarzdzania bazami danych zaimplementowano rozszerzone wersje wyraenia ALTER TABLE, ktre obsuguj dodatkowe mechanizmy modyfikowania definicji kolumn.
Aby doda now kolumn, uyj przedstawionej poniej podstawowej skadni:
ALTER TABLE nazwa_tabeli
ADD nazwa_pola typ_danych

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)

Aby usun t sam kolumn, naley wykona wyraenie przedstawione poniej:


ALTER TABLE Rozkad_jazdy
DROP COLUMN kursuje_w_weekendy

Wyraenie DROP COLUMN nie jest obsugiwane w systemie DB2 firmy IBM.

Rozdzia 1.

Wprowadzenie do jzyka SQL

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.

Usuwanie istniejcej tabeli


Prawdopodobnie znasz ju pewien wzorzec usuwania struktur za pomoc wyrae jzyka
SQL susznie si domylasz, e usuwanie tabel jest moliwe dziki poleceniu DROP TABLE.
Podstawow skadni tego polecenia przedstawiono poniej:
DROP TABLE nazwa_tabeli

Aby usun tabel Rozkad_jazdy, naley wykona nastpujce wyraenie:


DROP TABLE Rozkad_jazdy

W niniejszym podrozdziale zaledwie otare si o szeroki temat dodawania i modyfikowania


tabel oraz kolumn baz danych. W rozdziale 4. opisano potencjalne komplikacje zwizane
z procesem usuwania tabel w sytuacji, gdy zawarte tam dane s wykorzystywane (wskazywane) przez inne tabele.
Powiniene ju dysponowa podstawow wiedz wystarczajc do tworzenia uytecznych
baz danych i tabel. Materia zawarty w ostatnim podrozdziale tego rozdziau przeprowadzi
Ci przez proces tworzenia przykadowej bazy danych, z ktrej bdziesz wielokrotnie korzysta w kolejnych rozdziaach tej ksiki. Najpierw jednak musisz si zapozna z technikami
waciwego projektowania baz danych i tworzenia efektywnych rozwiza w tym zakresie.

Dobry projekt bazy danych


W podrozdziale przeanalizuj kilka podstawowych regu i koncepcji, ktre mog Ci pomc
w przygotowywaniu efektywnych i prawidowo zaprojektowanych baz danych. O ile rozdzia
4. zawiera bardziej szczegow analiz tych zagadnie, w niniejszym podrozdziale przedstawiono materia podstawowy, ktry na pocztek powinien Ci w zupenoci wystarczy.
Swoj prac zawsze powiniene zaczyna od wykonania pierwszego i najwaniejszego kroku
rozwaenia, do czego potrzebujesz bazy danych.

Gromadzenie i analiza rzeczywistych potrzeb zwizanych z danymi


Zanim utworzysz swoj baz danych i napiszesz pierwsze wyraenie jzyka SQL, w pierwszej
kolejnoci musisz spokojnie przemyle to, dlaczego w ogle chcesz utworzy baz danych.
Nie chodzi oczywicie o uzasadnianie tego typu decyzji tym, e kto zapaci Ci mnstwo
forsy za realizacj takiego projektu (cho nie twierdz, e przesanki finansowe naley

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

Adres poczty elektronicznej

Data przystpienia do klubu

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

Lista obecnych czonkw klubu

Wiesz ju, jakiego rodzaju informacje chcesz przechowywa w swojej bazie danych, nastpnym krokiem jest logiczny podzia tych danych, ktry wskae waciw struktur tabel.

Logiczny podzia danych


Na razie nie musisz si martwi o nazwy tabel i kolumn ani o typy danych na tym etapie
powiniene raczej okreli przysz struktur tabel w ramach tworzonej bazy danych.
W pierwszym odruchu moesz zdecydowa o wrzuceniu wszystkich wyodrbnionych informacji do jednej wielkiej tabeli, ktra musiaaby zawiera nastpujce kolumny:

Rozdzia 1.
Q

Imi i nazwisko

Data urodzenia

Adres pocztowy

Adres poczty elektronicznej

Data przystpienia do klubu

Data spotkania

Miejsce spotkania

Uczestnictwo czonka klubu w spotkaniu

Wprowadzenie do jzyka SQL

49

Dla przykadowych danych opisujcych troje czonkw klubu i jedno spotkanie naleaoby
utworzy nastpujc tabel z trzema rekordami:
Data
urodzenia

Adres

Email

Marcin

27 lutego
1972

ul. Kwiatowa 4/1,


Pozna

Janina

12 grudnia
1967

Kasia

22 maja
1980

Imi

Czy czonek klubu


uczestniczy
w spotkaniu?

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

ul. Duga 12,


Puszczykowo

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

Email

Marcin

27 lutego
1972

ul. Kwiatowa 4/1,


Pozna

Marcin

27 lutego
1972

Janina

Czy czonek klubu


uczestniczy
w spotkaniu?

Data
przystpienia

Data
spotkania

Lokalizacja

marcin@cokolwiek.com

10 stycznia
2005

30 marca
2005

Grna Wilda,
Pozna

ul. Kwiatowa 4/1,


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

ul. Duga 12,


Puszczykowo

kasia@mail.pl

23 stycznia
2005

30 marca
2005

Grna Wilda,
Pozna

Kasia

22 maja
1980

ul. Duga 12,


Puszczykowo

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

Adres poczty elektronicznej

Data przystpienia do klubu

Data spotkania 1

Miejsce spotkania 1

Uczestnictwo czonka klubu w spotkaniu 1

Data spotkania 2

Miejsce spotkania 2

Uczestnictwo czonka klubu w spotkaniu 2

Data spotkania 3

Miejsce spotkania 3

Uczestnictwo czonka klubu w spotkaniu 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.

Wprowadzenie do jzyka SQL

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

Adres poczty elektronicznej

Data przystpienia do klubu

Tabela opisujca szczegy zorganizowanych spotka powinna obejmowa:


Q

Imi i nazwisko

Data spotkania

Miejsce spotkania

Uczestnictwo czonka klubu w spotkaniu

Tabela czonkw klubu od tej pory bdzie miaa nastpujc posta:


Imi

Data urodzenia

Adres

Email

Data przystpienia

Marcin

27 lutego 1972

ul. Kwiatowa 4/1,


Pozna

marcin@cokolwiek.com

10 stycznia 2005

Janina

12 grudnia 1967

ul. Chopina 2,
Gliwice

Janina@serwer.net

12 stycznia 2005

Kasia

22 maja 1980

ul. Duga 12,


Puszczykowo

kasia@mail.pl

23 stycznia 2005

Poniej przedstawiono zawarto nowej tabeli przechowujcej informacje o uczestnictwie


czonkw klubu w jego zebraniach:
Imi

Data spotkania

Lokalizacja

Czy czonek klubu uczestniczy w spotkaniu?

Marcin

30 marca 2005

Grna Wilda, Pozna

Marcin

28 kwietnia 2005

Jeyce, Pozna

52

SQL. Od podstaw
Imi

Data spotkania

Lokalizacja

Czy czonek klubu uczestniczy w spotkaniu?

Janina

30 marca 2005

Grna Wilda, Pozna

Janina

28 kwietnia 2005

Jeyce, Pozna

Kasia

30 marca 2005

Grna Wilda, Pozna

Kasia

28 kwietnia 2005

Jeyce, Pozna

Rozdzielenie szczegowych danych o czonkach od szczegw dotyczcych ich spotka


pomidzy dwie tabele pozwala w znacznej mierze wyeliminowa nadmiarowo danych. Informacje o klubowiczach s skadowane tylko raz, a jedynymi powtarzajcymi si danymi
s ich imiona, ktre stanowi logiczny cznik pomidzy obiema tabelami. Tak naprawd to
dopiero pocztek procesu projektowania tabel bazy danych kolejnym istotnym krokiem jest
zdefiniowanie waciwych typw danych.

Dobr waciwych typw danych


Po opracowaniu oglnego projektu tabeli kolejnym krokiem jest wybr typu danych dla kadego z jej pl. W niektrych przypadkach proces ten jest do oczywisty. Przykadowo, skadowanie imienia czonka klubu w polu numerycznym nie miaoby najmniejszego sensu!
Istniej jednak sytuacje, w ktrych decyzja odnonie typu danych taka oczywista ju nie jest.
Przykadowo, chocia numer telefonu jest liczb, istnieje co najmniej kilka powodw, by skadowa takie numery w polach znakowych. Po pierwsze, numery telefonw bardzo rzadko s
przedmiotem dziaa matematycznych. Po drugie, zdarza si, e numery telefonw rozpoczynaj si od jednego lub wielu zer. Przykadowo, numer 0618778377 w polu numerycznym
byby reprezentowany jako 618778377; relacyjny system zarzdzania baz danych usunie
pierwsze zero, poniewa z punktu widzenia wartoci numerycznych i tak niczego ono nie
zmienia, cho jest wane podczas wybierania numeru.
Podczas wyboru waciwych typw danych naley bra pod uwag nastpujce czynniki:
Q

Zastosowanie danych. Czy dane maj by przedmiotem dziaa matematycznych?


Czy dane bd reprezentoway dat lub godzin? Czy moe dane bd suyy do
prezentacji zwykych informacji tekstowych?

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.

Poprawno skadowanych informacji. Przykadowo, gdyby uy typu danych


integer do przechowywania wartoci pieninych, stracisz moliwo reprezentowania
czci uamkowych (np. groszy). Typ danych integer skaduje warto 2,99 z jako 2.
Nawet w przypadku typw obsugujcych czci uamkowe moe si okaza, e system
bazy danych zaokrgli przechowywane wartoci w gr lub w d, doprowadzajc

Rozdzia 1.

Wprowadzenie do jzyka SQL

53

ostatecznie do otrzymania niewaciwych wynikw dotyczy to szczeglnie typu


danych real. Jeli Twj relacyjny system zarzdzania baz danych obsuguje specjalny
typ walutowy, stosuj ten typ we wszystkich polach, ktre tego wymagaj; w przeciwnym
razie uyj w miar bezpiecznego typu DECIMAL(10,2).
Q

Znaki spoza jzyka angielskiego. Jeli przewidujesz, e w Twoich polach tekstowych


znajd si znaki spoza alfabetu jzyka angielskiego, uyj albo typu nchar, albo typu
nvarchar.

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)

Email

nvarchar(200)

DataPrzystapienia

date

Jak wida, w przypadku prezentowanych pl tabeli SzczegoloweDaneCzlonkow wybrane typy


nie powinny budzi najmniejszych wtpliwoci. Imi, adres pocztowy i adres poczty elektronicznej s typowymi informacjami tekstowymi, zatem dla kadego z tych pl mona wybra
typ nvarchar. Podobnie dla pola reprezentujcego dat urodzenia wybrano typ date. Nieco
gorzej jest z wyborem rozmiarw pl, gdzie deklarowane wartoci czsto s efektem samych
domysw. Co prawda nie moesz mie stuprocentowej pewnoci, e do Twojego klubu nie
zapisze si osoba z imieniem duszym ni 75-znakowe, jednak takie przypadki zdarzaj si
na tyle rzadko, e przyjta dugo wydaje si rozsdnym kompromisem. Dla bezpieczestwa zawsze naley deklarowa dugoci nieco wiksze od oczekiwanych.
W poniszej tabeli przedstawiono typy danych dla tabeli Frekwencja:
Nazwa pola

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.

Stosowanie klucza gwnego


Klucz gwny jest polem lub polami, ktre unikalnie identyfikuj rekord spord innych
rekordw w ramach tej samej tabeli bazy danych. Wracajc do przykadu klubu kinomanw, jako jego twrca moesz przyj, e jeste te jego pierwszym czonkiem na tym
etapie przechowywanie rekordu bazy danych o czonkach jest banalnie proste. Kiedy do
Twojego klubu przystpi kilka kolejnych osb i podejmiesz decyzj o skadowaniu ich personaliw (imienia, wieku, adresu itp.) w bazie danych, mechanizm identyfikacji wedug samych imion bdzie spenia swoje zadanie. Wyobra sobie jednak, e Twj klub zyskuje popularno znacznie szybciej moe si okaza, e klub po jakim czasie liczy kilka tysicy
czonkw. Nagle okazuje si, e ryzyko wystpienia dwch, trzech lub jeszcze wikszej liczby
takich samych imion bardzo wzrasta, utrudniajc tym samym szans na wyselekcjonowanie
waciwych osb z bazy danych! W takich przypadkach niezbdne jest zastosowanie dodatkowego mechanizmu jednoznacznej identyfikacji. Mgby oczywicie uy kombinacji imienia i wieku, problem jednak w tym, e wiek czonkw klubu si zmienia, a zmienny identyfikator oznacza powane problemy w ledzeniu odwoa pomidzy tabelami. Nie mona te
wykluczy sytuacji, w ktrej dwch czonkw klubu bdzie miao takie samo imi i ten sam
wiek. Mgby te uy kombinacji imienia i adresu, naley jednak pamita, e adresy z jednej
strony rwnie mog si zmienia, a z drugiej s do dugie, co moe mie negatywny wpyw
na efektywno przeszukiwania i sortowania bazy danych.
By moe domylie si ju, e rozwizaniem tego problemu jest przypisanie kademu z czonkw klubu unikalnego identyfikatora, ktry nie moe si powtrzy w dwch rnych rekordach tabeli SzczegoloweDaneCzlonkow. W przypadku tej tabeli identyfikator moe si nazywa IdentyfikatorCzlonka. Na tym wanie polega koncepcja klucza gwnego chodzi
wycznie o wyznaczenie w ramach tabeli unikalnego identyfikatora. Jeli wiesz, e IdentyfikatorCzlonka rwny 1234432 reprezentuje dokadnie jedn osob, selekcjonujc odpowiednie informacje z bazy danych moesz mie pewno, e uzyskae oczekiwany rekord.
Klucze gwne s te wykorzystywane do czenia tabel. Przykadowo, jeli jedna z Twoich
tabel zawiera informacje o czonkach klubu kinomana, druga szczegowo opisuje spotkania
zorganizowane w ramach tego klubu, moesz poczy obie tabele wanie z uyciem klucza
gwnego. W takim przypadku tabela SzczegoloweDaneCzlonkow moe mie nastpujc posta:
Nazwa pola

Typ danych

IdentyfikatorCzlonka

integer

Imie

nvarchar(75)

DataUrodzenia

date

Adres

nvarchar(200)

Email

nvarchar(200)

DataPrzystapienia

date

Rozdzia 1.

Wprowadzenie do jzyka SQL

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

Tworzenie przykadowej bazy danych


Przykadowa baza danych jest w pewnym sensie przedueniem naszych dotychczasowych
rozwaa na temat bazy danych klubu kinomanw. Przechowywanie omawianych tabel wymaga utworzenia bazy danych. Moesz oczywicie nada jej nazw, np. Klub Filmowy, jednak z punktu widzenia celw tej ksiki nazwa samej bazy danych jest nieistotna. W dodatku
B opisano ca procedur tworzenia pustej, przykadowej bazy danych w takich systemach
jak Access, SQL Server, DB2, MySQL czy Oracle. Naturalnym nastpstwem utworzenia bazy
danych Klub Filmowy jest przystpienie do jej wypeniania tabelami.
W najwikszym uproszczeniu mona przyj, e baza danych wykorzystywana w klubie
mionikw kina powinna zawiera nastpujce informacje:
Q

Szczegowe dane o klubowiczach, wcznie z imieniem i nazwiskiem, adresem


pocztowym, dat urodzenia, dat przystpienia do klubu i adresem poczty elektronicznej.

Szczegowe dane o frekwencji na zorganizowanych spotkaniach.

Szczegowe informacje o filmach.

Preferencje filmowe czonkw klubu mionikw kina.

Powyej wymieniono aktualne wymagania odnonie przykadowej bazy danych, w dalszej


czci ksiki ta sama baza danych bdzie stopniowo rozwijana i poszerzana.
W poprzednim podrozdziale stworzye tabel ze szczegowymi informacjami na temat czonkw klubu zwr uwag na dodatkowe pola uwzgldnione w poniszej wersji tej tabeli:
Nazwa pola

Typ danych

Uwagi

IdentyfikatorCzlonka

integer

Klucz gwny.

Imie

nvarchar(50)

Zmie typ danych na vargraphic(50) w systemie IBM


DB2 i varchar(50) w systemach MySQL i Microsoft
Access. W systemie Oracle nie jest dostpny typ
nvarchar z domylnym zbiorem znakw, zatem naley
ten typ zmieni na varchar. Aby mie moliwo
stosowania typu nvarchar, podczas tworzenia bazy
danych musisz ustawi zestaw znakw Unicode.

Nazwisko

nvarchar(50)

Zmie typ danych na vargraphic(50) w systemie IBM


DB2 i varchar(50) w systemach MySQL i Microsoft
Access. W systemie Oracle nie jest dostpny typ
nvarchar z domylnym zbiorem znakw, zatem naley
ten typ zmieni na varchar. Aby mie moliwo
stosowania typu nvarchar, podczas tworzenia bazy
danych musisz ustawi zestaw znakw Unicode.

DataUrodzenia

date

W systemie Microsoft SQL Server zmie typ danych


na datetime.

Rozdzia 1.

Wprowadzenie do jzyka SQL

57

Nazwa pola

Typ danych

Uwagi

Ulica

nvarchar(100)

Zmie typ danych na vargraphic(100) w systemie IBM


DB2 i varchar(100) w systemach MySQL i Microsoft
Access. W systemie Oracle nie jest dostpny typ
nvarchar z domylnym zbiorem znakw, zatem naley
ten typ zmieni na varchar. Aby mie moliwo
stosowania typu nvarchar, podczas tworzenia bazy
danych musisz ustawi zestaw znakw Unicode.

Miasto

nvarchar(75)

Zmie typ danych na vargraphic(75) w systemie IBM


DB2 i varchar(75) w systemach MySQL i Microsoft
Access. W systemie Oracle nie jest dostpny typ
nvarchar z domylnym zbiorem znakw, zatem naley
ten typ zmieni na varchar. Aby mie moliwo
stosowania typu nvarchar, podczas tworzenia bazy
danych musisz ustawi zestaw znakw Unicode.

Wojewodztwo

nvarchar(75)

Zmie typ danych na vargraphic(75) w systemie IBM


DB2 i varchar(75) w systemach MySQL i Microsoft
Access. W systemie Oracle nie jest dostpny typ
nvarchar z domylnym zbiorem znakw, zatem naley
ten typ zmieni na varchar. Aby mie moliwo
stosowania typu nvarchar, podczas tworzenia bazy
danych musisz ustawi zestaw znakw Unicode.

KodPocztowy

varchar(6)

Email

varchar(200)

DataPrzystapienia

date

W systemie Microsoft SQL Server zmie typ danych


na datetime.

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

W systemie Microsoft SQL Server zmie typ danych


na datetime.

Lokalizacja

nvarchar(200)

Zmie typ danych na vargraphic(200) w systemie IBM


DB2 i varchar(200) w systemach MySQL i Microsoft
Access. W systemie Oracle nie jest dostpny typ
nvarchar z domylnym zbiorem znakw, zatem naley
ten typ zmieni na varchar. Aby mie moliwo
stosowania typu nvarchar, podczas tworzenia bazy
danych musisz ustawi zestaw znakw Unicode.

UczestnictwoCzlonka

char(1)

IdentyfikatorCzlonka

integer

Klucz obcy czcy tabel Frekwencja z tabel


SzczegoloweDaneCzlonkow.

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.

Wprowadzenie do jzyka SQL

59

Pozostaje nam jeszcze dodanie tabel, w ktrych bd przechowywane nastpujce informacje:


Q

Szczegowe informacje o filmach.

Preferencje filmowe czonkw klubu mionikw kina.

Najpierw utworzymy now tabel nazwan Filmy. Poniej przedstawiono informacje, ktre
bd skadowane w tej tabeli:
Q

Tytu filmu.

Rok premiery.

Krtkie streszczenie fabuy.

Dostpno filmu na pytach DVD.

Ocena filmu wedug uytkownikw (przykadowo, ocena moe by wyraana w skali


od 1 do 5, gdzie ocena 1 powinna dotyczy filmw kompletnie nieudanych, a ocena
5 dzie ponadczasowych).

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)

Zmie typ danych na vargraphic(100) w systemie


IBM DB2 i varchar(100) w systemach MySQL
i Microsoft Access. W systemie Oracle nie jest
dostpny typ nvarchar z domylnym zbiorem znakw,
zatem naley ten typ zmieni na varchar. Aby mie
moliwo stosowania typu nvarchar, podczas
tworzenia bazy danych musisz ustawi zestaw
znakw Unicode.

RokPremiery

integer

StreszczenieFabuly

nvarchar(2000)

DostepnyNaDVD

char(1)

Ocena

integer

IdentyfikatorKategorii

integer

Jeli uywasz systemu Microsoft Access, zmie typ


danych na memo; jeli uywasz systemu MySQL,
zmie ten typ na text.

Klucz obcy

Zanim przejdziemy do omawiania kolejnych tabel, musimy przeanalizowa dwa istotne


aspekty definicji wymienionych powyej pl tabeli Filmy. Po pierwsze, dla pola StreszczenieFabuly zastosowano typ danych nvarchar, co powoduje okrelone problemy w systemie
Microsoft Access, ktrego uytkownicy maj do dyspozycji typ varchar obsugujcy maksymalnie 255 znakw. Poniewa w tym przypadku niezbdne jest skadowanie do 2000 znakw, w systemie Access naley uy typu memo, ktry dopuszcza moliwo skadowania
nawet 65 536 znakw. Poniewa nie mona okrela dugoci pl tego typu, automatycznie

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)

Zmie typ danych na vargraphic(100) w systemie


IBM DB2 i varchar(100) w systemach MySQL
i Microsoft Access. W systemie Oracle nie jest
dostpny typ nvarchar z domylnym zbiorem
znakw, zatem naley ten typ zmieni na varchar.
Aby mie moliwo stosowania typu nvarchar,
podczas tworzenia bazy danych musisz ustawi
zestaw znakw Unicode.

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.

Wprowadzenie do jzyka SQL

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
);

Utworzenie tabeli UlubioneKategorie jest ostatnim krokiem w procesie budowy podstawowej


struktury bazy danych. Jak miae okazj si przekona, tworzenie bazy danych jest stosunkowo atwe! W rozdziale 4. przedstawiono bardziej skomplikowane przykady i opcje
materia zawarty w tym podrozdziale stanowi jednak dobr podstaw do analizy bardziej
zaawansowanych rozwiza.

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

Bazy danych zapewniaj efektywne mechanizmy skadowania ogromnych iloci


nieprzetworzonych danych. Same bazy danych nie przetwarzaj przechowywanych
informacji za przetwarzanie danych odpowiadaj wykorzystujce je aplikacje.

Bazy danych znacznie upraszczaj udostpnianie informacji w porwnaniu z innymi


rozwizaniami (takimi jak pliki tekstowe, arkusze kalkulacyjne itp.). Bazy danych
oferuj te mechanizmy zabezpieczajce informacje przed dostpem osb
niepowoanych oraz umoliwiaj definiowanie rozmaitych poziomw uprawnie
uytkownikw. Moesz ogranicza dostp do danych pewnej grupie uytkownikw
i zezwala na peny dostp innym uytkownikom.

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.

Bazy danych s czci wikszych aplikacji nazywanych systemami zarzdzania


bazami danych (DBMS).

SQL jest deklaratywnym jzykiem programowania; oznacza to, e za pomoc wyrae


tego jzyka mona opisywa oczekiwane odpowiedzi, a szukanie tych odpowiedzi
wrd skadowanych informacji naley pozostawi systemowi zarzdzania baz danych.

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

Zapoznae si z organizacj baz danych. Przekonae si, e bazy danych skadaj


si z tabel, ktre z kolei skadaj si z rekordw, a kady z tych rekordw mona
podzieli na poszczeglne pola (kolumny).

Nauczye si tworzy bazy danych. Dowiedziae si, e mona to robi zarwno


za pomoc odpowiednich narzdzi relacyjnych systemw zarzdzania bazami danych,
jak i wyrae jzyka SQL.

Rne typy danych s skadowane w bazie danych na rozmaite sposoby. Dowiedziae


si, e bazy danych obsuguj wiele typw danych reprezentujcych dane tekstowe
(char i varchar), dane liczbowe (integer, real i decimal) oraz dat i czas (time i date).
S to tylko podstawowe typy danych, a wiele relacyjnych systemw zarzdzania
bazami danych obsuguje znacznie bardziej rozbudowany zestaw typw.

Zapoznae si z reguami projektowania dobrych baz danych.

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

si problem nadmiarowoci danych. Jakie zmiany naleaoby wprowadzi w strukturze


tabel tej bazy danych.
2. Napisz kod jzyka SQL potrzebny do wprowadzenia zmian niezbdnych do realizacji
wiczenia 1. i podziau pola rekordw tej tabeli na bardziej szczegowe pola Ulica,
Miasto i Wojewodztwo.