Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00634 007678 11066063 na godz. na dobę w sumie
SQL. Szybki start - książka
SQL. Szybki start - książka
Autor: Liczba stron: 416
Wydawca: Helion Język publikacji: polski
ISBN: 83-7361-037-5 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych >> sql - programowanie
Porównaj ceny (książka, ebook, audiobook).
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.:

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

IDZ DO IDZ DO PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ SPIS TREĎCI SPIS TREĎCI SQL. Szybki start KATALOG KSI¥¯EK KATALOG KSI¥¯EK KATALOG ONLINE KATALOG ONLINE ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG TWÓJ KOSZYK TWÓJ KOSZYK DODAJ DO KOSZYKA DODAJ DO KOSZYKA CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE ZAMÓW INFORMACJE O NOWOĎCIACH O NOWOĎCIACH ZAMÓW CENNIK ZAMÓW CENNIK CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: helion@helion.pl Autor: Chris Fehily T³umaczenie: Jaros³aw Gierlicki ISBN: 83-7361-037-5 Tytu³ orygina³u: SQL: Visual QuickStart Guide Format: B5, stron: 416 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 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 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 Spis treści Spis treści Wprowadzenie 9 Rozdział 1. Wybrane systemy zarządzania bazami danych 23 Uruchamianie programów SQL...................................................e........ 24 Microsoft Access ...................................................e............................ 26 Microsoft SQL Server..................................................e....................... 29 Oracle ...................................................e............................................ 32 MySQL ...................................................e.......................................... 35 PostgreSQL...................................................e..................................... 37 Rozdział 2. Rozdział 3. Rozdział 4. 39 Relacyjny model danych Tabele, kolumny i wiersze ...................................................e............... 40 Klucze główne ...................................................e............................... 44 Klucze obce...................................................e.................................... 46 Relacje ...................................................e........................................... 48 Normalizacja...................................................e................................... 51 Przykładowa baza danych ...................................................e................ 56 S p i s t r e ś c i Podstawy SQL-a 63 Składnia SQL-a ...................................................e.............................. 64 Typy danych ...................................................e................................... 69 Typy łańcuchów znaków...................................................e.................. 70 Typy łańcuchów bitowych ...................................................e............... 72 Typy liczb dokładnych...................................................e..................... 73 Typy liczb przybliżonych...................................................e................. 75 Typy daty i czasu ...................................................e........................... 76 Typy interwałowe (okresowe) ...................................................e.......... 78 Wartości null ..................................................e................................... 80 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 i c ś e r t s i p S 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 CHARACTER_LENGTH() ...................................................e............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 ...................................................e......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() ...................................................e....153 Wyrażenia porównujące oparte na funkcji NULLIF()...........................154 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 Rozdział 6. 6 Rozdział 7. Rozdział 8. Spis treści 179 Pobieranie danych z wielu tabel Kwalifikowanie nazw kolumn ...................................................e.........180 Tworzenie aliasów tabel za pomocą słowa kluczowego AS....................182 Złączenia ...................................................e.......................................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ń...................................................e....................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 253 Podzapytania Idea podzapytań ...................................................e.............................254 Składnia podzapytań ...................................................e......................256 Podzapytania a złączenia...................................................e.................257 Podzapytania proste i skorelowane ...................................................e..261 Podzapytania skorelowane ...................................................e.............263 Kwalifikowanie nazw kolumn występujących w podzapytaniach..........267 Wartości null w podzapytaniach ...................................................e......268 Wykorzystywanie podzapytań jako wyrażeń definiujących kolumny.....270 Dokonywanie porównań z wartością zwracaną przez podzapytanie za pomocą operatora porównania...................................................e.....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 S p i s t r e ś c i Rozdział 9. Wstawianie, modyfikowanie i usuwanie wierszy 303 Wyświetlanie definicji kolumn tabel...................................................e304 Wstawianie wierszy za pomocą konstrukcji INSERT ..........................307 Modyfikowanie wierszy za pomocą konstrukcji UPDATE ...................314 Usuwanie wierszy za pomocą konstrukcji DELETE ............................319 7 Spis treści Rozdział 10. Tworzenie, modyfikowanie i usuwanie tabel 323 Tworzenie tabel...................................................e..............................324 Idea atrybutów ...................................................e...............................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 ...................................................e..351 Tworzenie nowych tabel na bazie tabel istniejących 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 ...................................................e................388 Dodatek A 393 Tworzenie przykładowej bazy danych publikacje ................................394 Skorowidz 405 i c ś e r t s i p S 8 Podstawy SQL-a 3 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ć 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. P o d s t a w y S Q L - a 63 Rozdział 3. Składnia SQL-a Rysunek 3.1 przedstawia przykład konstrukcji SQL. Nie zwracaj na razie uwagi na jej znaczenie (semantykę) — zadaniem tego przykładu jest wyjaśnienie zasad składni SQL-a. 1. Komentarz. Komentarz jest opcjonalnym tekstem wpisywanym w osobnej linii w celu wyjaśnienia działania programu. Początek komentarza oznaczają dwa łączniki — następujący po nich tekst jest ignorowany przez system DBMS. Komentarz kończy się wraz z końcem linii. 2. Konstrukcja SQL. Konstrukcja SQL jest określoną kombinacją słów poprzedzonych słowem kluczowym. Słowa są niepodzielnymi elementami języka SQL — pod względem gramatycznym nie można rozłożyć ich na mniejsze części. Do tej grupy należą słowa kluczowe, identyfikatory, operatory, wzorce oraz inne słowa (opisane w dalszej części książki). 3. Frazy. Konstrukcja SQL składa się z jednej lub kilku fraz. Mówiąc ogólnie, fraza to fragment konstrukcji SQL rozpoczynający się słowem kluczowym. Frazy mogą być wymagane lub opcjonalne i muszą występować w określonej kolejności. Przedstawiony przykład zawiera cztery frazy: 5 . 6, (41/, 9* 4 i 14 4$;. a - L Q S a i n d a ł k S 4. Słowa kluczowe. Słowa kluczowe, zwane także słowami zastrzeżonymi, są zarezerwowane przez SQL, ponieważ mają w tym języku specjalne znaczenie. Próba użycia słowa kluczowego w sposób inny niż pozwala na to jego kontekst (np. jako identyfikator) spowoduje wystąpienie błędu. Tabela 3.1 zawiera słowa kluczowe języka SQL. W tabeli 3.2 umieszczono potencjalne słowa kluczowe języka SQL, które na razie nie są zarezerwowane, ale w przyszłości mogą się takimi stać. 5. Identyfikatory. Identyfikatory są to słowa, których Ty (lub projektant bazy danych) używasz do nazywania obiektów bazy danych takich jak tabele, kolumny, aliasy, indeksy oraz perspektywy (widoki). Identyfikatorami nie mogą być słowa kluczowe, a ich długość może wynosić maksymalnie 128 znaków. SQL dopuszcza używanie w identyfikatorach wszystkich znaków i symboli zestawu znaków systemu Windows (włączając znaki zestawu Western oraz ideogramy), jednak zanim zaczniesz ich używać, zapoznaj się ze wskazówkami. W przedstawionym przykładzie identyfikatorami są KOKGACW, PCYKUMQACW, CWVQT[ oraz YQL. 6. Zakańczający średnik. Każda konstrukcja SQL kończy się średnikiem. Rysunek 3.1. Konstrukcja SQL zawierająca komentarz 64 Podstawy SQL-a Tabela 3.1. Słowa kluczowe języka SQL #$51.76 # 6+10 # #.. #..1 #6 #.6 4 #0 #0; #4 #5 #5 #55 46+10 #6 #76*14+ #6+10 #8) $ )+0 $ 69 0 $+6 $+6A. 0)6* $16* $; #5 # #5 # #5 #56 #6#.1) *#4 *#4# 6 4 4155 744 06 744 06A #6 744 06A6+/ 744 06A6+/ 56#/2 744 06A75 4 74514 #6 #; #..1 #6 +/#. .#4 (#7.6 ( 44#$. ( 44 . 6 5 5 4+$ 5 4+2614 +#)0156+ 5 +5 100 6 +56+0 6 1/#+0 17$. 412 .5 0 *#4A. 0)6* 0  : *#4# 6 4A. 0)6* * - .15 1#. 5 1..#6 1..#6+10 1.7/0 1//+6 100 6 100 6+10 10564#+06 10564#+065 106+07 108 46 144 5210 +0) 1706 4 #6 5 #2 : 26 : 26+10 : : 76 :+565 :6 40#. :64# 6 (#.5 ( 6 * (+456 (.1#6 (14 (14 +)0 (170 (41/ (7.. ) 6 ).1$#. )1 )16 )4#06 )4172 *#8+0) *174 + 06+6; +// +#6 +0 +0 + #614 +0+6+#..; +00 4 +0276 016 07.. 07..+( 07/ 4+ 1 6 6A. 0)6* 1( 10 10.; 12 0 126+10 14 14 4 176 4 176276 18 4.#25 +05 05+6+8 2# +05 46 +06 +06 ) 4 +06 45 6 +06 48#. +061 +5 +51.#6+10 ,1+0 - ; .#0)7#) .#56 . # +0) . (6 . 8 . .+- .1 #. .19 4 /#6 * /#: /+0 /+076 /1 7. /106* 0#/ 5 0#6+10#. 0#674#. 0 *#4 0 :6 01 2#46+#. 215+6+10 24 +5+10 24 2#4 24 5 48 24+/#4; 24+14 24+8+. ) 5 241 74 27$.+ 4 # 4 #. 4 ( 4 0 5 4 .#6+8 4 564+ 6 4 81- 4+)*6 41..$# - 4195 5 * /# 5 41.. 5 10 5 6+10 5 . 6 5 55+10 5 55+10A75 4 5 6 5+ 5/#..+06 51/ 52# 53. 53. 1 53. 4414 53.56#6 57$564+0) 57/ 5;56 /A75 4 6#$. 6 /214#4; 6* 0 6+/ 6+/ 56#/2 6+/ 10 A*174 6+/ 10 A/+076 61 64#+.+0) 64#05# 6+10 64#05.#6 64#05.#6+10 64+/ 647 70+10 70+37 70-0190 72 #6 722 4 75#) 75 4 75+0) 8#.7 8#.7 5 8#4 *#4 8#4;+0) 8+ 9 9* 0 9* 0 8 4 9* 4 9+6* 914- 94+6 ; #4 10 S k ł a d n i a S Q L - a 65 6 56 6* 4 64+)) 4 6;2 70 4 8#4+#$. 8+467#. 8+5+$. 9#+6 9*+. 9+6*176 4 6740 4 67405 41. 4176+0 419 5#8 21+06 5 #4 * 5 05+6+8 5 37 0 5+)0#. 5+/+.#4 53. : 26+10 53.9#40+0) 5647 674 Rozdział 3. Tabela 3.2. Potencjalne słowa kluczowe języka SQL #(6 4 37#.5 1. #.+#5 #5;0 $ (14 $11. #0 $4 # 6* 1/2. 6+10 #.. ; . #6# 26* + 6+10#4; # * .5 +( ) 0 4#. +( +)014 . #8 . 55 .+/+6 .112 /1 +(; 0 9 010 1$, 6 1(( 1+ 12 4#6+10 12 4#6145 16* 45 2#4#/ 6 45 2 0 #06 24 14 4 24+8#6 2416 6 4 745+8 4 ( 4 ( 4 0 +0) 4 2.# 4 5+)0#. 66 UGNGEVKOKGACW 0# 9+5-1A#7 (41/ CWVQT[9J T YQL  / QTFGT D; PCYKUM1A#7  Rysunek 3.2. Nie istnieją reguły, według których trzeba formatować konstrukcję SQL. Powyższa konstrukcja jest analogiczna do konstrukcji przedstawionej na rysunku 3.1 Podstawy SQL-a SQL nie definiuje precyzyjnie formy konstrukcji. Konstrukcje SQL: u Mogą być pisane małymi lub dużymi literami (np. 5 . 6 i UGNGEV oznaczają to samo słowo kluczowe). u Mogą być kontynuowane w kolejnych liniach. Niedopuszczalne jest tylko dzielenie słów oraz łańcuchów znaków zawartych w cudzysłowach. 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” 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 . 6RTQEGPVAVCPVKGO(41/ CWVQT[ zamiast 5 . 6RTQEGPVAVCPVKGO (41/CWVQT[AV[VWNQY). S k ł a d n i a S Q L - a 67 Rozdział 3. Wskazówki  Wprowadzające słowo kluczowe konstrukcji  Systemy DBMS określają SQL nazywa się często czasownikiem, ponieważ wskazuje ono na wykonywaną przez konstrukcję czynność.  Pomimo że słów kluczowych nie można używać jako identyfikatorów, to jednak można je w identyfikatorach zawierać. Np. ITQWR czy OCZ nie są prawidłowymi identyfikatorami, ale ITQWRU czy OCZAEGPC są poprawne.  W identyfikatorach można zawierać spacje, należy wtedy identyfikator objąć apostrofami ( PWOGTVGNGHQPW ). Tworzenie nazw obiektów zawierających spacje nie jest jednak zalecane. Do oddzielania wyrazów lepiej stosować znaki podkreślenia (PWOGTAVGNGHQPW) lub kombinacje małych i dużych liter (0WOGT6GNGHQPW).  Wyrażenie jest dowolną poprawną kombinacją symboli, która daje w wyniku pojedynczą wartość. Może zawierać operatory matematyczne i logiczne, identyfikatory, 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. a - L Q S a i n d a ł k S własne wymagania dotyczące długości identyfikatorów oraz dostępnego dla nich zestawu znaków — szczegółowe informacje możesz znaleźć w dokumentacjach systemów pod hasłem identyfikatory (ang. identifiers) lub nazwy (ang. names). Systemy DBMS posiadają także dodatkowe słowa kluczowe, których nie można używać w roli identyfikatorów. Szczegóły w dokumentacjach systemów pod hasłem słowa kluczowe (ang. keywords) lub słowa zastrzeżone (ang. reserved words).  Microsoft SQL Server, Oracle, MySQL oraz PostgreSQL akceptują zarówno komentarze jedno- jak i wieloliniowe zawarte pomiędzy symbolami komentarza  i . Szczegóły w dokumentacjach systemów pod hasłem komentarze (ang. comments). MySQL dopuszcza także używanie jako oznaczenia początku komentarza znaku . Tabela 3.3. Typy wyrażeń Wyrażenie Przykład Przypadek ( CUG) Rzutowanie ( CUV) Czas i data ( CVGVKOG) Okres (+PVGTXCN) Liczbowe (0WOGTKE) Łańcuch znaków (5VTKPI) #5 9* 0P 6* 0ZP .5  0 #56 FCVCAY[F#5 *#4# 6 4 ECUARQECVMW   +06 48#.   #;  URTGFCP[EJ EGPC  5CPQYP[2CPKG ^^PCYKUMQACW^^  68 Tabela 3.4. Kategorie typów danych Typy danych Typ danych Przechowywany rodzaj danych Podstawy SQL-a Łańcuch znaków Ciągi znaków Łańcuch bitowy Ciągi bitów Liczba dokładna Liczby całkowite i dziesiętne Liczba przybliżona Liczby zmiennoprzecinkowe Data i czas Wartości czasu i daty Okres Okresy czasu Wskazówki  Do określania i zmiany typu danych kolumny oraz dotyczących jej ograniczeń służą konstrukcje 4 #6 6#$. oraz #.6 4 6#$. — patrz rozdział 10.  Projektanci baz danych przywiązują bardzo dużą wagę do określania typów danych dla kolumn. Konsekwencją złego wyboru może być sytuacja, w której niemożliwe będzie wpisanie do kolumny określonych wartości, a zmiana typu danych kolumny pociągnie za sobą utratę danych już istniejących w kolumnie.  Wiele szczegółów dotyczących typów danych ustalają producenci systemów DBMS. Stąd typy danych SQL-a nie są wiernie odwzorowane w konkretnych systemach DBMS, nawet, jeśli nazywają się identycznie. Nazwy analogicznych lub zbliżonych do teoretycznych typów danych systemów DBMS przedstawiono we wskazówkach w następnych podrozdziałach. Systemy DBMS często mają rozszerzony zestaw typów danych pozwalający przechowywać specyficzne wartości np. logiczne czy walutowe. Szczegóły dotyczące standardowych i rozszerzonych typów danych znajdziesz w dokumentacjach systemów DBMS pod hasłem typy danych (ang. data types). Informacje na temat sposobu sortowania znajdują się w podrozdziale „Sortowanie wierszy za pomocą frazy ORDER BY” w rozdziale 4. W podrozdziale „Tabele, kolumny i wiersze” w rozdziale 2. stwierdzono, że dziedzina kolumny ogranicza wartości, które mogą być w danej kolumnie przechowywane. Praktyczną realizacją dziedzin są typy danych. Poniżej przedstawiono ich cechy. u Każda kolumna w tabeli ma określony pojedynczy typ danych. u Typ danych mieści się w jednej z kategorii przedstawionych w tabeli 3.4 (a opisanych w następnych sześciu podrozdziałach). u Typ danych określa wartości, jakie dana kolumna akceptuje, oraz operacje, jakie można na niej wykonać. Np. całkowity typ danych (KPVGIGT) reprezentuje każdą liczbę całkowitą mieszczącą się w granicach określonych przez system DBMS i pozwala na wykonywanie zwykłych operacji arytmetycznych, m.in.: dodawania, odejmowania, mnożenia i dzielenia. Ale typ całkowity nie może reprezentować wartości nieliczbowych, np. UJCFGPHTGWFG oraz nie umożliwia przeprowadzania operacji znakowych (np. zamiana liter małych na duże). u Typ danych narzuca sposób sortowania kolumny. Liczby całkowite 1, 2 i 10 są sortowane arytmetycznie: , , . Łańcuchy znaków  ,  i  będą natomiast posortowane słownikowo i dadzą w wyniku kolejność:  ,  ,  . Sortowanie słownikowe polega na kolejnym porównywaniu pojedynczych znaków. Stąd  jest przed  — znak  w porządku słownikowym występuje przed znakiem  . u Wartości wzorców przechowywane są w kolumnach. Wzorzec jest stałą, a nie wynikiem wyliczenia wartości wyrażenia liczbowego. Przykładami wzorców liczbowych są  i , wzorcami znakowymi są np.  i KGNQP[ , natomiast #6   i 6+/  to wzorce daty i czasu. 69 T y p y d a n y c h w ó k a n z w ó h c u c ń a ł y p y T 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 Typ *#4# 6 4 (znakowy) *#4# 6 48#4;+0) (znakowy o zmiennej długości) 0#6+10#. *#4# 6 4 (znakowy narodowy) 0#6+10#. *#4# 6 48#4;+0) (znakowy narodowy o zmiennej długości) Opis Reprezentuje stałą liczbę znaków. Łańcuch przechowywany w kolumnie zdefiniowanej 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. Reprezentuje zmienną liczbę znaków. Łańcuch przechowywany w kolumnie zdefiniowanej jako *#4# 6 48#4;+0) 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. W przeciwieństwie do typu *#4# 6 4, jeśli umieścimy w kolumn ie zdefiniowanej jako *#4# 6 48#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 48#4;+0)  przechowywany jest jako ,CEGM . Typy *#4# 6 48#4;+0), *#48#4;+0) oraz 8#4 *#4 są równoważne. Ten typ danych odpowiada typowi *#4# 6 4, z tym że jest on w stanie przechowywać ustandaryzowane znaki wielobajtowe czy unikodowe (patrz ramka). W konstrukcjach SQL ł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 *#4# 6 4, 0#6+10#. *#4 oraz 0 *#4 są równoważne. Ten typ danych odpowiada typowi *#4# 6 48#4;+0) z tym, że może on przechowywać ustandaryzowane znaki wielobajtowe czy unikodowe (patrz typ 0#6+10#. *#4# 6 4). Typy 0#6+10#. *#4# 6 48#4;+0), 0#6+10#. *#48#4;+0) oraz 0 *#48#4;+0) są równoważne. ¼ . Typy 0#6+10#. 70 Unikod ) znaków. Komputery przechowują znaki (litery, cyfry, znaki interpunkcyjne, znaki kontrolne oraz inne symbole) w swojej pamięci, przypisując im wartości liczbowe. Sposób zamiany znaków na liczby określa kodowanie. Różne języki i różne systemy operacyjne stosują wiele specyficznych sposobów kodowania. Standardowe łańcuchy w języku angielskim wykorzystują kodowanie ASCII, które umożliwia 8 przypisanie liczbom 256 (2 Jest to niewiele — za mało, żeby przechować wszystkie litery używane w nowożytnych językach europejskich i stanowczo za mało, żeby przechować chińskie ideogramy. Unikod jest zestawem pojedynczych znaków reprezentującym znaki prawie wszystkich języków pisanych występujących na świecie. Jest on w stanie zakodować 65536 (2 znaków. Standard unikodu ogłosiła i zarządza nim instytucja o nazwie Unicode Consortium. Aktualna specyfikacja unikodu jest zawsze dostępna w najnowszym wydaniu (internetowym lub drukowanym) standardu (The Unicode Standard) pod adresem www.unicode.org. 16 ) Podstawy SQL-a Wskazówki  Jeżeli chcesz w łańcuchu wpisać znak apostrofu, musisz wpisać go dwukrotnie. Np. łańcuchem odpowiadającym angielskiemu słowu it s jest KV U . Znak cudzysłowu () jest oddzielnym znakiem i nie wymaga specjalnego traktowania.  Długością łańcucha jest liczba całkowita większa lub równa 0 i mniejsza lub równa NGPIVJ. Łańcuch niezawierający żadnych znaków — (dwa apostrofy bez spacji między nimi) — nazywany jest łańcuchem pustym lub łańcuchem o zerowej długości. Łańcuch pusty traktowany jest jako 8#4 *#4 o długości 0.  Systemy DBMS szybciej niż łańcuchy o zmiennej długości sortują i przetwarzają łańcuchy o stałej długości.  W Microsoft Accessie łańcuchowymi typami danych są VGMUV oraz PQVC. W Microsoft SQL Serverze są nimi EJCT, XCTEJCT, VGZV, PEJCT, PXCTEJCT oraz PVGZV. Oracle oferuje typy: EJCT, XCTEJCT, XCTEJCT, PEJCT, PXCTEJCT oraz PXCTEJCT. W MySQL-u są to: EJCT, XCTEJCT, PEJCT, PXCTEJCT, VGZV, VKP[VGZV, OGFKWOVGZV i NQPIVGZV, a w PostgreSQL-u EJCT, XCTEJCT i VGZV. Oracle puste łańcuchy traktuje jako wartości null — patrz podrozdział „Wartości null”. T y p y ł a ń c u c h ó w z n a k ó w 71 Rozdział 3. Typy łańcuchów bitowych Łańcuch bitowy reprezentuje liczbę binarną i posiada następujące cechy: u Jest uporządkowanym ciągiem zawierającym pewną liczbę bitów (lub niezawierającą żadnego). u Każdy bit ma wartość 0 lub 1. u Zazwyczaj jest wykorzystywany do przechowywania danych binarnych, takich jak pliki programów, cyfrowe dźwięki czy obrazy. Długi łańcuch bitowy nazywany jest często BLOB (ang. binary large object). u W konstrukcjach SQL łańcuch znaków objęty jest apostrofami. u Jest jednym z typów przedstawionych w tabeli 3.6. Wskazówki  Systemy DBMS nie próbują interpretować łańcuchów bitowych, ich znaczenie jest ważne z punktu widzenia wykorzystujących je aplikacji. Tabela 3.6. Typy łańcuchów bitowych  Uwaga dla doświadczonych programistów: oprócz używania postaci binarnej (o podstawie 2) można także stosować dla łańcuchów znaków zapis szesnastkowy (ang. hex lub hexadecimal) — o podstawie 16. System szesnastkowy wykorzystuje cyfry od 0 do 9 oraz litery (duże lub małe) od A do F. Jeden znak szesnastkowy odpowiada czterem bitom. W konstrukcjach SQL łańcuchy bitowe w zapisie szesnastkowym zawierają przed pierwszym apostrofem literę :. Np. łańcuch szesnastkowy : $ jest odpowiednikiem łańcucha binarnego $  .  W Microsoft Accessie binarnymi typami danych są VCMPKG oraz QDKGMV 1. . W Microsoft SQL Serverze występują DKPCT[, XCTDKPCT[ i KOCIG. Oracle oferuje typy: TCY, NQPI, TCY, DNQD oraz DHKNG. W MySQL-u istnieją DNQD, VKP[DNQD, OGFKWODNQD i NQPIDNQD, a w PostgreSQL-u DKV i XCTDKV. Typ $+6 (bitowy) $+68#4;+0) (bitowy o zmiennej długości) Opis Reprezentuje stałą liczbę bitów. Łańcuch bitowy przechowywany w kolumn ie zdefiniowanej jako $+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 $  . Reprezentuje zmienną liczbę bitów. Łańcuch bitowy przechowywany w kolumnie zdefiniowanej jako $+68#4;+0) 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. Podobnie jak w przypadku łańcuchów znakowych typu *#48#4;+0), jeśli umieścimy w kolumnie zdefin iowanej jako $+68#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 $  . h c y w o t i b w ó h c u c ń a ł y p y T 72 Typy liczb dokładnych Podstawy SQL-a 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 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 07/ 4+ (liczbowa) +/#. (dziesiętna) +06 ) 4 (całkowita) 5/#..+06 (całkowita krótka) Opis Reprezentuje liczbę dziesiętną. Liczby dziesiętne są przechowywane w kolumnach zdefiniowanych 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 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. Reprezentuje liczbę całkowitą. Minimalna i maksymalna wartość liczby, jaka może być 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. Ten typ jest takim samym typem jak +06 ) 4, posiada tylko węższy zakres dopuszczalnych wartości — zależny od systemu DBMS. Definicja tego typu nie wymaga określania argumentów. 73 T y p y l i c z b d o k ł a d n y c h Tabela 3.8. Przykłady rozdzielczości i dokładności dla liczby 123.89 Definicja typu Przechowywana wartość 07/ 4+  07/ 4+  07/ 4+  07/ 4+  07/ 4+  07/ 4+  07/ 4+  07/ 4+        Poza zakresem rozdzielczości Poza zakresem rozdzielczości Rozdział 3. Wskazówki  Tabela 3.8 przedstawia sposób, w jaki liczba 123.89 jest przechowywana dla różnych wartości rozdzielczości i dokładności.  Wartości liczbowych nie umieszcza się w cudzysłowach.  Jeśli liczby nie są stosowane do żadnych obliczeń (np. numery telefonów czy kody pocztowe), lepiej przechowywać je jako łańcuchy znaków. Zapobiegnie 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 dziesiętne lub zmiennoprzecinkowe.  Typami liczb dokładnych w Microsoft Accessie są FKGUKúVPG, NKEDC ECđMQYKVC, DCLV oraz NKEDCECđ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. h c y n d a ł k o d b z c i l y p y T 74 Typy liczb przybliżonych Typy liczb przybliżonych służą do reprezentowania przybliżonych wartości liczbowych. Przybliżona wartość liczbowa posiada następujące cechy: u Może być liczbą ujemną, dodatnią lub równą zero. u Jest traktowana jako przybliżenie liczby zmiennoprzecinkowej (rzeczywistej). u Zazwyczaj wykorzystywana jest do reprezentowania liczb bardzo dużych lub bardzo małych oraz do obliczeń naukowych. u Wyrażana jest w postaci naukowej. Wartość w notacji naukowej zapisuje się jako liczbę dziesiętną mnożoną przez całkowitą potęgę liczby 10. Duża litera jest symbolem eksponenta np. 2.5E2 = 2.5∗102 = 250. Mantysą w takim zapisie są cyfry znaczące (w podanym przykładzie 2.5), natomiast eksponentem jest wykładnik potęgi liczby 10 (w podanym przykładzie 2). Zarówno mantysa, jak i eksponent, mogą mieć określony znak: –2.5E–2 = –2.5∗10–2 = –0.025. Podstawy SQL-a u Posiada stałą rozdzielczość, ale nie posiada dokładności w ścisłym sensie tego słowa (określają ją znak oraz wartość eksponenta). Rozdzielczość jest liczbą bitów wykorzystywanych do zapisu mantysy. Aby przekształcić rozdzielczość bitową na dziesiętną, należy ją pomnożyć przez liczbę 0.30103. Przekształcenie rozdzielczości dziesiętnej na bitową można uzyskać, mnożąc ją przez liczbę 3.32193. Na przykład 24 bity oznaczają rozdzielczość 7-cyfrową, a 53 bity to rozdzielczość 15-cyfrowa. u Należy do jednego z typów wymienionych w tabeli 3.9. Wskazówki  Wartości liczbowych nie umieszcza się w cudzysłowie.  Typami liczb przybliżonych w Microsoft Accessie są RQLGF[PECRTGE[LC i RQFYÎLPCRTGE[LC. W Microsoft SQL Serverze występują typy HNQCV i TGCN. Oracle oferuje typy HNQCV, TGCN, FQWDNGRTGEKUKQP oraz PWODGT. W MySQL-u istnieją typy HNQCV, TGCN i FQWDNG, natomiast w PostgreSQL-u TGCN i FQWDNGRTGEKUKQP. T y p y l i c z b p r z y b l i ż o n y c h Tabela 3.9. Typy liczb przybliżonych Typ (.1#6 (zmiennoprzecinkowa) 4 #. (rzeczywista) 17$. 24 +5+10 (podwójnej precyzji) Opis Reprezentuje liczbę zmiennoprzecinkową. Liczba zmiennoprzecinkowa przechowywana 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. Ten typ jest analogiczny do typu (.1#6, z tym że rozdzielczość ustala system DBMS. Liczby typu 4 #. często nazywa się liczbami pojedynczej precyzji. Definicja typu 4 #. nie wymaga określania argumentów. Jest to taki sam typ, jak (.1#6. Różnica jest tylko taka, że rozdzielczość typu 17$. 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 Rozdział 3. Typy daty i czasu Typy daty i czasu, jak sama nazwa wskazuje, służą do reprezentowania dat i czasu. Wartości tych typów posiadają następujące cechy: u Reguły rządzące kalendarzem gregoriańskim określają w naturalny sposób format zapisu dat. Systemy DBMS odrzucają wartości, których nie mogą zinterpretować jako daty. u Są określane względem czasu UTC (ang. Universal Coordinated Time) zwanego oficjalnie czasem uniwersalnym Greenwich (ang. GMT — Greenwich Mean Time). Standard SQL-92 wymaga, aby każda sesja SQL posiadała domyślne przesunięcie czasowe względem czasu UTC, które jest wykorzystywane w trakcie trwania sesji. Na przykład przesunięciem dla strefy czasowej San Francisco w Kalifornii jest –8. Tabela 3.10. Typy daty i czasu u Wartości czasowe oparte są na 24-godzinnym formacie czasu (np. 13:00 zamiast 1:00 po południu). u Łączniki () oddzielają kolejne części dat, natomiast dwukropki () oddzielają kolejne części wartości czasowych. Jeśli jedna wartość zawiera jednocześnie datę i czas, to są one oddzielone spacją. u Należą do jednego z typów przedstawionych w tabeli 3.10. Typ #6 (data) 6+/ (czas) u s a z c i y t a d y p y T 6+/ 56#/2 (stempel czasowy) 6+/ 9+6*6+/  10 (czas ze strefą czasową) 6+/ 56#/29+6* 6+/  10 (stempel czasowy ze strefą czasową) 76 Opis Reprezentuje datę. Data przechowywana w kolumnie zdefin iowanej jako #6 zawiera trzy 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. Reprezentuje czas dnia. Czas przechowywany w kolumnie zdefiniowanej jako 6+/ zawiera 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. Reprezentuje kombinację wartości #6 i 6+/ oddzielonych spacją. Formatem wartości 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). Ten typ jest typem analogicznym do typu #6#, z tym że zawiera dodatkowe pole — 6+/ A 10 A1((5 6 (przesunięcie strefy czasowej) — określające przesunięcie w godzinach względem czasu UTC. Wartość 6+/ A 10 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: #66+/  10 VKOGAQPGAQHHUGV, np. #66+/  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 #.. Ten typ odpowiada typowi 6+/ 56#/2, zawiera tylko dodatkowe pole 6+/ A 10 A1((5 6 określające przesunięcie w godzinach względem czasu UTC. Zasady składniowe wyrażeń tego typu są analogiczne, co w przypadku typu 6+/ 9+6*6+/  10 , trzeba jedynie na początku umieścić datę np. #66+/  10 . Tabela 3.11. Pola typu daty i czasu Wskazówki Podstawy SQL-a Pole ; #4 /106* #; *174 /+076 5 10 6+/ A 10 A1((5 6 Poprawna wartość od  do  od  do  od  do  od  do  od  do  od  do ŗ (patrz wskazówki) od  do   Typem daty i czasu w Microsoft Accessie jest FCVCIQFKPC. Microsoft SQL Server oferuje typy FCVGVKOG oraz UOCNNFCVGVKOG. W Oracle’u są to FCVG i VKOGUVCOR. MySQL oferuje typy FCVG, VKOG, FCVGVKOG i VKOGUVCOR, natomiast PostgreSQL FCVG, VKOG i VKOGUVCOR. Systemy DBMS pozwalają na wpisywanie wartości dat w formatach miesiąc-dzień- rok, dzień-miesiąc-rok oraz w innych, a wartości czasu w postaci A.M./P.M.. Format, w jakim wartości dat i czasu są wyświetlane może różnić się od tego, w jakim zostały wprowadzone. W Microsoft Accessie wzorców dat i czasu nie umieszcza się w apostrofach, lecz pomiędzy znakami  oraz nie wpisuje się nazwy typu. W 4Microsoft SQL Serverze także nie wpisuje się typu danych przed wzorcami dat i czasu.  Opis pobierania czasu systemowego znajdziesz w podrozdziale „Pobieranie bieżącej daty i czasu” w rozdziale 5.  Wartości daty i czasu można porównywać, jeśli zawierają te same pola (patrz „Filtrowanie wierszy za pomocą frazy WHERE” w rozdziale 4. oraz „Obliczenia operujące na wartościach daty i czasu”).  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ę, rozpoczynając od słowa oznaczającego typ, potem następuje spacja i wartość daty lub czasu umieszczona w apostrofach, czyli #6  TTTTOOFF , 6+/  IIOOUU lub 6+/ 56#/2 TTTTOOFFIIOOUU .  Standard SQL-92 nie przewiduje możliwości przechowywania dat p.n.e. – przed naszą erą czy przed Chrystusem (p. Ch), ale Twój system DBMS może taką możliwość oferować.  Stemple czasowe są w praktyce często wykorzystywane do konstruowania unikalnych kluczy lub zaznaczania zdarzeń związanych z wierszem, w którym występują.  Typ danych 6+/ 9+6*6+/  10 właściwie nie ma sensu, gdyż w rzeczywistości strefy czasowe nie są jednoznaczne bez określonej daty (przesunięcie czasowe zmienia się w ciągu roku). Lepiej jest stosować typ 6+/ 56#/29+6*6+/  10 . T y p y d a t y i c z a s u 77 ) e w o s e r k o ( e w o ł a w r e t n i y p y T 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. 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: RQNGARQECVMQYG61RQNGAMQPEQYG 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 Tabela 3.12. Typy okresowe Typ Opis Year-month (rok-miesiąc) Day-time (dzień-czas) Takie okresy zawierają tylko ilość lat, ilość miesięcy lub obie z nich. Poprawnymi kolumnami są: +06 48#.; #4, +06 48#. ; #4 TQFKGNEQUE , +06 48#./106*, +06 48#./106* TQFKGNEQUE , +06 48#.; #461/106*, +06 48#. ; #4 TQFKGNEQUE 61/106*. Okresy tego typu mogą zawierać ilość dni, godzin, minut, sekund lub różne ich kombinacje. Przykładami poprawnych typów kolumn są: +06 48#./+076 , +06 48#. #; TQFKGNEQUE , +06 48#. #;61*174, +06 48#. #; TQFKGNEQUE 615 10 , +06 48#./+076 TQFKGNEQUE 615 10 TQFKGNEQUEAWNCOMQYC . Podstawy SQL-a Kolumna jednopolowa zdefiniowana jako +06 48#.*174 może przechowywać okresy typu „4 godziny” czy „25 godzin”. Kolumna wielopolowa zdefiniowana jako +06 48#. #;61/+076 jest zdolna do przechowywania wartości typu „2 dni, 5 godzin i 10 minut”. u Kolumna jednopolowa może posiadać rozdzielczość określającą długość (liczbę pozycji) pola, np. +06 48#.*174  . Jeśli rozdzielczość nie jest jawnie określona, przyjmowana jest domyślnie jako 2. Pole typu 5 10 może mieć dodatkowo określoną rozdzielczość ułamkową, czyli liczbę cyfr po przecinku dziesiętnym — np. INTERVAL SECOND(5, 2). Jeśli nie jest ona jawnie określona, przyjmowana jest domyślnie jako 6. 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  615 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. T y p y i n t e r w a ł o w e ( o k r e s o w e ) 79 Rozdział 3. Wartości null Kiedy zestaw Twoich danych nie jest kompletny, jako oznaczenia brakującej czy nieznanej wartości możesz użyć wartości pustej — null. Wartość null posiada następujące cechy: u W konstrukcjach SQL wartość null jest reprezentowana przez słowo kluczowe 07... u Wartość określana jest jako null, jeśli nigdy nie będzie ona znana, jeśli istnieje możliwość, że będzie określona później lub jeśli jest nieodpowiednia (wartość null można sobie wyobrazić raczej jako zaznaczenie wolnego miejsca niż jako rzeczywistą wartość). u Wartość null to nie to samo co zero, łańcuch zawierający tylko puste miejsca czy łańcuch pusty ( ). Wartość null w kolumnie EGPC nie oznacza, że dana pozycja nie ma ceny lub że cena wynosi zero — oznacza to, że cena jest nieznana lub nie została jeszcze ustalona (wyjątkiem jest Oracle, który akceptuje puste łańcuchy — patrz wskazówka DBMS). u Wartości null nie należą do żadnego typu danych i mogą być umieszczane we wszystkich kolumnach z wyjątkiem tych zdefiniowanych jako 01607.. — patrz „Nie akceptowanie w kolumnach wartości null za pomocą wyrażenia NOT NULL” w rozdziale 10. l l u n i c ś o t r a W u Chociaż wartości null nigdy nie są sobie równe, to jednak słowo kluczowe +56+0 6 traktuje wszystkie wartości null znajdujące się w danej kolumnie jako duplikaty — patrz „Eliminowanie powtarzających się wierszy za pomocą słowa kluczowego DISTINCT” w rozdziale 4. u W czasie sortowania kolumny zawierającej wartości null mogą one być większe lub mniejsze od wszystkich innych wartości występujących w kolumnie — zależy to od systemu DBMS. Patrz „Sortowanie wierszy za pomocą frazy ORDER BY” w rozdziale 4. u Wartości null „propagują się” poprzez obliczenia. Wynik każdego wyrażenia zawierającego wartość null wynosi null:  07.. 07... Patrz rozdział 5. u Funkcje agregujące, takie jak 57/ , #8) czy /#: ignorują w trakcie obliczeń wartości null. Patrz rozdział 6. u Podczas grupowania za pomocą frazy )4172$; kolumn zawierających wartości null, są one wszystkie umieszczane w jednej grupie — patrz „Grupowanie wierszy za pomocą frazy GROUP BY” w rozdziale 6. u Wartości null mają wpływ na wynik u Wartości null mogą być wykrywane złączeń — patrz „Złączenia” w rozdziale 7. u Wartości null mogą sprawiać kłopoty w przypadku podzapytań — patrz „Wartości null w podzapytaniach” w rozdziale 8. za pomocą wyrażenia +507.. — patrz „Sprawdzanie występowania wartości null za pomocą słowa kluczowego IS NULL” w rozdziale 4. 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 5 . 6/#: KFACW (41/CWVQT[ 9* 4 PCYKUMQACW :::  /#: KFACW  07.. Rysunek 3.3. Otrzymanie wartości null z kolumny, która nie pozwala na istnienie wartości null  Sposób wyświetlania w wynikach wartości null zależy od systemu DBMS. Wartości puste mogą być wyświetlane np. jako 07.., 07.. , 07.. lub jako puste pola. Obecna wersja Oracle’a traktuje puste łańcuchy ( ) jako wartości null. Takie rozwiązanie w kolejnych wersjach raczej nie będzie stosowane, stąd Oracle już teraz radzi nie opierać się na takiej jednoznaczności. Może to spowodować problemy z konwersjami danych do innych systemów DBMS. W przykładowej bazie danych kolumna KOKGACW w tabeli CWVQT[ zdefiniowana jest jako 01607... W Oracle’u imieniem autora o nazwisku Sitkowski (autor #) jest pojedyncza spacja (  ), natomiast w innych systemach w tym miejscu występuje pusty łańcuch ( ). Informacje na temat przykładowej bazy danych znajdują się w rozdziale 2. Podstawy SQL-a Wskazówki  Z wartościami null związanych jest tyle problemów i komplikacji — ważniejsze z nich zostały opisane w niniejszym podrozdziale — że niektórzy znawcy baz danych zalecają użytkownikom rezygnację z ich używania (zamiast tego proponują 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. Konkluzja jest taka: wyniki zawierające wartości null należy interpretować ostrożnie.  Przeczytaj także podrozdziały „Sprawdzanie występowania wartości null za pomocą funkcji COALESCE()” oraz „Porównywanie wyrażeń za pomocą funkcji NULLIF()” w rozdziale 5.  Określenie wartość null nie jest precyzyjne — null oznacza brak wartości.  Słowa kluczowego 07.. nie należy umieszczać w apostrofach — system DBMS zinterpretuje je wtedy jako łańcuch znaków 07.. , a nie jako wartość pustą.  Wartość null można także otrzymać z kolumny, która na istnienie wartości null nie pozwala. Kolumna KFACW w tabeli CWVQT[ nie pozwala na istnienie wartości null, ale konstrukcja 5 . 6 przedstawiona na rysunku 3.3 zwraca jako wartość maksymalną KFACW właśnie wartość pustą. W a r t o ś c i n u l l 81
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

SQL. Szybki start
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: