SQL w mgnieniu oka

13
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ IDZ DO IDZ DO ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG KATALOG KSI¥¯EK KATALOG KSI¥¯EK TWÓJ KOSZYK TWÓJ KOSZYK CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK ZAMÓW CENNI K CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE SPIS TRECI SPIS TRECI DODAJ DO KOSZYKA DODAJ DO KOSZYKA KATALOG ONLINE KATALOG ONLINE SQL w mgnieniu oka Autor: Ben Forta T³umaczenie: Rafa³ Joñca, Paulina Soba ISBN: 83-7361-469-9 Tytu³ orygina³u: Teach Yourself SQL in 10 Minutes, 2nd Edition Format: B5, stron: 248 Na temat jêzyka SQL napisano ju¿ wiele ksi¹¿ek. Wiele z nich, o niekwestionowanej jakoci, obarcza jednak czytelnika mnogoci¹ dodatkowych informacji na temat teorii relacyjnych baz danych, ich projektowania i administrowania nimi. Mimo fundamentalnego znaczenia tych zagadnieñ u¿ytkownik chcia³by jednak skupiæ siê na szczegó³ach samego jêzyka SQL, poczynaj¹c od jego najprostszych elementów, by dopiero póniej, w miarê doskonalenia swej wiedzy i poznawania coraz bardziej z³o¿onych elementów SQL siêgn¹æ do tematyki o charakterze bardziej ogólnym. Niniejsza ksi¹¿ka jest wolna od opisanego syndromu, a ka¿dy z jej rozdzia³ów czyta siê w ci¹gu 10 minut. Pasjonuj¹ca przygoda z jêzykiem SQL rozpoczyna siê ju¿ w pierwszym rozdziale; w kolejnych Czytelnik zapoznaje siê z coraz bardziej z³o¿onymi zagadnieniami, jak: • Podstawowe elementy baz danych — tabele, kolumny, wiersze i klucze • Pobieranie danych z tabeli i ich sortowanie • Filtrowanie danych za pomoc¹ fraz WHERE i operatorów AND, OR, IN, NOT i LIKE • Tworzenie unii • Wstawianie, aktualizacja i usuwanie danych • Tworzenie i modyfikowanie tabel • Tworzenie i wykorzystywanie perspektyw • Wykorzystywanie procedur zapamiêtanych • Zarz¹dzanie transakcjami • Indeksowanie i powi¹zania miêdzy tabelami za pomoc¹ kluczy • Zastosowanie jêzyka SQL na gruncie Visual C++ i Visual Basica oraz popularnych systemów baz danych, jak SQL Server 6x, 7 i 2000, MS Access, MS Query i MS ASP

description

Każde zagadnienie do opanowania w 10 minutNa temat języka SQL napisano już wiele książek. Wiele z nich, o niekwestionowanej jakości, obarcza jednak czytelnika mnogością dodatkowych informacji na temat teorii relacyjnych baz danych, ich projektowania i administrowania nimi. Mimo fundamentalnego znaczenia tych zagadnień użytkownik chciałby jednak skupić się na szczegółach samego języka SQL, poczynając od jego najprostszych elementów, by dopiero później, w miarę doskonalenia swej wiedzy i poznawania coraz bardziej złożonych elementów SQL sięgnąć do tematyki o charakterze bardziej ogólnym. Niniejsza książka jest wolna od opisanego syndromu, a każdy z jej rozdziałów czyta się w ciągu 10 minut. Pasjonująca przygoda z językiem SQL rozpoczyna się już w pierwszym rozdziale; w kolejnych Czytelnik zapoznaje się z coraz bardziej złożonymi zagadnieniami, jak:* Podstawowe elementy baz danych -- tabele, kolumny, wiersze i klucze* Pobieranie danych z tabeli i ich sortowanie* Filtrowanie danych za pomocą fraz WHERE i operatorów AND, OR, IN, NOT i LIKE* Tworzenie unii* Wstawianie, aktualizacja i usuwanie danych* Tworzenie i modyfikowanie tabel* Tworzenie i wykorzystywanie perspektyw* Wykorzystywanie procedur zapamiętanych* Zarządzanie transakcjami* Indeksowanie i powiązania między tabelami za pomocą kluczy* Zastosowanie języka SQL na gruncie Visual C++ i Visual Basica oraz popularnych systemów baz danych, jak SQL Server 6x, 7 i 2000, MS Access, MS Query i MS ASPPrzykładową bazę danych możesz pobrać TUTAJ.

Transcript of SQL w mgnieniu oka

Page 1: SQL w mgnieniu oka

Wydawnictwo Helion

ul. Chopina 6

44-100 Gliwice

tel. (32)230-98-63

e-mail: [email protected]

PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£

IDZ DOIDZ DO

ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EKKATALOG KSI¥¯EK

TWÓJ KOSZYKTWÓJ KOSZYK

CENNIK I INFORMACJECENNIK I INFORMACJE

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW CENNIKZAMÓW CENNIK

CZYTELNIACZYTELNIA

FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE

SPIS TRE�CISPIS TRE�CI

DODAJ DO KOSZYKADODAJ DO KOSZYKA

KATALOG ONLINEKATALOG ONLINE

SQL w mgnieniu oka

Autor: Ben Forta

T³umaczenie: Rafa³ Joñca, Paulina Soba�

ISBN: 83-7361-469-9

Tytu³ orygina³u: Teach Yourself SQL

in 10 Minutes, 2nd Edition

Format: B5, stron: 248

Na temat jêzyka SQL napisano ju¿ wiele ksi¹¿ek. Wiele z nich, o niekwestionowanej

jako�ci, obarcza jednak czytelnika mnogo�ci¹ dodatkowych informacji na temat teorii

relacyjnych baz danych, ich projektowania i administrowania nimi.

Mimo fundamentalnego znaczenia tych zagadnieñ u¿ytkownik chcia³by jednak skupiæ

siê na szczegó³ach samego jêzyka SQL, poczynaj¹c od jego najprostszych elementów,

by dopiero pó�niej, w miarê doskonalenia swej wiedzy i poznawania coraz bardziej

z³o¿onych elementów SQL siêgn¹æ do tematyki o charakterze bardziej ogólnym.

Niniejsza ksi¹¿ka jest wolna od opisanego syndromu, a ka¿dy z jej rozdzia³ów

czyta siê w ci¹gu 10 minut. Pasjonuj¹ca przygoda z jêzykiem SQL rozpoczyna siê

ju¿ w pierwszym rozdziale; w kolejnych Czytelnik zapoznaje siê z coraz bardziej

z³o¿onymi zagadnieniami, jak:

• Podstawowe elementy baz danych — tabele, kolumny, wiersze i klucze

• Pobieranie danych z tabeli i ich sortowanie

• Filtrowanie danych za pomoc¹ fraz WHERE i operatorów AND, OR, IN, NOT i LIKE

• Tworzenie unii

• Wstawianie, aktualizacja i usuwanie danych

• Tworzenie i modyfikowanie tabel

• Tworzenie i wykorzystywanie perspektyw

• Wykorzystywanie procedur zapamiêtanych

• Zarz¹dzanie transakcjami

• Indeksowanie i powi¹zania miêdzy tabelami za pomoc¹ kluczy

• Zastosowanie jêzyka SQL na gruncie Visual C++ i Visual Basica

oraz popularnych systemów baz danych, jak SQL Server 6x, 7

i 2000, MS Access, MS Query i MS ASP

Page 2: SQL w mgnieniu oka

Spis treści

O Autorze......................................................................8

Wprowadzenie ...............................................................9

Rozdział 1. Podstawy języka SQL...................................................13Podstawy baz danych ............................................................................ 13Język SQL............................................................................................. 18Ćwicz .................................................................................................... 19Podsumowanie ...................................................................................... 19

Rozdział 2. Pobieranie danych .......................................................21Instrukcja SELECT............................................................................... 21Pobranie konkretnej kolumny ............................................................... 22Pobranie wielu kolumn ......................................................................... 23Pobranie wszystkich kolumn ................................................................ 24Podsumowanie ...................................................................................... 25

Rozdział 3. Sortowanie otrzymywanych danych ..............................27Sortowanie danych................................................................................ 27Sortowanie względem wielu kolumn.................................................... 29Sortowanie względem położenia kolumny ........................................... 30Określenie kierunku sortowania............................................................ 31Podsumowanie ...................................................................................... 33

Rozdział 4. Filtrowanie danych ......................................................35Stosowanie frazy WHERE.................................................................... 35Operatory frazy WHERE...................................................................... 36Podsumowanie ...................................................................................... 40

Rozdział 5. Zaawansowane filtrowanie danych...............................41Łączenie fraz WHERE.......................................................................... 41Operator IN ........................................................................................... 45Operator NOT ....................................................................................... 46Podsumowanie ...................................................................................... 48

Page 3: SQL w mgnieniu oka

4 SQL w mgnieniu oka

Rozdział 6. Filtrowanie za pomocą znaków wieloznacznych.............49Korzystanie z operatora LIKE .............................................................. 49Wskazówki dotyczące używania znaków wieloznacznych .................. 54Podsumowanie ...................................................................................... 54

Rozdział 7. Tworzenie pól obliczanych............................................55Pojęcie pól obliczanych ........................................................................ 55Konkatenacja pól................................................................................... 56Przeprowadzanie obliczeń matematycznych ........................................ 62Podsumowanie ...................................................................................... 63

Rozdział 8. Modyfikacja danych za pomocą funkcji ........................65Czym są funkcje.................................................................................... 65Stosowanie funkcji ................................................................................ 67Podsumowanie ...................................................................................... 73

Rozdział 9. Funkcje agregujące .....................................................75Funkcje agregujące ............................................................................... 75Agregacja tylko różnorodnych wartości ............................................... 81Łączenie funkcji agregujących.............................................................. 83Podsumowanie ...................................................................................... 83

Rozdział 10. Grupowanie danych .....................................................85Omówienie grupowania danych............................................................ 85Tworzenie grup ..................................................................................... 86Filtrowanie grup.................................................................................... 88Grupowanie i sortowanie ...................................................................... 90Kolejność fraz instrukcji SELECT ....................................................... 92Podsumowanie ...................................................................................... 92

Rozdział 11. Zapytania zagnieżdżone...............................................93Zagnieżdżanie zapytań.......................................................................... 93Filtrowanie na podstawie zapytań zagnieżdżonych .............................. 94Zapytania zagnieżdżone jako pola obliczane........................................ 97Podsumowanie ...................................................................................... 99

Rozdział 12. Łączenie tabel ...........................................................101Czym są złączenia? ............................................................................. 101Tworzenie złączeń............................................................................... 104Podsumowanie .................................................................................... 110

Rozdział 13. Tworzenie rozbudowanych złączeń..............................111Stosowanie aliasów tabel .................................................................... 111Typy złączeń ....................................................................................... 113Złączenia i funkcje agregujące............................................................ 119Złączenia i ich warunki ....................................................................... 120Podsumowanie .................................................................................... 120

Rozdział 14. Łączenie zapytań .......................................................121Łączenie zapytań................................................................................. 121Tworzenie unii .................................................................................... 122Podsumowanie .................................................................................... 126

Page 4: SQL w mgnieniu oka

Spis treści 5

Rozdział 15. Wstawianie danych ...................................................127Wstawianie danych ............................................................................. 127Kopiowanie z jednej tabeli do innej.................................................... 133Podsumowanie .................................................................................... 134

Rozdział 16. Aktualizacja i usuwanie danych .................................135Aktualizacja danych............................................................................ 135Usuwanie danych ................................................................................ 137Wskazówki związane z aktualizacją lub usuwaniem danych ............. 138Podsumowanie .................................................................................... 139

Rozdział 17. Tworzenie i modyfikacja tabel ....................................141Tworzenie tabel................................................................................... 141Aktualizacja tabel................................................................................ 147Usuwanie tabel .................................................................................... 148Zmiana nazwy tablicy ......................................................................... 149Podsumowanie .................................................................................... 149

Rozdział 18. Stosowanie perspektyw.............................................151Perspektywy ........................................................................................ 151Tworzenie widoków............................................................................ 154Podsumowanie .................................................................................... 160

Rozdział 19. Korzystanie z zapamiętanych procedur .......................161Zapamiętane procedury....................................................................... 161Dlaczego warto używać zapamiętanych procedur .............................. 162Wykonywanie zapamiętanych procedur ............................................. 164Tworzenie zapamiętanych procedur ................................................... 165Podsumowanie .................................................................................... 168

Rozdział 20. Zarządzanie transakcjami ..........................................169Działanie transakcji............................................................................. 169Sterowanie transakcjami ..................................................................... 171Podsumowanie .................................................................................... 175

Rozdział 21. Kursory .....................................................................177Działanie kursorów ............................................................................. 177Praca z kursorami................................................................................ 178Podsumowanie .................................................................................... 182

