
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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
- 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)
B Jeszcze raz o Rozenshteinie (575)
Skorowidz (611)