Praktyki mistrza SQL. Programowanie zaawansowane - ebook
Praktyki mistrza SQL. Programowanie zaawansowane - ebook
Niniejsza książka jest przeznaczona dla aktywnych programistów SQL. Przedstawia zaawansowane techniki i idiomy programistyczne z obszaru tego języka. Pokazano w niej również, w jaki sposób można rozwiązywać problemy, które często pojawiają się w bazach danych. Prezentowane tu rozwiązania można implementować we właściwie wszystkich systemach bazodanowych korzystających z SQL. To klasyczny podręcznik, systematycznie uaktualniany, który doczekał się prawdziwego uznania wśród specjalistów.
W książce omówiono między innymi:
- transakcje i kontrolę współbieżności
- tabele i normalizację danych oraz widoki, tabele pomocnicze i tymczasowe
- dane, operacje na danych, w tym na adresach IP, datach, danych tekstowych
- zaawansowane techniki tworzenia kwerend
- hierarchię w SQL, kolejki i macierze w SQL
- nowości w wydaniu: model z podwójnym zapisem czasu, funkcje agregujące, rozwiązywanie problemów z instrukcjami DDL i wiele innych zagadnień
Skoro znasz SQL, to stań się jego ekspertem!
Joe Celko — uznany ekspert w dziedzinie baz danych. Z jego konsultacji korzystały m.in. służby medyczne, NASA, siły zbrojne USA. Autor wysoko cenionych książek dotyczących SQL. Napisał również ponad 1200 artykułów w prasie informatycznej i akademickiej. Większość tych tekstów dotyczyła danych i baz.
Spis treści
Wprowadzenie do wydania piątego (13)
CZĘŚĆ I. MECHANIZMY ZWIĄZANE Z DEKLAROWANIEM DANYCH (15)
1. Bazy danych a systemy plików (17)
- 1.1. Instrukcja Schema (19)
- 1.2. Tabele jako encje (24)
- 1.3. Tabele jako relacje (24)
- 1.4. Wiersze a rekordy (26)
- 1.5. Kolumny a pola (27)
2. Transakcje i kontrola współbieżności (31)
- 2.1. Sesje (32)
- 2.2. Transakcje i model ACID (32)
- 2.3. Kontrola współbieżności (34)
- 2.4. Poziomy izolacji (36)
- 2.5. Pesymistyczna kontrola współbieżności (38)
- 2.6. Optymistyczna kontrola współbieżności za pomocą izolacji snapshotów (39)
- 2.7. Logiczna kontrola współbieżności (42)
- 2.8. Twierdzenie CAP (42)
- 2.9. Model BASE (43)
- 2.10. Spójność po stronie serwera (45)
- 2.11. Obsługa błędów (46)
- 2.12. Pasywne i aktywne zakleszczenie (46)
3. Tabele (49)
- 3.1. Instrukcja CREATE TABLE (50)
- 3.2. Definicje kolumn (52)
- 3.3. Kolumny obliczane (63)
- 3.4. Ograniczenia [NOT\ DEFERRABLE (64)
- 3.5. Instrukcje CREATE DOMAIN i CREATE SEQUENCE (65)
- 3.6. Konstrukcje związane z zestawem znaków (72)
4. Klucze, lokalizatory i generowane wartości (75)
- 4.1. Typy kluczy (76)
- 4.2. Praktyczne wskazówki związane z denormalizacją (79)
5. Normalizacja (85)
- 5.1. Zależności funkcyjne i wielowartościowe (88)
- 5.2. Pierwsza postać normalna (1NF) (88)
- 5.3. Druga postać normalna (2NF) (93)
- 5.4. Trzecia postać normalna (3NF) (94)
- 5.5. Postać normalna z kluczem podstawowym (EKNF) (95)
- 5.6. Postać normalna Boyce'a-Codda (BCNF) (96)
- 5.7. Czwarta postać normalna (4NF) (98)
- 5.8. Piąta postać normalna (5NF) (99)
- 5.9. Postać normalna z kluczem dziedziny (DKNF) (101)
- 5.10. Praktyczne wskazówki z zakresu normalizacji (108)
- 5.11. Nadmiarowość, gdy nie jest używana postać normalna (109)
6. Widoki, tabele pochodne i inne tabele wirtualne (115)
- 6.1. Widoki w kwerendach (116)
- 6.2. Widoki modyfikowalne i tylko do odczytu (117)
- 6.3. Typy widoków (118)
- 6.4. Obsługa widoków w silnikach bazodanowych (124)
- 6.5. Klauzula WITH CHECK OPTION (128)
- 6.6. Usuwanie widoków (133)
- 6.7. Tabele ze zmaterializowanymi wynikami kwerend (134)
7. Tabele pomocnicze (137)
- 7.1. Tabela Series (138)
- 7.2. Pomocnicze tabele wyszukiwania (143)
- 7.3. Zaawansowane tabele pomocnicze z funkcjami (153)
- 7.4. Globalne tabele stałych (164)
- 7.5. Uwagi na temat przekształcania kodu proceduralnego na tabele (171)
8. Inne obiekty schematu (177)
- 8.1. Instrukcja CREATE SCHEMA (179)
- 8.2. Tabele schematu (180)
- 8.3. Tabele tymczasowe (180)
- 8.4. Instrukcja CREATE ASSERTION (180)
- 8.5. Instrukcja CREATE DOMAIN (181)
- 8.6. Instrukcja CREATE COLLATION (182)
- 8.7. Instrukcja CREATE TRANSLATION (183)
- 8.8. Instrukcja CREATE PROCEDURE (183)
- 8.9. Wyzwalacze (183)
- 8.10. Model działania wyzwalaczy (184)
9. Błędy, których należy unikać w instrukcjach DDL (193)
- 9.1. Stosowanie skrótu "tbl" i powiązane błędy (193)
- 9.2. Podział atrybutów (196)
- 9.3. Problemy z przeciążaniem projektu (197)
- 9.4. Nadmiarowość wynikająca z braku postaci normalnej (201)
CZĘŚĆ II. TYPY DANYCH (205)
10. Dane liczbowe w SQL-u (207)
- 10.1. Dokładne liczbowe typy danych (208)
- 10.2. Przybliżone liczbowe typy danych (213)
- 10.3. Konwersje typów liczbowych (215)
- 10.4. Arytmetyka oparta na czterech funkcjach (217)
- 10.5. Przekształcanie wartości na NULL i dokonywanie odwrotnych konwersji (219)
- 10.6. Funkcje matematyczne (222)
- 10.7. Adresy IP (226)
11. Znakowe typy danych w SQL-u (229)
- 11.1. Problemy z łańcuchami znaków w SQL-u (230)
- 11.2. Standardowe funkcje znakowe (232)
- 11.3. Często dostępne rozszerzenia od producentów (234)
- 11.4. Tablice Cuttera (242)
12. SQL-owe typy danych związane z czasem (243)
- 12.1. Uwagi na temat standardów związanych z kalendarzem (244)
- 12.2. Natura modeli danych związanych z czasem (247)
- 12.3. SQL-owe typy danych związane z czasem (248)
- 12.4. Typy danych z rodziny INTERVAL (255)
- 12.5. Kwerendy z operacjami arytmetycznymi na datach (256)
- 12.6. Stosowanie wartości NULL do oznaczania "wieczności" (257)
- 12.7. Predykat OVERLAPS() (258)
- 12.8. Ograniczenia związane ze zmianami stanu (260)
- 12.9. Tabele z kalendarzem (265)
13. Wielokolumnowe elementy danych (269)
- 13.1. Elementy danych w postaci wektorów i współrzędnych (269)
- 13.2. Hierarchiczne elementy danych (276)
14. Wartości NULL - brakujące dane w SQL-u (283)
- 14.1. Puste i brakujące tabele (285)
- 14.2. Brakujące wartości w kolumnach (285)
- 14.3. Kontekst i brakujące wartości (287)
- 14.4. Porównywanie wartości NULL (288)
- 14.5. Wartości NULL i logika (289)
- 14.6. Wartości NULL a obliczenia matematyczne (293)
- 14.7. Funkcje związane z wartościami NULL (294)
- 14.8. Wartości NULL a języki główne (294)
- 14.9. Wskazówki projektowe związane z wartościami NULL (295)
- 14.10. Uwagi na temat różnych rodzajów wartości NULL (298)
15. Operacje na tabelach (301)
- 15.1. Instrukcja DELETE FROM (301)
- 15.2. Instrukcja INSERT INTO (307)
- 15.3. Instrukcja UPDATE (309)
- 15.4. Uwaga na temat błędów w popularnych rozszerzeniach producentów (317)
- 15.5. Instrukcja MERGE (318)
16. Operacje na zbiorach (321)
- 16.1. UNION i UNION ALL (322)
- 16.2. Operatory INTERSECT i EXCEPT (325)
- 16.3. Uwagi na temat opcji ALL i SELECT DISTINCT (330)
- 16.4. Równość i podzbiory właściwe (331)
CZĘŚĆ III. MECHANIZMY Z POZIOMU WIERSZY I KOLUMN (333)
17. Operatory porównywania (operatory theta) (335)
- 17.1. Konwersja typów danych (336)
- 17.2. Porównywanie wierszy w SQL-u (338)
- 17.3. Operator IS [NOT\ DISTINCT FROM (340)
- 17.4. Operatory monadyczne (341)
18. Predykaty dotyczące wyników podkwerend (345)
- 18.1. Predykat UNIQUE (345)
- 18.2. Predykat [NOT\ IN() (347)
- 18.3. Predykat [NOT\ EXISTS() (357)
- 18.4. [SOME | ANY\ (365)
- 18.5. ALL (365)
19. Predykaty BETWEEN i OVERLAPS (369)
- 19.1. Predykat BETWEEN (369)
- 19.2. Predykat OVERLAPS (372)
20. Rodzina wyrażeń CASE (383)
- 20.1. Wyrażenie CASE (383)
- 20.2. Wyrażenia w postaci podkwerend i stałe (391)
21. Predykaty LIKE i SIMILAR TO (393)
- 21.1. Sztuczki związane ze wzorcami (394)
- 21.2. Wyniki dla wartości NULL i pustych łańcuchów znaków (396)
- 21.3. Operator LIKE nie oznacza równości (396)
- 21.4. Rozbudowywanie predykatu LIKE za pomocą złączenia (396)
- 21.5. Wyrażenia CASE i predykaty LIKE (397)
- 21.6. Predykat SIMILAR TO (397)
- 21.7. Sztuczki związane z łańcuchami znaków (399)
22. Podstawowa instrukcja SELECT (403)
- 22.1. Wyrażenia CTE (404)
- 22.2. Klauzula FROM (405)
- 22.3. Klauzula WHERE (405)
- 22.4. Klauzula GROUP BY (406)
- 22.5. Klauzula HAVING (406)
- 22.6. Klauzula SELECT (407)
- 22.7. Klauzula ORDER BY (407)
- 22.8. Wyrażenie z zagnieżdżonymi kwerendami a ortogonalność (407)
23. Podstawowe funkcje agregujące (409)
- 23.1. Funkcje z rodziny COUNT() (410)
- 23.2. Funkcja SUM() (414)
- 23.3. Funkcja AVG() (415)
- 23.4. Funkcje zwracające ekstrema (419)
- 23.5. Funkcja agregująca LIST() (427)
- 23.6. Funkcja agregująca wyznaczająca dominantę (429)
- 23.7. Funkcja agregująca zwracająca medianę (430)
- 23.8. Funkcja agregująca PRD() (432)
24. Zaawansowane statystyki opisowe (437)
- 24.1. Funkcje dla tabel dwukolumnowych (437)
- 24.2. Korelacja (439)
25. Używanie SQL-a do agregacji w systemach OLAP (441)
- 25.1. Kwerendy a raporty (441)
- 25.2. Operatory grupowania (442)
- 25.3. Klauzula okna (445)
- 25.4. Funkcje agregujące oparte na oknie (449)
- 25.5. Funkcje porządkowe (449)
- 25.6. Rozszerzenia udostępniane przez producentów (452)
- 25.7. Kartka z historii (456)
26. Zaawansowane instrukcje SELECT (459)
- 26.1. Podkwerendy skorelowane (459)
- 26.2. Wrostkowe złączenia wewnętrzne (464)
- 26.3. Złączenia zewnętrzne (465)
- 26.4. Operator UNION JOIN (477)
- 26.5. Skalarne wyrażenia SELECT (479)
- 26.6. Dawna i nowa składnia złączeń (480)
- 26.7. Złączenia z ograniczeniami (481)
- 26.8. Złączenia T dr. Codda (490)
- 26.9. Brakujące wartości w danych (496)
- 26.10. Brakujące i mieszane dane w wierszach (501)
CZĘŚĆ IV. STRUKTURY DANYCH W SQL-U (503)
27. Grafy w SQL-u (505)
- 27.1. Podstawowe cechy grafów (506)
- 27.2. Ścieżki w grafie (510)
- 27.3. Grafy acykliczne jako zbiory zagnieżdżone (517)
- 27.4. Model wykorzystujący macierz sąsiedztwa (519)
- 27.5. Punkty w wielokącie (520)
- 27.6. Geometria taksówkowa (521)
- 27.7. Klasy równoważności i kliki (524)
- 27.8. Podsumowanie (532)
28. Drzewa i hierarchie w SQL-u (533)
- 28.1. Listy sąsiedztwa (534)
- 28.2. Znajdowanie korzenia (535)
- 28.3. Znajdowanie liści (536)
- 28.4. Określanie poziomów w drzewie (536)
- 28.5. Operacje na drzewach (537)
- 28.6. Model oparty na zbiorach zagnieżdżonych (538)
- 28.7. Znajdowanie korzenia i liści (541)
- 28.8. Wyszukiwanie poddrzew (541)
- 28.9. Wyszukiwanie poziomów i ścieżek w drzewie (542)
- 28.10. Funkcje w modelu wykorzystującym zbiory zagnieżdżone (545)
- 28.11. Usuwanie wierzchołków i poddrzew (546)
- 28.12. Przegląd funkcji dotyczących drzew (548)
- 28.13. Wstawianie i aktualizowanie elementów drzew (554)
- 28.14. Przekształcanie list sąsiedztwa na zbiory zagnieżdżone (558)
- 28.15. Przekształcanie zbiorów zagnieżdżonych na listy sąsiedztwa (558)
- 28.16. Porównywanie wierzchołków i struktur (559)
29. Kolejki (563)
- 29.1. Podstawowe instrukcje DDL (563)
- 29.2. Procedury Enqueue, Dequeue i Empty (564)
- 29.3. Zmienianie uporządkowania (565)
- 29.4. Kolejki i matematyka (566)
- 29.5. Kolejki priorytetowe (567)
- 29.6. Kolejki FIFO i LIFO (568)
30. Macierze w SQL-u (573)
- 30.1. Tablice oparte na nazwanych kolumnach (574)
- 30.2. Tablice oparte na kolumnach z indeksem (577)
- 30.3. Operacje na macierzach w SQL-u (579)
- 30.4. Spłaszczanie tabeli do postaci tablicy (583)
- 30.5. Porównywanie tablic zapisanych jako tabele (585)
- 30.6. Inne operacje na macierzach (587)
CZĘŚĆ V. TYPOWE KWERENDY (589)
31. Partycjonowanie i agregowanie danych w kwerendach (591)
- 31.1. Pokrycie i partycje (591)
- 31.2. Zaawansowane grupowanie, agregowanie z uwzględnieniem okien i funkcje OLAP w SQL-u (596)
32. Podsekwencje, obszary, serie, luki i wyspy (613)
- 32.1. Znajdowanie podobszarów o wielkości (n) (614)
- 32.2. Numerowanie obszarów (615)
- 32.3. Wyszukiwanie obszarów o maksymalnej wielkości (617)
- 32.4. Kwerendy z granicami (621)
- 32.5. Kwerendy dotyczące serii i sekwencji (621)
- 32.6. Sumowanie ręcznie generowanych sekwencji wartości (626)
- 32.7. Przestawianie i przesuwanie wartości na liście (629)
- 32.8. Eliminowanie luk na listach liczb (630)
- 32.9. "Zawijanie" listy liczb (630)
- 32.10. Pokrycia (631)
- 32.11. Klasy równoważności i kliki (635)
33. Aukcje (645)
- 33.1. Rodzaje ofert (645)
- 33.2. Typy aukcji (646)
- 33.3. Stosowanie modeli LIFO i FIFO w magazynach (648)
- 33.4. Problem pakowania (653)
34. Dzielenie relacji (655)
- 34.1. Dzielenie z resztą (656)
- 34.2. Dzielenie bez reszty (658)
- 34.3. Uwaga na temat wydajności (659)
- 34.4. Dzielenie Todda (659)
- 34.5. Dzielenie z użyciem złączeń (662)
- 34.6. Dzielenie z wykorzystaniem operatorów zbiorów (662)
- 34.7. Dzielenie Romleya (663)
- 34.8. Wyrażenia logiczne w dzieleniu relacji (666)
35. Kwerendy związane z czasem (669)
- 35.1. Obliczenia matematyczne na czasie (670)
- 35.2. Kalendarze (674)
- 35.3. Szeregi czasowe (677)
- 35.4. Daty w formacie juliańskim (691)
- 35.5. Inne funkcje związane z czasem (694)
- 35.6. Okresy obejmujące wiele dni (694)
- 35.7. Reprezentowanie czasu w tabelach (698)
- 35.8. Funkcje LEAD() i LAG() (700)
- 35.9. Problemy z rokiem 2000 - przegląd historyczny (701)
CZĘŚĆ VI. KWESTIE ZWIĄZANE Z IMPLEMENTACJĄ I KODOWANIEM (707)
36. Programowanie proceduralne, mieszane i deklaratywne w SQL-u (709)
- 36.1. Słowa mają znaczenie (710)
- 36.2. Porządkowanie kodu (711)
37. Poziomy zagnieżdżania w SQL-u (717)
- 37.1. Tabele pochodne (718)
- 37.2. Reguły tworzenia nazw kolumn (719)
- 37.3. Reguły określania zasięgu (720)
- 37.4. Dostępne nazwy tabel (722)
- 37.5. Wyrażenia CTE (723)
- 37.6. Tabele z klauzulą LATERAL (723)
- 37.7. Wskazówki programistyczne (725)
38. Zagnieżdżony SQL, dynamiczny SQL z interfejsem CLI oraz SQL/PSM (727)
- 38.1. Zagnieżdżony SQL (728)
- 38.2. SQL/CLI (729)
- 38.3. Dynamiczny SQL (729)
- 38.4. Historia standardu SQL/PSM (729)
- 38.5. Parametry w formacie CSV (738)
Skorowdz (744)
Kategoria: | Bazy danych |
Zabezpieczenie: |
Watermark
|
ISBN: | 978-83-283-2531-9 |
Rozmiar pliku: | 4,0 MB |