Rozdział 22. Zaawansowane funkcje języka SQL............................183Ograniczenia ....................................................................................... 183Omówienie indeksów.......................................................................... 189Wyzwalacze ........................................................................................ 191Bezpieczeństwo baz danych................................................................ 193Podsumowanie .................................................................................... 194

Dodatek A Skrypty przykładowych tabel......................................195Omówienie przykładowych tabel........................................................ 195Tworzenie przykładowych tabel ......................................................... 199Wypełnienie przykładowych tabel......................................................... 202

Page 5: SQL w mgnieniu oka

6 SQL w mgnieniu oka

Dodatek B Praca z popularnymi aplikacjami ................................213Konfiguracja źródeł danych ODBC....................................................... 213Allaire ColdFusion.............................................................................. 215Allaire JRun 3.x .................................................................................. 215DB2 ..................................................................................................... 216Informix Dynamic Server 7.x ............................................................. 216Microsoft Access................................................................................. 217Microsoft ASP..................................................................................... 218Microsoft Query.................................................................................. 219Microsoft SQL Server 6.x................................................................... 220Microsoft SQL Server 7...................................................................... 220Microsoft SQL Server 2000................................................................ 221Microsoft Visual Basic........................................................................ 221Microsoft Visual C++ ......................................................................... 222Oracle 8 ............................................................................................... 223Query Tool .......................................................................................... 223Sybase ................................................................................................. 224

Dodatek C Składnia instrukcji SQL..............................................225ALTER TABLE.................................................................................. 225COMMIT ............................................................................................ 226CREATE INDEX................................................................................ 226CREATE PROCEDURE .................................................................... 226CREATE TABLE ............................................................................... 227CREATE VIEW.................................................................................. 227DELETE.............................................................................................. 227DROP.................................................................................................. 228INSERT............................................................................................... 228INSERT SELECT............................................................................... 228ROLLBACK ....................................................................................... 229SELECT.............................................................................................. 229UPDATE............................................................................................. 229

Dodatek D Typy danych języka SQL.............................................231Tekstowe typy danych ........................................................................ 232Numeryczne typy danych.................................................................... 233Typy danych daty i czasu.................................................................... 234Binarne typy danych ........................................................................... 235

Dodatek E Słowa kluczowe języka SQL .......................................237

Skorowidz .................................................................241

Page 6: SQL w mgnieniu oka

Rozdział 10.

Grupowanie danych

W tym rozdziale opisana jest funkcja grupowania danych, która umożliwia

podsumowywanie podzbiorów tabeli. Wprowadzone są też dwie nowe frazy

instrukcji ������: ����� i ������.

Omówienie grupowania danych

W poprzednim rozdziale opisywałem funkcje agregujące języka SQL używane

do tworzenia podsumowań danych. Umożliwiały one zliczanie wierszy, obli-

czanie sumy i średniej, a także znajdowanie wartości największej i najmniej-

szej. Wszystko to odbywało się bez potrzeby pobierania wszystkich danych.

Do tej pory obliczenia przeprowadzane były na wszystkich danych w tabeli,

lub na danych spełniających warunek określony we frazie �����. Oto krótkie

przypomnienie — poniższy przykład zwraca wszystkie produkty oferowane

przez dostawcę �����:

�������������� ������������������������� !"������#�����$�%&��'(%)

�����������************+

Page 7: SQL w mgnieniu oka

86 SQL w mgnieniu oka

W jaki sposób pobrać liczbę produktów oferowanych przez poszczególnych

producentów? Jak uzyskać dane dotyczące tylko tych producentów, którzy ofe-

rują jeden produkt lub oferują powyżej 10 produktów?

W takiej sytuacji niezastąpione jest grupowanie. Umożliwia ono podzielenie

danych na logiczne zbiory i przeprowadzenie funkcji agregujących na każdej

z grup osobno.

Tworzenie grup

Grupy tworzy się za pomocą frazy ����� w instrukcji ������. Najłatwiej

zrozumieć to na przykładzie:

���������#����,�������� ������������������������� -�����./���#����)

��#������������������*******���***********.��'(�����0&��'(�����+�-'(�����1

Powyższa instrukcja ������ określa dwie kolumny, ������� (która zawiera

identyfikator dostawcy) i ���� !�"#�� (która jest polem obliczanym za pomocą

funkcji agregującej ����$%&&. Fraza ����� sprawia, że SZBD sortuje wy-

