okladka

Zbiór gotowych rozwiązań
dla programistów i administratorów baz danych

SQL jest językiem programowania używanym we wszystkich najpopularniejszych systemach zarządzania bazami danych. Oczywiście, każdy z nich ma specyficzne dla siebie polecenia i parametry, jednak rdzeń języka jest ustandaryzowany. SQL wykorzystuje się do tworzenia baz i tabel, wprowadzania danych do bazy i manipulowania nimi oraz do administrowania serwerem bazy danych. Mimo stosunkowo niewielkiego zbioru słów kluczowych, jest niezwykle elastyczny i uniwersalny.

Książka "SQL. Receptury" to zestawienie rozwiązań problemów, z jakimi programiści baz danych spotykają się w swojej pracy. Przedstawia zagadnienia związane z wybieraniem rekordów z bazy, grupowaniem, sortowaniem ich i tworzeniem złożonych zapytań wykorzystujących kilka tabel. Opisuje metody wprowadzania danych do bazy, tworzenia raportów i przetwarzania wyników zapytań. Każde z rozwiązań zaprezentowane jest w formie polecenia SQL opatrzonego szczegółowym komentarzem.

  • Odczytywanie danych z bazy
  • Sortowanie wyników zapytań
  • Łączenie tabel w zapytaniach
  • Wprowadzanie i aktualizowanie danych w tabelach
  • Usuwanie rekordów
  • Operacje na liczbach i datach
  • Zapytania złożone
  • Tworzenie raportów
  • Polecenia SQL specyficzne dla określonych systemów baz danych

Optymalna konstrukcja zapytań SQL jest jednym z warunków szybkiego działania aplikacji bazodanowych. Dzięki wiadomościom z tej książki każdy programista baz danych wykorzysta wszystkie możliwości języka SQL.


Przedmowa (11)
1. Odczytywanie rekordów (29)
  • Odczytywanie wszystkich wierszy i kolumn tabeli (29)
  • Odczytywanie podzbioru wierszy tabeli (30)
  • Odnajdywanie wierszy spełniających wiele warunków (30)
  • Odczytywanie podzbioru kolumn tabeli (31)
  • Definiowanie znaczących nazw kolumn (32)
  • Odwołania do aliasów kolumn w klauzuli WHERE (33)
  • Konkatenacja wartości kolumn (34)
  • Stosowanie logiki warunkowej w wyrażeniu SELECT (35)
  • Ograniczanie liczby zwracanych wierszy (36)
  • Zwracanie n losowych rekordów tabeli (38)
  • Odnajdywanie wartości pustych (39)
  • Tłumaczenie wartości pustych na wartości rzeczywiste (40)
  • Poszukiwanie wzorców (41)
2. Sortowanie wyników zapytań (43)
  • Zwracanie wyników zapytań posortowanych w określonym porządku (43)
  • Sortowanie zbioru wynikowego według zawartości wielu pól (44)
  • Sortowanie według podłańcuchów (45)
  • Sortowanie wymieszanych danych alfanumerycznych (46)
  • Obsługa wartości pustych w zapytaniach sortujących (49)
  • Sortowanie według klucza zależnego od danych (55)
3. Praca z wieloma tabelami (57)
  • Umieszczanie jednego zbioru wierszy ponad drugim (57)
  • Łączenie wzajemnie powiązanych wierszy (59)
  • Odnajdywanie wspólnych wierszy pomiędzy dwiema tabelami (60)
  • Uzyskiwanie z jednej tabeli tylko tych wartości, które nie występują w innej tabeli (62)
  • Uzyskiwanie z jednej tabeli tylko tych wierszy, dla których nie istnieją odpowiedniki w innej tabeli (66)
  • Dodawanie złączeń do zapytań bez konieczności modyfikowania pozostałych, już istniejących złączeń (68)
  • Określanie, czy dwie tabele zawierają te same dane (70)
  • Identyfikowanie i eliminowanie iloczynów kartezjańskich (76)
  • Stosowanie złączeń w zapytaniach wykorzystujących funkcje agregujące (78)
  • Stosowanie złączeń zewnętrznych w zapytaniach wykorzystujących funkcje agregujące (82)
  • Zwracanie brakujących danych z wielu tabel (85)
  • Wykorzystywanie wartości NULL w operacjach i wyrażeniach warunkowych (89)
4. Wstawianie, aktualizowanie i usuwanie (91)
  • Wstawianie nowych rekordów (92)
  • Wstawianie wartości domyślnych (92)
  • Przykrywanie wartości domyślnych wartością NULL (94)
  • Kopiowanie wierszy pomiędzy tabelami (95)
  • Kopiowanie definicji tabel (95)
  • Wstawianie wierszy do wielu tabel jednocześnie (97)
  • Blokowanie możliwości wstawiania wartości do wybranych kolumn (99)
  • Modyfikowanie rekordów tabeli (100)
  • Aktualizowanie danych pod warunkiem zawierania w tabeli określonych wierszy (101)
  • Aktualizowanie wartości według zawartości innej tabeli (102)
  • Scalanie rekordów (105)
  • Usuwanie wszystkich rekordów z tabeli (107)
  • Usuwanie rekordów spełniających określone kryteria (107)
  • Usuwanie pojedynczych rekordów (108)
  • Usuwanie wierszy naruszających integralność odwołań (109)
  • Usuwanie powtarzających się rekordów (110)
  • Usuwanie wierszy będących przedmiotem odwołań rekordów składowanych w innej tabeli (111)
5. Zapytania przetwarzające metadane (113)
  • Generowanie listy tabel wchodzących w skład schematu bazy danych (113)
  • Generowanie listy kolumn danej tabeli (114)
  • Generowanie listy indeksowanych kolumn danej tabeli (115)
  • Generowanie listy ograniczeń zdefiniowanych dla tabeli (117)
  • Generowanie listy kluczy obcych pozbawionych indeksów (118)
  • Generowanie kodu języka SQL za pomocą wyrażeń tego języka (121)
  • Opisywanie perspektyw słowników danych w bazie danych Oracle (123)
6. Praca z łańcuchami (125)
  • Przechodzenie pomiędzy znakami łańcucha (126)
  • Umieszczanie apostrofów w stałych łańcuchowych (128)
  • Zliczanie wystąpień znaku w łańcuchu wejściowym (129)
  • Usuwanie z łańcucha niechcianych znaków (130)
  • Oddzielanie danych numerycznych od danych znakowych (131)
  • Określanie, czy łańcuch jest ciągiem alfanumerycznym (135)
  • Określanie inicjałów na podstawie całych imion i nazwisk (140)
  • Sortowanie kolumn według wybranych fragmentów łańcuchów (144)
  • Sortowanie danych według liczb zapisanych w łańcuchach (145)
  • Tworzenie listy wartości oddzielonych przecinkami z danych zawartych w wierszach tabeli (151)
  • Konwertowanie danych oddzielonych przecinkami na wielowartościową listę IN (157)
  • Sortowanie znaków w łańcuchach w porządku alfabetycznym (162)
  • Identyfikowanie łańcuchów, które można traktować jak liczby (168)
  • Odnajdywanie n-tego podłańcucha na liście oddzielonej przecinkami (174)
  • Przetwarzanie adresów IP (180)
7. Praca z liczbami (183)
  • Wyznaczanie wartości średniej (183)
  • Identyfikacja minimalnej i maksymalnej wartości w kolumnie (185)
  • Sumowanie wartości składowanych w kolumnie (187)
  • Zliczanie wierszy tabeli (188)
  • Zliczanie różnych wartości w kolumnie (190)
  • Generowanie sum bieżących (191)
  • Generowanie iloczynów bieżących (194)
  • Wyznaczanie różnic bieżących (197)
  • Wyznaczanie wartości modalnej (dominanty) (198)
  • Wyznaczanie mediany (201)
  • Określanie procentowego udziału w wartości łącznej (205)
  • Agregowanie kolumn zawierających wartości NULL (207)
  • Wyznaczanie wartości średnich z wyłączeniem wartości spoza określonego przedziału (209)
  • Konwertowanie łańcuchów alfanumerycznych na liczby (210)
  • Modyfikowanie wartości uwzględnianych w sumach bieżących (213)
8. Działania na datach (215)
  • Dodawanie i odejmowanie dni, miesięcy i lat (215)
  • Określanie liczby dni pomiędzy dwiema datami (218)
  • Określanie liczby dni roboczych pomiędzy dwiema datami (220)
  • Określanie liczby miesięcy lub lat dzielących dwie daty (224)
  • Określanie liczby sekund, minut lub godzin dzielących dwie daty (227)
  • Zliczanie wystąpień poszczególnych dni tygodnia w roku (228)
  • Określanie różnicy dzielącej datę reprezentowaną w bieżącym rekordzie i datę reprezentowaną w rekordzie następnym (239)
9. Przetwarzanie dat (245)
  • Określanie, czy dany rok jest rokiem przestępnym (246)
  • Określanie liczby dni w roku (252)
  • Wydobywanie jednostek czasu z dat wejściowych (255)
  • Określanie pierwszego i ostatniego dnia miesiąca (257)
  • Określanie wszystkich dat dla konkretnego dnia tygodnia w ciągu danego roku (260)
  • Określanie dat pierwszego i ostatniego wystąpienia określonego dnia tygodnia w danym miesiącu (267)
  • Tworzenie kalendarza (274)
  • Generowanie dat rozpoczynających i kończących poszczególne kwartały danego roku (291)
  • Określanie daty początkowej i końcowej dla danego na wejściu kwartału (296)
  • Odnajdywanie brakujących dat (303)
  • Przeszukiwanie według określonych jednostek czasu (312)
  • Porównywanie rekordów według określonych fragmentów dat (314)
  • Identyfikacja wzajemnie pokrywających się przedziałów czasowych (317)
