SQL jest uznawanym za standard językiem programowania służącym do tworzenia, modyfikowania oraz pobierania informacji przechowywanych przez systemy zarządzania relacyjnymi bazami danych. Chociaż każdy system bazodanowy używa nieco innego dialektu tego języka, często rozbudowując go o dodatkowe funkcje, podstawowe instrukcje SQL są wspólne dla wszystkich systemów: od Accessa do Oracle'a.
Bogata w ilustracje, napisana przystępnym językiem książka "SQL. Szybki start" pozwoli Ci nauczyć się SQL-a i zacząć pracę z relacyjną bazą danych, niezależnie od tego, który system wybierzesz. Autor kładzie szczególny nacisk na realizację konkretnych zadań, przedstawiając kolejne kroki, jakie należy wykonać, by rozwiązać dany problem. Dzięki temu książka jest nie tylko przewodnikiem po języku SQL i jego odmianach, ale także doskonałą pomocą, po którą będziesz często sięgał w swojej praktyce programistycznej.
W książce omówiono m.in.:
* Najpopularniejsze systemy bazodanowe, ich wady i zalety
* Relacyjny model danych
* Podstawy języka SQL: składnię i najważniejsze typy danych
* Pobieranie danych za pomocą zapytań
* Operatory i funkcje SQL
* Filtrowanie, grupowanie i sortowanie wyników zapytań
* Dodawanie, usuwanie i modyfikowanie danych
* Korzystanie z indeksów
* Używanie perspektyw
* Stosowanie transakcji
1. IDZ DO
PRZYK£ADOWY ROZDZIA£
SPIS TRE CI SQL. Szybki start
KATALOG KSI¥¯EK Autor: Chris Fehily
T³umaczenie: Jaros³aw Gierlicki
KATALOG ONLINE ISBN: 83-7361-037-5
Tytu³ orygina³u: SQL: Visual QuickStart Guide
ZAMÓW DRUKOWANY KATALOG Format: B5, stron: 416
TWÓJ KOSZYK
DODAJ DO KOSZYKA SQL jest uznawanym za standard jêzykiem programowania s³u¿¹cym do tworzenia,
modyfikowania oraz pobierania informacji przechowywanych przez systemy
zarz¹dzania relacyjnymi bazami danych. Chocia¿ ka¿dy system bazodanowy u¿ywa
CENNIK I INFORMACJE nieco innego dialektu tego jêzyka, czêsto rozbudowuj¹c go o dodatkowe funkcje,
podstawowe instrukcje SQL s¹ wspólne dla wszystkich systemów: od Accessa do
ZAMÓW INFORMACJE Oracle'a.
O NOWO CIACH Bogata w ilustracje, napisana przystêpnym jêzykiem ksi¹¿ka „SQL. Szybki start”
pozwoli Ci nauczyæ siê SQL-a i zacz¹æ pracê z relacyjn¹ baz¹ danych, niezale¿nie
ZAMÓW CENNIK do tego, który system wybierzesz. Autor k³adzie szczególny nacisk na realizacjê
konkretnych zadañ, przedstawiaj¹c kolejne kroki, jakie nale¿y wykonaæ, by rozwi¹zaæ
dany problem. Dziêki temu ksi¹¿ka jest nie tylko przewodnikiem po jêzyku SQL i jego
CZYTELNIA odmianach, ale tak¿e doskona³¹ pomoc¹, po któr¹ bêdziesz czêsto siêga³ w swojej
praktyce programistycznej.
FRAGMENTY KSI¥¯EK ONLINE W ksi¹¿ce omówiono m.in.:
• Najpopularniejsze systemy bazodanowe, ich wady i zalety
• Relacyjny model danych
• Podstawy jêzyka SQL: sk³adniê i najwa¿niejsze typy danych
• Pobieranie danych za pomoc¹ zapytañ
• Operatory i funkcje SQL
• Filtrowanie, grupowanie i sortowanie wyników zapytañ
• Dodawanie, usuwanie i modyfikowanie danych
• Korzystanie z indeksów
• U¿ywanie perspektyw
• Stosowanie transakcji
Wydawnictwo Helion
ul. Chopina 6
44-100 Gliwice
tel. (32)230-98-63
e-mail: helion@helion.pl
2. Spis treści
Spis treści
Wprowadzenie 9
Rozdział 1. Wybrane systemy zarządzania bazami danych 23
Uruchamianie programów SQL........................................................... 24
Microsoft Access ............................................................................... 26
Microsoft SQL Server......................................................................... 29
Oracle ............................................................................................... 32
MySQL ............................................................................................. 35
PostgreSQL........................................................................................ 37
Rozdział 2. Relacyjny model danych 39
Tabele, kolumny i wiersze .................................................................. 40
Klucze główne .................................................................................. 44
Spis treści
Klucze obce....................................................................................... 46
Relacje .............................................................................................. 48
Normalizacja...................................................................................... 51
Przykładowa baza danych ................................................................... 56
Rozdział 3. Podstawy SQL-a 63
Składnia SQL-a ................................................................................. 64
Typy danych ...................................................................................... 69
Typy łańcuchów znaków..................................................................... 70
Typy łańcuchów bitowych .................................................................. 72
Typy liczb dokładnych........................................................................ 73
Typy liczb przybli onych.................................................................... 75
Typy daty i czasu .............................................................................. 76
Typy interwałowe (okresowe) ............................................................. 78
Wartości null ..................................................................................... 80
Rozdział 4. Pobieranie danych z tabeli 83
Pobieranie kolumn za pomocą fraz SELECT i FROM........................... 84
Tworzenie aliasów kolumn za pomocą słowa kluczowego AS ............... 87
Eliminowanie powtarzających się wierszy
za pomocą słowa kluczowego DISTINCT............................................ 90
Sortowanie wierszy za pomocą frazy ORDER BY................................ 92
5
3. Spis treści
Filtrowanie wierszy za pomocą frazy WHERE .................................... 97
Łączenie i negacja warunków za pomocą operatorów AND, OR i NOT..100
Dopasowywanie szablonów za pomocą słowa kluczowego LIKE .........106
Filtrowanie poprzez zdefiniowanie zakresów
za pomocą słowa kluczowego BETWEEN..........................................110
Filtrowanie za pomocą list i słowa kluczowego IN ..............................113
Sprawdzanie występowania wartości null
za pomocą słowa kluczowego IS NULL..............................................116
Rozdział 5. Operatory i funkcje 119
Tworzenie kolumn opartych na wyra eniach .......................................120
Wykonywanie operacji arytmetycznych..............................................122
Wyznaczanie kolejności wykonywania obliczeń..................................124
Sklejanie łańcuchów za pomocą operatora ||........................................125
Wyodrębnianie podłańcuchów za pomocą funkcji SUBSTRING().........129
Zmiana wielkości liter w łańcuchach
za pomocą funkcji UPPER() i LOWER() ............................................131
Obcinanie łańcuchów za pomocą funkcji TRIM() ................................133
Określanie długości łańcucha za pomocą funkcji
Spis treści
CHARACTER_LENGTH() ...............................................................136
Wyszukiwanie podłańcuchów za pomocą funkcji POSITION() ............138
Obliczenia operujące na wartościach daty i czasu................................140
Pobieranie bie ącej daty i czasu .........................................................142
Pobieranie informacji o u ytkowniku..................................................144
Konwertowanie typów danych za pomocą funkcji CAST() ..................145
Wyznaczanie wartości warunkowych za pomocą wyra enia CASE.......149
Sprawdzanie występowania wartości null
za pomocą funkcji COALESCE() .......................................................153
Wyra enia porównujące oparte na funkcji NULLIF()...........................154
Rozdział 6. Sumowanie i grupowanie danych 157
Wykorzystywanie funkcji agregujących..............................................158
Wyszukiwanie wartości minimalnych za pomocą funkcji MIN()...........160
Wyszukiwanie wartości maksymalnych za pomocą funkcji MAX() ......161
Obliczanie sumy za pomocą funkcji SUM() ........................................162
Obliczanie średniej za pomocą funkcji AVG().....................................163
Zliczanie wierszy za pomocą funkcji COUNT() ..................................164
Słowo kluczowe DISTINCT a funkcje agregujące ...............................165
Grupowanie wierszy za pomocą frazy GROUP BY .............................169
Filtrowanie grup za pomocą frazy HAVING .......................................175
6
4. Spis treści
Rozdział 7. Pobieranie danych z wielu tabel 179
Kwalifikowanie nazw kolumn ............................................................180
Tworzenie aliasów tabel za pomocą słowa kluczowego AS....................182
Złączenia ..........................................................................................184
Tworzenie złączeń za pomocą składni JOIN lub WHERE ....................186
Tworzenie złączeń krzy owych za pomocą frazy CROSS JOIN.............190
Tworzenie złączeń naturalnych za pomocą frazy NATURAL JOIN ......192
Tworzenie złączeń wewnętrznych za pomocą frazy INNER JOIN ........196
Tworzenie złączeń zewnętrznych za pomocą frazy OUTER JOIN ........220
Tworzenie autozłączeń.......................................................................233
Składanie wierszy za pomocą słowa kluczowego UNION ....................240
Wyszukiwanie wspólnych wierszy
za pomocą słowa kluczowego INTERSECT........................................249
Wyszukiwanie ró niących się wierszy
za pomocą słowa kluczowego EXCEPT..............................................251
Rozdział 8. Podzapytania 253
Idea podzapytań ................................................................................254
Spis treści
Składnia podzapytań .........................................................................256
Podzapytania a złączenia....................................................................257
Podzapytania proste i skorelowane .....................................................261
Podzapytania skorelowane ................................................................263
Kwalifikowanie nazw kolumn występujących w podzapytaniach..........267
Wartości null w podzapytaniach .........................................................268
Wykorzystywanie podzapytań jako wyra eń definiujących kolumny.....270
Dokonywanie porównań z wartością zwracaną przez podzapytanie
za pomocą operatora porównania........................................................276
Sprawdzanie przynale ności do zbioru za pomocą operatora IN ...........281
Dokonywanie porównań ze wszystkimi wartościami zwracanymi
przez podzapytanie za pomocą słowa kluczowego ALL ......................288
Dokonywanie porównań z niektórymi wartościami zwracanymi
przez podzapytanie za pomocą słowa kluczowego ANY .....................291
Sprawdzanie istnienia zadanych wartości za pomocą operatora EXISTS ..294
Porównywanie równowa nych zapytań...............................................302
Rozdział 9. Wstawianie, modyfikowanie i usuwanie wierszy 303
Wyświetlanie definicji kolumn tabel...................................................304
Wstawianie wierszy za pomocą konstrukcji INSERT ..........................307
Modyfikowanie wierszy za pomocą konstrukcji UPDATE ...................314
Usuwanie wierszy za pomocą konstrukcji DELETE ............................319
7
5. Spis treści
Rozdział 10. Tworzenie, modyfikowanie i usuwanie tabel 323
Tworzenie tabel.................................................................................324
Idea atrybutów ..................................................................................325
Tworzenie nowych tabel za pomocą konstrukcji CREATE TABLE......327
Nieakceptowanie w kolumnach wartości null
za pomocą słowa kluczowego NOT NULL ........................................329
Określanie wartości domyślnych
za pomocą słowa kluczowego DEFAULT...........................................332
Określanie klucza głównego
za pomocą słowa kluczowego PRIMARY KEY .................................336
Określanie klucza obcego
za pomocą słowa kluczowego FOREIGN KEY ..................................339
Zapewnianie unikalnych wartości
za pomocą słowa kluczowego UNIQUE .............................................345
Określanie atrybutów weryfikacyjnych
za pomocą słowa kluczowego CHECK ..............................................348
Tworzenie tymczasowych tabel za pomocą konstrukcji
CREATE TEMPORARY TABLE .....................................................351
Tworzenie nowych tabel na bazie tabel istniejących
Spis treści
za pomocą konstrukcji SELECT INTO ..............................................354
Modyfikowanie tabel za pomocą konstrukcji ALTER TABLE .............358
Usuwanie tabel za pomocą konstrukcji DROP TABLE ........................361
Rozdział 11. Indeksy 363
Tworzenie indeksów za pomocą konstrukcji CREATE INDEX ...........364
Usuwanie indeksów za pomocą konstrukcji DROP INDEX .................368
Rozdział 12. Perspektywy 371
Tworzenie perspektyw za pomocą konstrukcji CREATE VIEW ............372
Pobieranie danych poprzez perspektywy .............................................377
Modyfikowanie danych poprzez perspektywy ....................................380
Usuwanie perspektyw za pomocą konstrukcji DROP VIEW.................385
Rozdział 13. Transakcje 387
Wykonywanie transakcji ...................................................................388
Dodatek A 393
Tworzenie przykładowej bazy danych publikacje ................................394
Skorowidz 405
8
6. 3
Podstawy SQL-a
Podstawy SQL-a
Podstawy SQL-a
Mo e zauwa yłeś, e w poprzednim rozdziale
SQL był rzadko wspomniany. Zapamiętaj:
SQL ≠ model relacyjny
SQL jest oparty na modelu relacyjnym, ale nie
jest w pełni jego implementacją. Odstępstwem
od modelu jest na przykład to, e istnienie
kluczy głównych w SQL-u jest opcjonalne,
a nie obligatoryjne. W konsekwencji tabele bez
kluczy głównych mogą zawierać dublujące się
wiersze, co z kolei mo e uniemo liwiać dostęp
do niektórych danych. Tematyka niniejszej
ksią ki nie obejmuje wyczerpującego opisu
wspomnianych ró nic (jeśli chcesz uzyskać
Podstawy SQL-a
więcej informacji, poszukaj w Internecie
artykułów na temat SQL-a autorstwa E.F.
Codda, Chrisa Date’a lub Fabiana Pascala).
Rezultatem tych rozbie ności jest fakt, e to
na u ytkownikach systemów DBMS, a nie
na samych systemach, spoczywa obowiązek
zapewnienia struktury relacyjnej. Inną
konsekwencją jest nieidealna wymienność
terminów przedstawionych w tabeli 2.1
w rozdziale 2.
Przystępując do nauki SQL-a nale y mieć
na względzie powy sze uwagi.
Program SQL jest to ciąg instrukcji SQL
wykonywanych w podanej kolejności. Aby
napisać program, trzeba znać zasady składni
SQL-a. Reguły tworzenia instrukcji SQL
przedstawia niniejszy rozdział. Zawarto w nim
równie opis typów danych i wartości null.
63
7. Rozdział 3.
Składnia SQL-a
Rysunek 3.1 przedstawia przykład konstrukcji 4. Słowa kluczowe. Słowa kluczowe,
SQL. Nie zwracaj na razie uwagi na jej zwane tak e słowami zastrze onymi,
znaczenie (semantykę) — zadaniem tego są zarezerwowane przez SQL, poniewa
przykładu jest wyjaśnienie zasad składni SQL-a. mają w tym języku specjalne znaczenie.
Próba u ycia słowa kluczowego w sposób
1. Komentarz. Komentarz jest opcjonalnym
inny ni pozwala na to jego kontekst (np.
tekstem wpisywanym w osobnej linii
jako identyfikator) spowoduje wystąpienie
w celu wyjaśnienia działania programu.
błędu. Tabela 3.1 zawiera słowa kluczowe
Początek komentarza oznaczają dwa łączniki
języka SQL. W tabeli 3.2 umieszczono
— następujący po nich tekst jest ignorowany
potencjalne słowa kluczowe języka SQL,
przez system DBMS. Komentarz kończy się
które na razie nie są zarezerwowane,
wraz z końcem linii.
ale w przyszłości mogą się takimi stać.
2. Konstrukcja SQL. Konstrukcja SQL jest
5. Identyfikatory. Identyfikatory są to słowa,
określoną kombinacją słów poprzedzonych
których Ty (lub projektant bazy danych)
słowem kluczowym. Słowa są niepodzielnymi
u ywasz do nazywania obiektów bazy
elementami języka SQL — pod względem
danych takich jak tabele, kolumny, aliasy,
gramatycznym nie mo na rozło yć ich na
indeksy oraz perspektywy (widoki).
mniejsze części. Do tej grupy nale ą słowa
Identyfikatorami nie mogą być słowa
kluczowe, identyfikatory, operatory, wzorce
kluczowe, a ich długość mo e wynosić
Składnia SQL-a
oraz inne słowa (opisane w dalszej części
maksymalnie 128 znaków. SQL dopuszcza
ksią ki).
u ywanie w identyfikatorach wszystkich
3. Frazy. Konstrukcja SQL składa się z jednej znaków i symboli zestawu znaków systemu
lub kilku fraz. Mówiąc ogólnie, fraza to Windows (włączając znaki zestawu Western
fragment konstrukcji SQL rozpoczynający oraz ideogramy), jednak zanim zaczniesz
się słowem kluczowym. Frazy mogą być ich u ywać, zapoznaj się ze wskazówkami.
wymagane lub opcjonalne i muszą W przedstawionym przykładzie
występować w określonej kolejności. identyfikatorami są KOKGACW, PCYKUMQACW,
Przedstawiony przykład zawiera cztery CWVQT[ oraz YQL.
frazy: 5'.'%6, (41/, 9*'4' i 14&'4 $;.
6. Zakańczający średnik. Ka da
konstrukcja SQL kończy się średnikiem.
Rysunek 3.1. Konstrukcja SQL zawierająca komentarz
64
10. Podstawy SQL-a
UGNGEV KOKGACW SQL nie definiuje precyzyjnie formy konstrukcji.
0#9+5-1A#7 Konstrukcje SQL:
(41/
CWVQT[ 9J'T' YQL u Mogą być pisane małymi lub du ymi literami
/ QTFGT (np. 5'.'%6 i UGNGEV oznaczają to samo słowo
D; kluczowe).
PCYKUM1A#7
u Mogą być kontynuowane w kolejnych
Rysunek 3.2. Nie istnieją reguły, według których liniach. Niedopuszczalne jest tylko dzielenie
trzeba formatować konstrukcję SQL. Powy sza słów oraz łańcuchów znaków zawartych
konstrukcja jest analogiczna do konstrukcji w cudzysłowach.
przedstawionej na rysunku 3.1
u Mogą być umieszczone w jednej linii
z innymi konstrukcjami.
u Mogą rozpoczynać się w dowolnej kolumnie.
Pomimo przedstawionej dowolności najlepiej
jednak trzymać się konsekwentnie jednego
stylu (rysunek 3.2). Ja zazwyczaj piszę słowa
kluczowe du ymi literami, a ka dą frazę
wpisuję w osobnej linii — szczegóły
wykorzystywanego przeze mnie stylu opisałem
w podrozdziałach „Konwencje typograficzne”
Składnia SQL-a
oraz „Konwencje składniowe” zawartych
we Wprowadzeniu.
Częstymi błędami towarzyszącymi
programowaniu w SQL-u są:
u Pomyłka w słowie kluczowym lub
identyfikatorze.
u Pominięcie zakańczającego średnika.
u Zmiana kolejności wpisanych fraz.
u Nieobjęcie cudzysłowami łańcuchów znaków
oraz wyra eń oznaczających czas i datę.
u Objęcie cudzysłowami wzorców liczbowych.
u Niepoprawne skojarzenie kolumn z tabelami
(np. wpisanie 5'.'%6 RTQEGPVAVCPVKGO (41/
CWVQT[ zamiast 5'.'%6 RTQEGPVAVCPVKGO
(41/ CWVQT[AV[VWNQY).
67
11. Rozdział 3.
Wskazówki
Wprowadzające słowo kluczowe konstrukcji Systemy DBMS określają
SQL nazywa się często czasownikiem, własne wymagania dotyczące długości
poniewa wskazuje ono na wykonywaną identyfikatorów oraz dostępnego dla
przez konstrukcję czynność. nich zestawu znaków — szczegółowe
informacje mo esz znaleźć
Pomimo e słów kluczowych nie mo na
w dokumentacjach systemów pod
u ywać jako identyfikatorów, to jednak
hasłem identyfikatory (ang. identifiers)
mo na je w identyfikatorach zawierać.
lub nazwy (ang. names).
Np. ITQWR czy OCZ nie są prawidłowymi
identyfikatorami, ale ITQWRU czy OCZAEGPC Systemy DBMS posiadają tak e dodatkowe
są poprawne. słowa kluczowe, których nie mo na
u ywać w roli identyfikatorów. Szczegóły
W identyfikatorach mo na zawierać spacje,
w dokumentacjach systemów pod hasłem
nale y wtedy identyfikator objąć apostrofami
słowa kluczowe (ang. keywords) lub słowa
( PWOGT VGNGHQPW ). Tworzenie nazw
zastrze one (ang. reserved words).
obiektów zawierających spacje nie jest
jednak zalecane. Do oddzielania wyrazów Microsoft SQL Server, Oracle, MySQL
lepiej stosować znaki podkreślenia oraz PostgreSQL akceptują zarówno
(PWOGTAVGNGHQPW) lub kombinacje małych komentarze jedno- jak i wieloliniowe
i du ych liter (0WOGT6GNGHQPW). zawarte pomiędzy symbolami komentarza
13. . Szczegóły w dokumentacjach
Składnia SQL-a
Wyra enie jest dowolną poprawną
systemów pod hasłem komentarze
kombinacją symboli, która daje w wyniku
(ang. comments). MySQL dopuszcza
pojedynczą wartość. Mo e zawierać operatory
tak e u ywanie jako oznaczenia początku
matematyczne i logiczne, identyfikatory,
komentarza znaku .
stałe, funkcje, nazwy kolumn itp. Tabela 3.3
przedstawia kilka rodzajów popularnych
wyra eń oraz ich przykłady. Typ ka dego
z wyra eń zostanie szczegółowo omówiony
przy okazji opisywania typów danych.
Tabela 3.3. Typy wyra eń
Wyrażenie Przykład
Przypadek (%CUG) %#5' 9*'0 P 6*'0 ZP '.5' '0
Rzutowanie (%CUV) %#56
FCVCAY[F #5 %*#4#%6'4
Czas i data (CVGVKOG) ECUARQECVMW
Okres (+PVGTXCN) +06'48#. #;
16. Podstawy SQL-a
Tabela 3.4. Kategorie typów danych
Typy danych
Typ danych Przechowywany rodzaj danych
W podrozdziale „Tabele, kolumny i wiersze”
Łańcuch znaków Ciągi znaków
w rozdziale 2. stwierdzono, e dziedzina
Łańcuch bitowy Ciągi bitów
kolumny ogranicza wartości, które mogą być
Liczba dokładna Liczby całkowite i dziesiętne
w danej kolumnie przechowywane. Praktyczną
Liczba przybli ona Liczby zmiennoprzecinkowe
realizacją dziedzin są typy danych. Poni ej
Data i czas Wartości czasu i daty
przedstawiono ich cechy.
Okres Okresy czasu
u Ka da kolumna w tabeli ma określony
pojedynczy typ danych.
u Typ danych mieści się w jednej z kategorii
Wskazówki przedstawionych w tabeli 3.4 (a opisanych
w następnych sześciu podrozdziałach).
Do określania i zmiany typu danych
kolumny oraz dotyczących jej ograniczeń u Typ danych określa wartości, jakie dana
słu ą konstrukcje %4'#6' 6#$.' oraz #.6'4 kolumna akceptuje, oraz operacje, jakie
6#$.' — patrz rozdział 10. mo na na niej wykonać. Np. całkowity typ
danych (KPVGIGT) reprezentuje ka dą liczbę
Projektanci baz danych przywiązują bardzo
całkowitą mieszczącą się w granicach
du ą wagę do określania typów danych dla
określonych przez system DBMS i pozwala
kolumn. Konsekwencją złego wyboru mo e
na wykonywanie zwykłych operacji
być sytuacja, w której niemo liwe będzie
Typy danych
arytmetycznych, m.in.: dodawania,
wpisanie do kolumny określonych wartości,
odejmowania, mno enia i dzielenia. Ale typ
a zmiana typu danych kolumny pociągnie
całkowity nie mo e reprezentować wartości
za sobą utratę danych ju istniejących
nieliczbowych, np. UJCFGPHTGWFG oraz
w kolumnie.
nie umo liwia przeprowadzania operacji
Wiele szczegółów dotyczących znakowych (np. zamiana liter małych na du e).
typów danych ustalają producenci systemów
u Typ danych narzuca sposób sortowania
DBMS. Stąd typy danych SQL-a nie są
kolumny. Liczby całkowite 1, 2 i 10 są
wiernie odwzorowane w konkretnych
sortowane arytmetycznie: , , . Łańcuchy
systemach DBMS, nawet, jeśli nazywają się
znaków , i będą natomiast
identycznie. Nazwy analogicznych lub
posortowane słownikowo i dadzą w wyniku
zbli onych do teoretycznych typów danych
kolejność: , , . Sortowanie
systemów DBMS przedstawiono we
słownikowe polega na kolejnym
wskazówkach w następnych podrozdziałach.
porównywaniu pojedynczych znaków. Stąd
Systemy DBMS często mają rozszerzony
jest przed — znak w porządku
zestaw typów danych pozwalający
słownikowym występuje przed znakiem .
przechowywać specyficzne wartości
np. logiczne czy walutowe. Szczegóły u Wartości wzorców przechowywane są
dotyczące standardowych i rozszerzonych w kolumnach. Wzorzec jest stałą, a nie
typów danych znajdziesz w dokumentacjach wynikiem wyliczenia wartości wyra enia
systemów DBMS pod hasłem typy danych liczbowego. Przykładami wzorców
(ang. data types). Informacje na temat liczbowych są i , wzorcami
sposobu sortowania znajdują się znakowymi są np. i KGNQP[ ,
w podrozdziale „Sortowanie wierszy natomiast #6' i 6+/'
za pomocą frazy ORDER BY” w rozdziale 4. to wzorce daty i czasu.
69
17. Rozdział 3.
Typy łańcuchów znaków
Łańcuchy znaków u ywane są do
reprezentowania tekstu. Łańcuch znaków — lub
po prostu łańcuch — posiada następujące cechy:
u Jest uporządkowanym ciągiem
zawierającym (lub nie) pewną ilość znaków.
u Jego długość mo e być stała lub zmienna.
u Rozró nia wielkość liter (w czasie sortowania
litera # umieszczana jest przed C ).
u W konstrukcjach SQL wzorce łańcuchowe
objęte są apostrofami.
u Jest jednym z typów przedstawionych
w tabeli 3.5.
Tabela 3.5. Typy łańcuchów znaków
Typy łańcuchów znaków
Typ Opis
%*#4#%6'4 Reprezentuje stałą liczbę znaków. Łańcuch przechowywany w kolumnie zdefiniowanej
(znakowy) jako %*#4#%6'4
FNWIQUE mo e zawierać maksymalnie FNWIQUE znaków, gdzie FNWIQUE
jest liczbą całkowitą większą lub równą 1. Maksymalna długość zale y od systemu DBMS.
Jeśli w kolumnie typu %*#4#%6'4
FNWIQUE umieszczony jest łańcuch o długości mniejszej
od FNWIQUE, system DBMS wypełni brakujące miejsca spacjami tak, eby powstał łańcuch
o długości równej dokładnie FNWIQUE. Np. łańcuch ,CEGM w kolumnie typu %*#4#%6'4
przechowywany jest jako ,CEGM . Typy %*#4#%6'4 oraz %*#4 są równowa ne.
%*#4#%6'4 8#4;+0) Reprezentuje zmienną liczbę znaków. Łańcuch przechowywany w kolumnie zdefiniowanej
(znakowy o zmiennej jako %*#4#%6'4 8#4;+0)
FNWIQUE mo e zawierać maksymalnie FNWIQUE znaków, gdzie
długości) FNWIQUE jest liczbą całkowitą większą lub równą 1. Maksymalna długość zale y od systemu
DBMS. W przeciwieństwie do typu %*#4#%6'4, jeśli umieścimy w kolumn ie zdefiniowanej
jako %*#4#%6'4 8#4;+0)
FNWIQUE łańcuch o długości mniejszej ni FNWIQUE, system DBMS
przechowa go w pierwotnej postaci nie wypełniając brakujących miejsc spacjami. Np. łańcuch
,CEGM w kolumnie typu %*#4#%6'4 8#4;+0)
przechowywany jest jako ,CEGM . Typy
%*#4#%6'4 8#4;+0), %*#4 8#4;+0) oraz 8#4%*#4 są równowa ne.
0#6+10#. Ten typ danych odpowiada typowi %*#4#%6'4, z tym e jest on w stanie przechowywać
%*#4#%6'4 ustandaryzowane znaki wielobajtowe czy unikodowe (patrz ramka). W konstrukcjach SQL
(znakowy narodowy) łańcuchy typu 0#6+10#. %*#4#%6'4 zapisuje się tak samo jak łańcuchy typu %*#4#%6'4,
umieszczając jedynie przed pierwszym apostrofem literę 0, np. 0 ¼ . Typy 0#6+10#.
%*#4#%6'4, 0#6+10#. %*#4 oraz 0%*#4 są równowa ne.
0#6+10#. Ten typ danych odpowiada typowi %*#4#%6'4 8#4;+0) z tym, e mo e on przechowywać
%*#4#%6'4 8#4;+0) ustandaryzowane znaki wielobajtowe czy unikodowe (patrz typ 0#6+10#. %*#4#%6'4).
(znakowy narodowy Typy 0#6+10#. %*#4#%6'4 8#4;+0), 0#6+10#. %*#4 8#4;+0) oraz 0%*#4 8#4;+0) są
o zmiennej długości) równowa ne.
70
18. Podstawy SQL-a
Wskazówki
Je eli chcesz w łańcuchu wpisać znak
apostrofu, musisz wpisać go dwukrotnie.
Unikod Np. łańcuchem odpowiadającym
angielskiemu słowu it's jest KV U . Znak
Komputery przechowują znaki (litery,
cyfry, znaki interpunkcyjne, znaki cudzysłowu ( ) jest oddzielnym znakiem
kontrolne oraz inne symbole) w swojej i nie wymaga specjalnego traktowania.
pamięci, przypisując im wartości Długością łańcucha jest liczba całkowita
liczbowe. Sposób zamiany znaków
większa lub równa 0 i mniejsza lub równa
na liczby określa kodowanie. Ró ne
NGPIVJ. Łańcuch niezawierający adnych
języki i ró ne systemy operacyjne
stosują wiele specyficznych sposobów znaków — (dwa apostrofy bez spacji
kodowania. Standardowe łańcuchy między nimi) — nazywany jest łańcuchem
w języku angielskim wykorzystują pustym lub łańcuchem o zerowej długości.
kodowanie ASCII, które umo liwia Łańcuch pusty traktowany jest jako 8#4%*#4
przypisanie liczbom 256 (28) znaków. o długości 0.
Jest to niewiele — za mało, eby
przechować wszystkie litery u ywane Systemy DBMS szybciej ni łańcuchy
w nowo ytnych językach europejskich o zmiennej długości sortują i przetwarzają
Typy łańcuchów znaków
i stanowczo za mało, eby przechować łańcuchy o stałej długości.
chińskie ideogramy.
W Microsoft Accessie łańcuchowymi
Unikod jest zestawem pojedynczych
znaków reprezentującym znaki prawie typami danych są VGMUV oraz PQVC.
wszystkich języków pisanych W Microsoft SQL Serverze są nimi EJCT,
występujących na świecie. Jest on XCTEJCT, VGZV, PEJCT, PXCTEJCT oraz PVGZV.
w stanie zakodować 65536 (216) Oracle oferuje typy: EJCT, XCTEJCT,
znaków. Standard unikodu ogłosiła XCTEJCT, PEJCT, PXCTEJCT oraz PXCTEJCT.
i zarządza nim instytucja o nazwie W MySQL-u są to: EJCT, XCTEJCT, PEJCT,
Unicode Consortium. Aktualna PXCTEJCT, VGZV, VKP[VGZV, OGFKWOVGZV
specyfikacja unikodu jest zawsze i NQPIVGZV, a w PostgreSQL-u EJCT, XCTEJCT
dostępna w najnowszym wydaniu i VGZV.
(internetowym lub drukowanym)
standardu (The Unicode Standard) Oracle puste łańcuchy traktuje jako wartości
pod adresem www.unicode.org. null — patrz podrozdział „Wartości null”.
71
19. Rozdział 3.
Typy łańcuchów bitowych
Łańcuch bitowy reprezentuje liczbę binarną Uwaga dla doświadczonych
i posiada następujące cechy: programistów: oprócz u ywania postaci
binarnej (o podstawie 2) mo na tak e
u Jest uporządkowanym ciągiem zawierającym
stosować dla łańcuchów znaków zapis
pewną liczbę bitów (lub niezawierającą
szesnastkowy (ang. hex lub hexadecimal)
adnego).
— o podstawie 16. System szesnastkowy
u Ka dy bit ma wartość 0 lub 1. wykorzystuje cyfry od 0 do 9 oraz litery
(du e lub małe) od A do F. Jeden znak
u Zazwyczaj jest wykorzystywany do
szesnastkowy odpowiada czterem bitom.
przechowywania danych binarnych, takich W konstrukcjach SQL łańcuchy bitowe
jak pliki programów, cyfrowe dźwięki czy w zapisie szesnastkowym zawierają
obrazy. Długi łańcuch bitowy nazywany jest przed pierwszym apostrofem literę :.
często BLOB (ang. binary large object). Np. łańcuch szesnastkowy : $ jest
u W konstrukcjach SQL łańcuch znaków objęty odpowiednikiem łańcucha binarnego
jest apostrofami. $ .
u Jest jednym z typów przedstawionych W Microsoft Accessie binarnymi
Typy łańcuchów bitowych
w tabeli 3.6. typami danych są VCMPKG oraz QDKGMV
1.'. W Microsoft SQL Serverze
Wskazówki występują DKPCT[, XCTDKPCT[ i KOCIG.
Oracle oferuje typy: TCY, NQPI, TCY, DNQD
Systemy DBMS nie próbują interpretować
oraz DHKNG. W MySQL-u istnieją DNQD,
łańcuchów bitowych, ich znaczenie jest
VKP[DNQD, OGFKWODNQD i NQPIDNQD,
wa ne z punktu widzenia wykorzystujących
a w PostgreSQL-u DKV i XCTDKV.
je aplikacji.
Tabela 3.6. Typy łańcuchów bitowych
Typ Opis
$+6 Reprezentuje stałą liczbę bitów. Łańcuch bitowy przechowywany w kolumn ie zdefiniowanej jako
(bitowy) $+6
FNWIQUE mo e zawierać maksymalnie FNWIQUE bitów, gdzie FNWIQUE jest liczbą całkowitą
większą lub równą 1. Maksymalna długość zale y od systemu DBMS. W odró nieniu od łańcuchów
znakowych typu %*#4#%6'4, próba umieszczenia w kolumn ie $+6
FNWIQUE łańcucha bitowego
o długości mniejszej ni FNWIQUE spowoduje wystąpienie błędu. W konstrukcjach SQL łańcuchy
bitowe zapisywane są podobnie, jak łańcuchy znakowe, jedynie przed pierwszym apostrofem
umieszczona jest litera $. Np. łańcuchem typu $+6
jest $ .
$+6 8#4;+0) Reprezentuje zmienną liczbę bitów. Łańcuch bitowy przechowywany w kolumnie zdefiniowanej
(bitowy jako $+6 8#4;+0)
FNWIQUE mo e zawierać maksymalnie FNWIQUE bitów, gdzie FNWIQUE jest
o zmiennej liczbą całkowitą większą lub równą 1. Maksymalna długość zale y od systemu DBMS. Podobnie
długości) jak w przypadku łańcuchów znakowych typu %*#4 8#4;+0), jeśli umieścimy w kolumnie zdefin iowanej
jako $+6 8#4;+0)
FNWIQUE łańcuch o długości mniejszej ni FNWIQUE, system DBMS przechowa go
w pierwotnej postaci nie wypełniając brakujących miejsc spacjami. Np. łańcuch $ typu $+6
8#4;+0)
przechowywany jest jako $ .
72
20. Podstawy SQL-a
Typy liczb dokładnych
Typy liczb dokładnych reprezentują dokładne
wartości liczbowe. Dokładna wartość liczbowa
posiada następujące cechy:
u Mo e być ujemna, dodatnia lub równa zero.
u Jest liczbą całkowitą lub dziesiętną.
Liczby całkowite nie zawierają
przecinka dziesiętnego (kropki w zapisie
komputerowym), np. –39, 0, 62262. Liczby
dziesiętne zawierają tak e cyfry po prawej
stronie przecinka np. –22.06, 0.0, 0.0003,
12.34.
u Posiada stałą rozdzielczość i dokładność.
Rozdzielczością określa się liczbę cyfr
znaczących wykorzystywanych do
przedstawiania liczby — liczba ta obejmuje
zarówno cyfry z prawej, jak i z lewej strony
Typy liczb dokładnych
przecinka dziesiętnego. Dokładność jest
to liczba cyfr po przecinku dziesiętnym.
Dokładność oczywiście nie mo e przekroczyć
rozdzielczości. Ustalenie dokładności
na poziomie zero powoduje przedstawienie
liczby w postaci całkowitej. We wskazówkach
zawarto kilka przykładów.
u Nale y do jednego z typów przedstawionych
w tabeli 3.7.
Tabela 3.7. Typy liczb dokładnych
Typ Opis
07/'4+% Reprezentuje liczbę dziesiętną. Liczby dziesiętne są przechowywane w kolumnach zdefiniowanych
(liczbowa) jako 07/'4+%
TQFKGNEQUE= FQMNCFPQUE?. TQFKGNEQUE jest liczbą większą lub równą 1
— maksymalna wielkość zale y od systemu DBMS. FQMNCFPQUE jest liczbą z przedziału od 0 do
TQFKGNEQUE. Jeśli FQMNCFPQUE nie jest jawnie określona, domyślnie przyjmowana jest jako 0
(co powoduje, e w rzeczywistości typ staje się całkowity).
'%+/#. Ten typ danych jest analogiczny do typu 07/'4+%, niektóre systemy DBMS traktują je
(dziesiętna) równowa nie. Ró nica jest taka, e system DBMS mo e określić TQFKGNEQUE liczby
jako większą ni ustalono to w definicji '%+/#.
TQFKGNEQUE= FQMNCFPQUE?
— TQFKGNEQUE jest min imalnym, a nie rzeczywistym rozmiarem przedstawianej liczby,
tak jak było to w przypadku typu 07/'4+%. Słowa '% i '%+/#. są synonimami.
+06')'4 Reprezentuje liczbę całkowitą. Minimalna i maksymalna wartość liczby, jaka mo e być
(całkowita) przechowywana w kolumnie zdefiniowanej jako +06')'4, zale y od systemu DBMS. Defin icja
typu +06')'4 nie wymaga określania argumentów. Słowa +06')'4 oraz +06 są synonimami.
5/#..+06 Ten typ jest takim samym typem jak +06')'4, posiada tylko wę szy zakres dopuszczalnych
(całkowita krótka) wartości — zale ny od systemu DBMS. Definicja tego typu nie wymaga określania argumentów.
73
21. Rozdział 3.
Wskazówki Tabela 3.8. Przykłady rozdzielczości i dokładności
dla liczby 123.89
Tabela 3.8 przedstawia sposób, w jaki liczba
Definicja typu Przechowywana wartość
123.89 jest przechowywana dla ró nych
wartości rozdzielczości i dokładności. 07/'4+%
07/'4+%
Wartości liczbowych nie umieszcza się
07/'4+%
w cudzysłowach.
07/'4+%
Jeśli liczby nie są stosowane do adnych 07/'4+%
obliczeń (np. numery telefonów czy 07/'4+%
kody pocztowe), lepiej przechowywać
07/'4+%
Poza zakresem rozdzielczości
je jako łańcuchy znaków. Zapobiegnie
07/'4+%
Poza zakresem rozdzielczości
to ewentualnej utracie informacji
— na przykład przechowanie kodu
jako liczby całkowitej spowoduje utratę
początkowych zer.
Obliczenia wykonywane tylko na liczbach
całkowitych są znacznie szybsze od
obliczeń, których argumentami są liczby
Typy liczb dokładnych
dziesiętne lub zmiennoprzecinkowe.
Typami liczb dokładnych
w Microsoft Accessie są FKGUKúVPG, NKEDC
EC MQYKVC, DCLV oraz NKEDC EC MQYKVC
F WIC. Microsoft SQL Server oferuje typy:
PWOGTKE, FGEKOCN, KPVGIGT, UOCNNKPV, DKIKPV
oraz VKP[KPV. W Oracle’u wystepują:
PWOGTKE, FGEKOCN, KPVGIGT, UOCNNKPV
oraz PWODGT. MySQL oferuje typy PWOGTKE,
FGEKOCN, KPVGIGT, UOCNNKPV, DKIKPV,
OGFKWOKPV i VKP[KPV, natomiast PostgreSQL
PWOGTKE, FGEKOCN, KPVGIGT, UOCNNKPV
oraz DKIKPV.
74
22. Podstawy SQL-a
Typy liczb przybliżonych
Typy liczb przybli onych słu ą do u Posiada stałą rozdzielczość, ale nie posiada
reprezentowania przybli onych wartości dokładności w ścisłym sensie tego słowa
liczbowych. Przybli ona wartość liczbowa (określają ją znak oraz wartość eksponenta).
posiada następujące cechy: Rozdzielczość jest liczbą bitów
wykorzystywanych do zapisu mantysy.
u Mo e być liczbą ujemną, dodatnią
Aby przekształcić rozdzielczość bitową na
lub równą zero.
dziesiętną, nale y ją pomno yć przez liczbę
u Jest traktowana jako przybli enie liczby 0.30103. Przekształcenie rozdzielczości
zmiennoprzecinkowej (rzeczywistej). dziesiętnej na bitową mo na uzyskać,
mno ąc ją przez liczbę 3.32193. Na przykład
u Zazwyczaj wykorzystywana jest do
24 bity oznaczają rozdzielczość 7-cyfrową,
reprezentowania liczb bardzo du ych a 53 bity to rozdzielczość 15-cyfrowa.
lub bardzo małych oraz do obliczeń
naukowych. u Nale y do jednego z typów wymienionych
w tabeli 3.9.
u Wyra ana jest w postaci naukowej.
Wartość w notacji naukowej zapisuje się Wskazówki
jako liczbę dziesiętną mno oną przez
Typy liczb przybliżonych
całkowitą potęgę liczby 10. Du a litera ' Wartości liczbowych nie umieszcza się
jest symbolem eksponenta np. 2.5E2 = w cudzysłowie.
2.5∗102 = 250. Mantysą w takim zapisie Typami liczb przybli onych
są cyfry znaczące (w podanym przykładzie w Microsoft Accessie są RQLGF[PEC RTGE[LC
2.5), natomiast eksponentem jest i RQFYÎLPC RTGE[LC. W Microsoft SQL
wykładnik potęgi liczby 10 (w podanym Serverze występują typy HNQCV i TGCN. Oracle
przykładzie 2). Zarówno mantysa, jak oferuje typy HNQCV, TGCN, FQWDNG RTGEKUKQP
i eksponent, mogą mieć określony znak: oraz PWODGT. W MySQL-u istnieją typy HNQCV,
–2.5E–2 = –2.5∗10–2 = –0.025. TGCN i FQWDNG, natomiast w PostgreSQL-u
TGCN i FQWDNG RTGEKUKQP.
Tabela 3.9. Typy liczb przybli onych
Typ Opis
(.1#6 Reprezentuje liczbę zmiennoprzecinkową. Liczba zmiennoprzecinkowa przechowywana
(zmiennoprzecinkowa) w kolumnie zdefiniowanej jako (.1#6
TQFKGNEQUE posiada określoną w definicji
rozdzielczość — liczbę większą lub równą 1 wyra ającą ilość bitów, a nie cyfr. Maksymalna
rozdzielczość zale y od systemu DBMS.
4'#. Ten typ jest analogiczny do typu (.1#6, z tym e rozdzielczość ustala system DBMS.
(rzeczywista) Liczby typu 4'#. często nazywa się liczbami pojedynczej precyzji. Definicja typu 4'#.
nie wymaga określania argumentów.
17$.' 24'%+5+10 Jest to taki sam typ, jak (.1#6. Ró nica jest tylko taka, e rozdzielczość typu 17$.'
(podwójnej precyzji) 24'%+5+10 ustalana przez system DBMS jest większa od rozdzielczości typu 4'#..
Definicja typu 17$.' 24'%+5+10 nie wymaga określania argumentów.
75
23. Rozdział 3.
Typy daty i czasu
Typy daty i czasu, jak sama nazwa u Reguły rządzące kalendarzem gregoriańskim
wskazuje, słu ą do reprezentowania dat określają w naturalny sposób format zapisu
i czasu. Wartości tych typów posiadają dat. Systemy DBMS odrzucają wartości,
następujące cechy: których nie mogą zinterpretować jako daty.
u Są określane względem czasu UTC u Wartości czasowe oparte są na 24-godzinnym
(ang. Universal Coordinated Time) formacie czasu (np. 13:00 zamiast 1:00
zwanego oficjalnie czasem uniwersalnym po południu).
Greenwich (ang. GMT — Greenwich
u Łączniki () oddzielają kolejne części dat,
Mean Time). Standard SQL-92 wymaga,
natomiast dwukropki () oddzielają kolejne
aby ka da sesja SQL posiadała domyślne
części wartości czasowych. Jeśli jedna wartość
przesunięcie czasowe względem czasu
zawiera jednocześnie datę i czas, to są one
UTC, które jest wykorzystywane
oddzielone spacją.
w trakcie trwania sesji. Na przykład
przesunięciem dla strefy czasowej u Nale ą do jednego z typów przedstawionych
San Francisco w Kalifornii jest –8. w tabeli 3.10.
Tabela 3.10. Typy daty i czasu
Typ Opis
Typy daty i czasu
#6' Reprezentuje datę. Data przechowywana w kolumnie zdefin iowanej jako #6' zawiera trzy
(data) liczby całkowite: rok (;'#4), miesiąc (/106*) i dzień (#;) sformatowane według schematu
rrrr-mm-dd (długość 10), np. . Tabela 3.11 przedstawia poprawne wartości
dla pól tego typu. Definicja typu #6' nie wymaga określania argumentów.
6+/' Reprezentuje czas dnia. Czas przechowywany w kolumnie zdefiniowanej jako 6+/' zawiera
(czas) trzy pola: godzinę (*174), minuty (/+076') oraz sekundy (5'%10) sformatowane według
szablonu gg:mm:ss (długość 8), np. . Opcjonalnie mo na zdefiniować kolumnę
jako 6+/'
TQFKGNEQUE, gdzie TQFKGNEQUE będzie liczbą większą lub równą zero
oznaczającą liczbę cyfr określających części sekundy. Maksymalna TQFKGNEQUE zale y
od systemu DBMS, natomiast mini malna wynosi 6. Wartości *174 oraz /+076' są liczbami
całkowitymi, a 5'%10 jest liczbą dziesiętną. Szablonem wartości czasu zawierającym
ułamkowe części sekund jest gg:mm:ss.ssss…(długość 9 + liczba cyfr ułamkowych),
np. . Tabela 3.11 przedstawia poprawne wartości pól tego typu.
6+/'56#/2 Reprezentuje kombinację wartości #6' i 6+/' oddzielonych spacją. Formatem wartości
(stempel czasowy) tego typu jest rrrr-mm-dd gg:mm:ss (długość 19), np. . Mo na tak e
określić za pomocą definicji 6+/'56#/2
TQFKGNEQUE ułamkowe części sekund — format
zapisu wygląda wtedy następująco: rrrr-mm-dd gg:mm:ss.ssss… (długość 20 + liczba cyfr
ułamkowych).
6+/' 9+6* 6+/' 10' Ten typ jest typem analogicznym do typu #6#, z tym e zawiera dodatkowe pole
(czas ze strefą czasową) — 6+/'A10'A1((5'6 (przesunięcie strefy czasowej) — określające przesunięcie w godzinach
względem czasu UTC. Wartość 6+/'A10'A1((5'6 sformatowana jest jako +06'48#. *174
61 /+076' (patrz następny podrozdział) i mo e zawierać wartości przedstawione w tabeli
3.11. Uwzględnienie strefy czasowej osiąga się poprzez dodanie do wartości typu 6+/'
zwrotu: #6 6+/' 10' VKOGAQPGAQHHUGV, np. #6 6+/' 10' . Drugą
mo liwością jest dodanie zwrotu #6 .1%#., co wskazuje, e strefa czasowa powinna być
domyślna dla całej sesji, np. #6 .1%#.. Jeśli fraza #6 nie jest jawnie określona,
wszystkie wartości czasu są domyślnie przyjmowane jako #6 .1%#..
6+/'56#/2 9+6* Ten typ odpowiada typowi 6+/'56#/2, zawiera tylko dodatkowe pole 6+/'A10'A1((5'6
6+/' 10' określające przesunięcie w godzinach względem czasu UTC. Zasady składniowe wyra eń tego
(stempel czasowy typu są analogiczne, co w przypadku typu 6+/' 9+6* 6+/' 10', trzeba jedynie na początku
ze strefą czasową) umieścić datę np. #6 6+/' 10' .
76
24. Podstawy SQL-a
Tabela 3.11. Pola typu daty i czasu Wskazówki
Pole Poprawna wartość Opis pobierania czasu systemowego
;'#4 od do znajdziesz w podrozdziale „Pobieranie
/106* od do bie ącej daty i czasu” w rozdziale 5.
#; od do Wartości daty i czasu mo na porównywać,
*174 od do jeśli zawierają te same pola (patrz
/+076' od do „Filtrowanie wierszy za pomocą frazy
5'%10 od do WHERE” w rozdziale 4. oraz „Obliczenia
(patrz wskazówki) operujące na wartościach daty i czasu”).
6+/'A10'A1((5'6 od do
Pole 5'%10 mo e zawierać wartości
mniejsze lub równe 61.999… (zamiast
59.999…), co pozwala na uwzględnianie
w określonej minucie „sekund przestępnych”
w celu zachowania zgodności zegara
zdefiniowanego przez człowieka
z naturalnym zegarem Ziemi.
Wzorce daty i czasu wpisuje się,
Typem daty i czasu w Microsoft rozpoczynając od słowa oznaczającego typ,
Accessie jest FCVCIQFKPC. Microsoft potem następuje spacja i wartość daty
Typy daty i czasu
SQL Server oferuje typy FCVGVKOG oraz lub czasu umieszczona w apostrofach,
UOCNNFCVGVKOG. W Oracle’u są to FCVG czyli #6' TTTTOOFF , 6+/' IIOOUU
i VKOGUVCOR. MySQL oferuje typy FCVG, lub 6+/'56#/2 TTTTOOFF IIOOUU .
VKOG, FCVGVKOG i VKOGUVCOR, natomiast
Standard SQL-92 nie przewiduje mo liwości
PostgreSQL FCVG, VKOG i VKOGUVCOR.
przechowywania dat p.n.e. – przed naszą
Systemy DBMS pozwalają na wpisywanie erą czy przed Chrystusem (p. Ch), ale Twój
wartości dat w formatach miesiąc-dzień- system DBMS mo e taką mo liwość
rok, dzień-miesiąc-rok oraz w innych, oferować.
a wartości czasu w postaci A.M./P.M..
Stemple czasowe są w praktyce często
Format, w jakim wartości dat i czasu są
wykorzystywane do konstruowania
wyświetlane mo e ró nić się od tego,
unikalnych kluczy lub zaznaczania
w jakim zostały wprowadzone.
zdarzeń związanych z wierszem,
W Microsoft Accessie wzorców dat i czasu w którym występują.
nie umieszcza się w apostrofach, lecz
Typ danych 6+/' 9+6* 6+/' 10' właściwie
pomiędzy znakami oraz nie wpisuje się
nie ma sensu, gdy w rzeczywistości strefy
nazwy typu.
czasowe nie są jednoznaczne bez określonej
W 4Microsoft SQL Serverze tak e nie daty (przesunięcie czasowe zmienia się
wpisuje się typu danych przed wzorcami w ciągu roku). Lepiej jest stosować typ
dat i czasu. 6+/'56#/2 9+6* 6+/' 10'.
77
25. Rozdział 3.
Typy interwałowe (okresowe)
Zgodność systemów DBMS ze standardem SQL-92
w zakresie typów okresowych jest niewielka, stąd
niniejszy rozdział nale y traktować jako w du ej
mierze teoretyczny. Systemy DBMS posiadają
własne rozszerzone typy danych oraz funkcje
słu ące do obliczania okresów i wykonywania
obliczeń na wartościach daty i czasu.
Typy okresowe reprezentują okresy pomiędzy
określonymi datami lub godzinami. Wartość
okresowa posiada następujące cechy:
u Przechowuje okres czasu, jaki upływa pomiędzy
dwoma wartościami daty lub czasu. Np. pomiędzy
godzinami 09:00 a 13:30 okres wynosi 04:30.
Okres powstaje po odjęciu od siebie dwóch
wartości typu daty lub czasu.
Typy interwałowe (okresowe)
u Mo e być dodawana lub odejmowana od wartości
daty lub czasu — patrz „Obliczenia operujące
na wartościach daty i czasu” w rozdziale 5.
u Zawiera takie same pola, jak wartości daty i czasu
(;'#4, *174, 5'%10 itd.), ale mo e być poprzedzona
znakiem
(w przód) lub (w tył) w celu
określenia kierunku upływu czasu. Znaki
oddzielające kolejne pola są takie same,
jak dla wartości daty i czasu.
u Występuje w dwóch postaciach: jako okres rok-
miesiąc lub jako dzień-czas. Okres pierwszego
typu wyra ony jest liczbą lat i całkowitą liczbą
miesięcy, natomiast okres typu dzień-czas
wyra a liczbę dni, godzin, minut i sekund.
u Mo e posiadać kwalifikator jedno- lub
kilkupolowy. Kwalifikator jednopolowy
określany jest po prostu jako ;'#4, /106*, #;,
*174, /+076' lub 5'%10. Natomiast kwalifikator
wielopolowy zapisuje się w następującej postaci:
RQNGARQECVMQYG 61 RQNGAMQPEQYG
u RQNGARQECVMQYG mo e być polem ;'#4, #;, *174
lub /+076', a RQNGAMQPEQYG jednym z pól: ;'#4,
/106*, #;, *174, /+076' lub 5'%10. RQNGAMQPEQYG
musi oznaczać mniejszą jednostkę czasu,
ni RQNGARQECVMQYG.
78
26. Podstawy SQL-a
Tabela 3.12. Typy okresowe Kolumna jednopolowa zdefiniowana jako
Typ Opis +06'48#. *174 mo e przechowywać okresy
typu „4 godziny” czy „25 godzin”. Kolumna
Year-month Takie okresy zawierają tylko ilość lat, ilość
miesięcy lub obie z nich. Poprawnymi wielopolowa zdefiniowana jako +06'48#.
(rok-miesiąc)
kolumnami są: +06'48#. ;'#4, +06'48#. #; 61 /+076' jest zdolna do przechowywania
;'#4
TQFKGNEQUE, +06'48#. /106*, wartości typu „2 dni, 5 godzin i 10 minut”.
+06'48#. /106*
TQFKGNEQUE,
+06'48#. ;'#4 61 /106*, +06'48#. u Kolumna jednopolowa mo e posiadać
;'#4
TQFKGNEQUE 61 /106*. rozdzielczość określającą długość (liczbę
Day-time Okresy tego typu mogą zawierać ilość dni, pozycji) pola, np. +06'48#. *174
. Jeśli
(dzień-czas) godzin, minut, sekund lub ró ne ich rozdzielczość nie jest jawnie określona,
kombinacje. Przykładami poprawnych przyjmowana jest domyślnie jako 2.
typów kolumn są: +06'48#. /+076',
+06'48#. #;
TQFKGNEQUE,
Pole typu 5'%10 mo e mieć dodatkowo
+06'48#. #; 61 *174, +06'48#. określoną rozdzielczość ułamkową, czyli
#;
TQFKGNEQUE 61 5'%10, liczbę cyfr po przecinku dziesiętnym — np.
+06'48#. /+076'
TQFKGNEQUE INTERVAL SECOND(5, 2). Jeśli nie jest
61 5'%10
TQFKGNEQUEAWNCOMQYC. ona jawnie określona, przyjmowana jest
domyślnie jako 6.
Typy interwałowe (okresowe)
Kolumna wielopolowa mo e mieć określoną
rozdzielczość dla pola RQNGARQECVMQYG,
ale nie dla RQNGAMQPEQYG (chyba, e RQNGA
MQ EQYG jest typu 5'%10, wtedy mo na
określić rozdzielczość ułamkową), np.
+06'48#. #;
61 /+076' lub +06'48#.
/+076'
61 5'%10
.
u Nale y do jednego z typów przedstawionych
w tabeli 3.12.
Wskazówki
Aby wprowadzić wzorzec okresu, nale y
wpisać słowo +06'48#., następnie spację,
a potem wartość okresu umieszczoną
w apostrofach, np. +06'48#.
dla wartości 15 lat i 3 miesięcy lub +06'48#.
dla określenia okresu 22
godzin, 6 minut i 5,5 sekundy temu.
Microsoft Access i Microsoft SQL
Server oraz MySQL nie akceptują
okresowych typów danych. Oracle
i PostgreSQL oferują typ KPVGTXCN.
79
27. Rozdział 3.
Wartości null
Kiedy zestaw Twoich danych nie jest kompletny, u Chocia wartości null nigdy nie są sobie
jako oznaczenia brakującej czy nieznanej równe, to jednak słowo kluczowe +56+0%6
wartości mo esz u yć wartości pustej — null. traktuje wszystkie wartości null znajdujące
Wartość null posiada następujące cechy: się w danej kolumnie jako duplikaty
— patrz „Eliminowanie powtarzających
u W konstrukcjach SQL wartość null jest
się wierszy za pomocą słowa kluczowego
reprezentowana przez słowo kluczowe 07...
DISTINCT” w rozdziale 4.
u Wartość określana jest jako null, jeśli nigdy
u W czasie sortowania kolumny
nie będzie ona znana, jeśli istnieje mo liwość,
zawierającej wartości null mogą one
e będzie określona później lub jeśli jest
być większe lub mniejsze od wszystkich
nieodpowiednia (wartość null mo na sobie
innych wartości występujących
wyobrazić raczej jako zaznaczenie wolnego
w kolumnie — zale y to od systemu
miejsca ni jako rzeczywistą wartość).
DBMS. Patrz „Sortowanie wierszy za
u Wartość null to nie to samo co zero, łańcuch pomocą frazy ORDER BY” w rozdziale 4.
zawierający tylko puste miejsca czy łańcuch
u Wartości null „propagują się” poprzez
pusty ( ). Wartość null w kolumnie EGPC
obliczenia. Wynik ka dego wyra enia
nie oznacza, e dana pozycja nie ma ceny
zawierającego wartość null wynosi null:
lub e cena wynosi zero — oznacza to,
28. 07.. 07... Patrz rozdział 5.
e cena jest nieznana lub nie została
Wartości null
jeszcze ustalona (wyjątkiem jest Oracle, u Funkcje agregujące, takie jak 57/
, #8)
który akceptuje puste łańcuchy — patrz czy /#:
ignorują w trakcie obliczeń
wskazówka DBMS). wartości null. Patrz rozdział 6.
u Wartości null nie nale ą do adnego u Podczas grupowania za pomocą frazy
typu danych i mogą być umieszczane )4172 $; kolumn zawierających wartości
we wszystkich kolumnach z wyjątkiem tych null, są one wszystkie umieszczane
zdefiniowanych jako 016 07.. — patrz w jednej grupie — patrz „Grupowanie
„Nie akceptowanie w kolumnach wartości wierszy za pomocą frazy GROUP BY”
null za pomocą wyra enia NOT NULL” w rozdziale 6.
w rozdziale 10.
u Wartości null mają wpływ na wynik
u Wartości null mogą być wykrywane złączeń — patrz „Złączenia” w rozdziale 7.
za pomocą wyra enia +5 07.. — patrz
u Wartości null mogą sprawiać kłopoty
„Sprawdzanie występowania wartości null
w przypadku podzapytań — patrz
za pomocą słowa kluczowego IS NULL”
„Wartości null w podzapytaniach”
w rozdziale 4.
w rozdziale 8.
u Wartości null nie są równe adnym innym.
Nie mo na określić czy wartość null jest
równa jakiejś innej wartości, nawet innej
wartości null. Taka sytuacja jest punktem
wyjścia do logiki trójwartościowej — patrz
„Łączenie i negacja warunków za pomocą
operatorów AND, OR i NOT” w rozdziale 4.
80
29. Podstawy SQL-a
5'.'%6 /#:
KFACW Wskazówki
(41/ CWVQT[
9*'4' PCYKUMQACW ::: Z wartościami null związanych jest tyle
problemów i komplikacji — wa niejsze
/#:
KFACW z nich zostały opisane w niniejszym
podrozdziale — e niektórzy znawcy baz
07..
danych zalecają u ytkownikom rezygnację
Rysunek 3.3. Otrzymanie wartości null z kolumny, z ich u ywania (zamiast tego proponują
która nie pozwala na istnienie wartości null
stosowanie wartości domyślnych lub innych
znaczników braku danych). Chocia więc
do niektórych zastosowań wartości null
są niezbędne, to jednak zalecana jest jak
największa powściągliwość w ich u ywaniu.
Sposób wyświetlania w wynikach Konkluzja jest taka: wyniki zawierające
wartości null zale y od systemu DBMS. wartości null nale y interpretować ostro nie.
Wartości puste mogą być wyświetlane Przeczytaj tak e podrozdziały „Sprawdzanie
np. jako 07..,
07.., 07.. lub jako występowania wartości null za pomocą
puste pola. funkcji COALESCE()” oraz „Porównywanie
Obecna wersja Oracle’a traktuje puste wyra eń za pomocą funkcji NULLIF()”
łańcuchy ( ) jako wartości null. Takie w rozdziale 5.
rozwiązanie w kolejnych wersjach raczej Określenie wartość null nie jest precyzyjne
Wartości null
nie będzie stosowane, stąd Oracle ju — null oznacza brak wartości.
teraz radzi nie opierać się na takiej
jednoznaczności. Mo e to spowodować Słowa kluczowego 07.. nie nale y
problemy z konwersjami danych do umieszczać w apostrofach — system
innych systemów DBMS. W przykładowej DBMS zinterpretuje je wtedy jako łańcuch
bazie danych kolumna KOKGACW w tabeli znaków 07.. , a nie jako wartość pustą.
CWVQT[ zdefiniowana jest jako 016 07... Wartość null mo na tak e otrzymać
W Oracle’u imieniem autora o nazwisku z kolumny, która na istnienie wartości
Sitkowski (autor #) jest pojedyncza null nie pozwala. Kolumna KFACW w tabeli
spacja ( ), natomiast w innych systemach CWVQT[ nie pozwala na istnienie wartości
w tym miejscu występuje pusty łańcuch null, ale konstrukcja 5'.'%6 przedstawiona
( ). Informacje na temat przykładowej na rysunku 3.3 zwraca jako wartość
bazy danych znajdują się w rozdziale 2. maksymalną KFACW właśnie wartość pustą.
81