niki i grupuje je względem �������. Powoduje to obliczanie ���� !�"#�� dla

każdego unikalnego �������, zamiast zbiorowo dla całej tabeli. W ten sposób

można się dowiedzieć, iż dostawca ����� oferuje 3 produkty, dostawca �����

4 produkty, a dostawca '���� 2 produkty.

Ponieważ pojawiła się fraza ����� , nie trzeba było określać każdej grupy, by

poznać jej wartość. Wszystko zostało wykonane automatycznie. Fraza �����

powoduje, że system zarządzania najpierw grupuje dane, a następnie przepro-

wadza funkcję agregującą osobno dla każdej grupy, zamiast dla wszystkich

wyników.

Page 8: SQL w mgnieniu oka

Rozdział 10. ♦ Grupowanie danych 87

C:\Andrzej\PDF\SQL w mgnieniu oka\r10-06.doc (04-05-28) 87

Zanim jednak rozpocznie się stosowanie frazy ����� , warto dokładniej po-

znać jej działanie:

� Fraza ����� może zawierać dowolną liczbę kolumn. Umożliwia to

tworzenie zagnieżdżonych grup, a tym samym bardziej szczegółowe

opracowywanie danych.

� W przypadku wprowadzenia kilku nazw kolumn we frazie, dane

podsumowywane są dla ostatniej określonej kolumny (dla jej grup).

Oznacza to, że nie jest możliwe uzyskanie danych dla wszystkich

wymienionych kolumn.

� Wszystkie kolumny wymienione we frazie ����� muszą być

kolumnami pobieranymi z bazy lub pełnymi wyrażeniami (ale nie

funkcjami agregującymi). Jeśli wyrażenie występuje po ������, w takiej

samej postaci musi się znaleźć we frazie ����� . Nie można w tym

wypadku stosować aliasów.

� Większość implementacji SQL nie dopuszcza, aby we frazie �����

znalazły się kolumny typów danych o zmiennej długości (na przykład

pola tekstowe lub memo).

� Wszystkie kolumny występujące w instrukcji ������ muszą się także

znaleźć we frazie ����� (nie dotyczy to funkcji agregujących).

� Jeśli grupowana kolumna zawiera wiersz z wartością ���, powstanie

osobna grupa o nazwie ���. Jeśli istnieje kilka wierszy o wartości ���,

zostaną one scalone w jedną grupę.

� W przypadku występowania dodatkowych fraz, funkcja ����� musi

się pojawić po frazie �����, ale przed ������� .

Fraza ���. Pewne implementacje SQL (na przykład Microsoft SQL

Server) obsługują opcjonalną frazę ��� dla ����� . Fraza ta mo-że posłużyć do zwrócenia wszystkich grup, nawet tych, dla których

agregacja spowodowałaby zwrócenie wartości ���. Szczegółównależy szukać w dokumentacji SZBD.

Określanie kolumn za pomocą położeń względnych. Niektóre im-

plementacje SQL umożliwiają podanie we frazie ����� położeńkolumn z listy ������. Można wtedy na przykład napisać ����� ()��, aby grupowanie najpierw odbyło się względem drugiej kolumny,a następnie pierwszej. Choć ten skrótowy zapis jest bardzo ku-szący, nie obsługują go wszystkie implementacje, a dodatkowoniesie ze sobą ryzyko pojawienia się błędów po zmianie kolejnościkolumn.

Page 9: SQL w mgnieniu oka

88 SQL w mgnieniu oka

Filtrowanie grup

Poza samą możliwością grupowania danych, język SQL oferuje także filtro-

wanie na podstawie danych zebranych dla poszczególnych grup. Na przykład

można wyświetlić wszystkich klientów, którzy dokonali przynajmniej dwóch

zamówień. Takie filtrowanie musi się odbywać wobec pełnych grup, a nie po-

szczególnych wierszy.

Nie jest możliwe posłużenie się tutaj frazą ����� opisaną w rozdziale 4., gdyż

powoduje ona filtrowanie wierszy i to jeszcze przed rozpoczęciem grupowa-

nia. Inaczej mówiąc, fraza ����� nie wie, czym jest grupowanie.

Jaka jest więc alternatywa dla �����? Język SQL wprowadza dodatkową frazę

������. Jest ona bardzo podobna do �����. W zasadzie wszystkie opisane do