10. Praca z przedziałami (323)
  • Lokalizowanie przedziałów w ramach ciągów wartości (323)
  • Odnajdywanie różnic pomiędzy wierszami należącymi do tej samej grupy lub wycinka danych (328)
  • Lokalizowanie początków i końców przedziałów wartości następujących bezpośrednio po sobie (337)
  • Uzupełnianie brakujących wartości w przedziale (342)
  • Generowanie kolejnych wartości liczbowych (346)
11. Zaawansowane przeszukiwanie (351)
  • Podział zbioru wynikowego na strony (351)
  • Pomijanie n wierszy tabeli (354)
  • Stosowanie logiki alternatywy w zapytaniach wykorzystujących złączenia zewnętrzne (357)
  • Identyfikacja par odwrotnych w przetwarzanym zbiorze wierszy (360)
  • Wybieranie n najlepszych rekordów (361)
  • Odnajdywanie rekordów z największymi i najmniejszymi wartościami (363)
  • Badanie "przyszłych" wierszy (365)
  • Przenoszenie wartości nieprzetworzonych (369)
  • Przypisywanie ocen do wierszy zbioru wynikowego (372)
  • Eliminowanie powtórzeń (373)
  • Odnajdywanie wartości skoczka (375)
  • Generowanie prostych prognoz (382)
12. Raportowanie i magazynowanie danych (391)
  • Konwertowanie zbioru wynikowego do postaci pojedynczego wiersza (391)
  • Konwertowanie zbioru wynikowego do postaci zbioru wielowierszowego (393)
  • Odwrotna transpozycja zbioru wynikowego (401)
  • Odwrotna transpozycja zbioru danych do postaci zbioru jednokolumnowego (403)
  • Eliminowanie powtórzeń ze zbioru wynikowego (406)
  • Obracanie zbioru wynikowego celem wykonywania obliczeń w ramach skonsolidowanych wierszy (409)
  • Tworzenie bloków danych tej samej wielkości (411)
  • Tworzenie predefiniowanej liczby bloków danych (414)
  • Tworzenie histogramów poziomych (419)
  • Tworzenie histogramów pionowych (421)
  • Zwracanie zbiorów wynikowych bez kolumn wykorzystywanych w procesie grupowania (424)
  • Wyznaczanie prostych sum częściowych (429)
  • Wyznaczanie sum częściowych dla wszystkich możliwych kombinacji wyrażeń (433)
  • Identyfikowanie wierszy niebędących sumami częściowymi (442)
  • Konwertowanie wierszy na wersję bitową za pomocą wyrażeń CASE (444)
  • Tworzenie tzw. macierzy rzadkich (446)
  • Grupowanie wierszy według określonych jednostek czasu (447)
  • Jednoczesne agregowanie danych według różnych grup i bloków (451)
  • Agregowanie zmiennych (ruchomych) przedziałów wartości (453)
  • Obracanie zbioru wynikowego zawierającego sumy częściowe (460)
13. Zapytania hierarchiczne (465)
  • Wyrażanie relacji rodzic-potomek (466)
  • Wyrażanie relacji potomek-rodzic-dziadek (469)
  • Tworzenie hierarchicznych perspektyw dla istniejących tabel (475)
  • Odnajdywanie wszystkich wierszy potomnych dla danego wiersza rodzica (483)
  • Określanie wierszy występujących w rolach liści, gałęzi i korzeni (486)
14. Rozmaitości (495)
  • Tworzenie raportów krzyżowych za pomocą operatora PIVOT systemu SQL Server (495)
  • Przywracanie oryginalnego kształtu obróconych raportów krzyżowych za pomocą operatora UNPIVOT systemu SQL Server (497)
  • Transponowanie zbiorów wynikowych za pomocą klauzuli MODEL systemu Oracle (499)
  • Wydobywanie interesujących nas elementów z różnych części łańcucha (503)
  • Znajdowanie liczby dni w roku (rozwiązanie alternatywne tylko dla systemu Oracle) (506)
  • Przeszukiwanie danych wejściowych pod kątem zawierania łańcuchów alfanumerycznych (507)
  • Konwertowanie liczb całkowitych na reprezentacje binarne w systemie Oracle (509)
  • Obracanie zbioru wynikowego z wartościami rankingowymi (512)
  • Wstawianie nagłówków kolumn w dwukrotnie obróconych zbiorach wynikowych (516)
  • Konwertowanie podzapytań skalarnych na podzapytania kompozytowe w systemie Oracle (526)
  • Konwertowanie uszeregowanych danych do postaci osobnych wierszy (528)
  • Wyznaczanie procentowych stosunków poszczególnych wartości względem sumy wszystkich wartości (533)
  • Tworzenie w systemie Oracle list wartości oddzielonych przecinkami (535)
  • Odnajdywanie kolejnych niepasujących wzorców w systemie Oracle (540)
  • Transformacja danych za pomocą perspektywy wbudowanej (542)
  • Testowanie występowania wartości w grupie (544)
A Przypomnienie funkcji okienkowania (549)
B Jeszcze raz o Rozenshteinie (575)
Skorowidz (611)