tej pory techniki filtrowania związane z ����� mogą zostać także użyte we

frazie ������. Jedyna różnica polega na tym, iż ����� filtruje wiersze, a ������

grupy.

Fraza ������ obsługuje wszystkie operatory frazy �����. Rozdziały 4.i 5. opisywały proste i zaawansowane filtrowanie danych. Wszyst-kie opisane tam operatory można z powodzeniem stosować we

frazie ������. Składnia jest identyczna, zmienia się tylko słowokluczowe.

Oto przykład filtrowania grup:

������������,�������� ����2�3�45�������6�2�3�45��-�����./������" 78-��������9$�1)

����������������2�3�45��***********���**********(''''''''(����1

Pierwsze trzy wiersze są bardzo podobne do wcześniejszego przykładu z tego

rozdziału. Ostatni wiersz wprowadza frazę ������, która przepuszcza tylko te

grupy, które posiadają minimum dwa zamówienia — ����$%&�*+�(.

Page 10: SQL w mgnieniu oka

Rozdział 10. ♦ Grupowanie danych 89

C:\Andrzej\PDF\SQL w mgnieniu oka\r10-06.doc (04-05-28) 89

Można się przekonać, iż fraza ����� nie przeprowadziłaby poprawnego filtro-

wania, ponieważ musi ono bazować na wartości z agregacji grupy, a nie war-

tości znajdujących się w poszczególnych wierszach.

Różnica między ������ i �����. Można na to zagadnienie spojrzeć

inaczej. Fraza ����� filtruje dane przed grupowaniem, natomiast

������ po. Jest to ważna różnica — wiersze wyeliminowane przez

frazę ����� w ogóle nie zostaną wzięte pod uwagę przy tworzeniugrup. Powoduje to zmianę wartości pól obliczanych, a tym samymzmianę wyświetlanych grup, gdy przeprowadzane jest filtrowanie.

Czy zachodzi potrzeba jednoczesnego stosowania fraz ����� i ������ w jed-

nym zapytaniu? W pewnych sytuacjach jest ona nawet konieczna. Przypuśćmy

na przykład, iż poprzednie zapytanie powinno zwrócić dowolnych klientów

z więcej niż jednym zamówieniem, ale pod uwagę należy brać tylko ostatni rok.

W takiej sytuacji fraza ����� spowoduje przeanalizowanie zamówień tylko

z ostatnich 12 miesięcy, a fraza ������ wskaże tylko klientów z co najmniej

dwoma zamówieniami.

Oto inny przykład. Zapytanie powoduje wyświetlenie listy dostawców z wię-

cej niż jednym produktem o cenie powyżej 10 złotych.

���������#����,�������� ������������������������� !"����������45��9$�('-�����./���#����" 78-��������9$�1)

��#������������������*******���***********.��'(�����0�-'(�����1

Zapytanie to wymaga krótkiego wyjaśnienia. Pierwszy wiersz to prosta in-

strukcja ������ z funkcją agregującą — podobnie jak w poprzednich przykła-

dach. Fraza ����� filtruje wszystkie wiersze, których "#����,-! jest mniejsza od

10 złotych. Następnie dane są grupowane pod kątem �������, a fraza ������

przepuszcza tylko grupy zawierające więcej niż jedno zamówienie. Bez frazy

����� zostałby pobrany dodatkowy wiersz, ponieważ dostawca ����� sprzedaje

trzy produkty po cenie poniżej 10 złotych.

Page 11: SQL w mgnieniu oka

90 SQL w mgnieniu oka

���������#����,�������� ������������������������� -�����./���#����" 78-��������9$�1)

��#������������������*******���***********.��'(�����0&��'(�����+�-'(�����1

Stosowanie ������ i �����. Fraza ������ jest tak podobna do frazy�����, że większość SZBD traktuje je identycznie, jeśli nie okre-ślono frazy ����� . Mimo to warto samemu jasno rozdzielać obie

frazy, czyli ������ stosować tylko z ����� , a ����� używać dofiltrowania na niższym poziomie.

Grupowanie i sortowanie

Trzeba zdać sobie sprawę z tego, iż frazy ����� i ������� są bardzo różne,

choć wykonują podobne zadanie. Tabela 10.1 wymienia różnice występujące

między obiema frazami.

Tabela 10.1. Frazy ORDER BY i GROUP BY

ORDER BY GROUP BY

Sortuje wygenerowane wyjście. Grupuje wiersze. Wyjście nie musi być jednak

posortowane względem grup.

Można stosować dla dowolnych

kolumn (także tych, które nie są

zwracane).

Można zastosować tylko wobec zwracanych

kolumn lub wyrażeń. Wystąpić muszą wszystkie

zwracane kolumny lub wyrażenia.

Stosowanie frazy nie jest zawsze

wymagane.

Stosowanie frazy jest konieczne, jeśli używa się

kolumn (lub wyrażeń) z funkcjami agregującymi.

Pierwsza różnica wymieniona w tabeli 10.1 jest niezmiernie ważna. Choć nie

jest to wymagane, to najczęściej grupy będą wyświetlane w sposób posorto-

wany. Co więcej, choć dany system może zawsze sortować grupy po zastoso-

waniu frazy ����� , konieczny może okazać się inny sposób sortowania. Choć

grupowanie odbywa się w taki, a nie inny sposób, nie oznacza to jednocześnie,

Page 12: SQL w mgnieniu oka

Rozdział 10. ♦ Grupowanie danych 91

C:\Andrzej\PDF\SQL w mgnieniu oka\r10-06.doc (04-05-28) 91

iż sortowanie także musi odbywać się w ten sam sposób. Zawsze można zasto-

sować opcjonalną frazę ������� , aby wymusić odpowiednie sortowanie po-

grupowanych danych.

Nie zapominaj o frazie ������� . Ogólnie rzecz ujmując, za każdymrazem, gdy stosuje się frazę ����� , powinno się także stoso-wać frazę ������� , gdyż jest to jedyny sposób zapewnienia od-powiedniego sortowania danych. Nigdy nie należy polegać na sor-

towaniu za pomocą ����� .

Oto krótki przykład, który zademonstruje użycie fraz ���� � i ������ � .

Przedstawione zapytanie ������ jest bardzo podobne do poprzednich. Pobiera

numery zamówień i liczbę zamawianych elementów dla wszystkich zamówień

zawierających minimum trzy elementy.

���������2�5�24�,�������� ��4�4245� �������4245� 6�2�3�45��-�����./���2�5�24�" 78-��������9$0)

��2�5�24����4�4245� *********���********����1''':����������0����1''';����������<����1'''=����������<����1'''>����������0

Aby posortować wyjście na podstawie liczby zamówionych elementów, wy-

starczy tylko dodać odpowiednią frazę ������� .

���������2�5�24�,�������� ��4�4245� �������4245� 6�2�3�45��-�����./���2�5�24�" 78-��������9$0��&���./�4�4245� ,���2�5�24�)

��2�5�24����4�4245� *********���********����1''':����������0

Page 13: SQL w mgnieniu oka

92 SQL w mgnieniu oka

����1'''>����������0����1''';����������<����1'''=����������<

W tym przykładzie fraza ����� służy do grupowania danych na podstawie

numeru zamówienia (kolumna �!.�-/.,#), więc funkcja ����$%& zwraca liczbę

elementów w poszczególnych zamówieniach. Fraza ������ filtruje dane, więc

zwracane są tylko zamówienia z więcej niż dwoma elementami. Na końcu wy-

niki są sortowane za pomocą frazy ������� .

Kolejność fraz instrukcji SELECT

Nadszedł chyba najlepszy czas na omówienie kolejności występowania fraz

w instrukcji ������. Tabela 10.2 zawiera poprawną kolejność wszystkich omó-

wionych do tej pory fraz.

Tabela 10.2. Frazy instrukcji SELECT i ich kolejność

Fraza Opis Wymagane

������ zwracanie kolumn lub wyrażeń tak

���� pobranie danych zawartych

w tabelach

tylko, gdy wymagane są dane z tabel

!"��� filtrowanie wierszy nie

-�����./ tworzenie grup tylko do obliczania funkcji

agregujących na grupach

" 78- filtrowanie grup nie

��&���./ sortowanie wyjścia nie

Podsumowanie

W rozdziale 9. czytelnik zapoznał się z zastosowaniem funkcji agregujących.

W powyższym rozdziale wykorzystał frazę ����� do przeprowadzania funk-

cji agregujących względem określonych grup elementów. Fraza ������ służy

do filtrowania grup. Dodatkowo w rozdziale pojawiło się dokładne wyjaśnienie

różnic między ����� i ������� oraz między ����� i ������.