Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
16
Rozdział1:FunkcjeoknawjęzykuSQL
Jakwidać,kwerendauzyskanaprzypomocytejmetodyjestskomplikowanaiwymaga
zdefiniowaniadodatkowychwyrażeńtabelarycznychorazzłączeń.
Podobneobliczeniamogązostaćprzeprowadzonetakżewinnysposóbprzyuży-
ciuosobnejkwerendypodrzędnejdlakażdegozobliczeń.Listing1-3pokazujealter-
natywnerozwiązaniewykorzystującepodkwerendywostatnichdwóchkwerendach
grupujących:
Listing1-3Mieszanieszczegółówiwynikówskalarnychpodkwerendagregujących
--kwerendypodrzędnezdanymiszczegółowymiiagregacjamidlaklienta
SELECTorderid,custid,val,
CAST(100i*val/
(SELECTSUM(O2ival)
FROMSalesiOrderValuesASO2
WHEREO2icustid=O1icustid)ASNUMERIC(5,2))ASpctcust,
val-(SELECTAVG(O2ival)
FROMSalesiOrderValuesASO2
WHEREO2icustid=O1icustid)ASdiffcust
FROMSalesiOrderValuesASO1;
--kwerendypodrzędnezdanymiszczegółowymiorazagregacjamidlaklienta
--icałościowymi
SELECTorderid,custid,val,
CAST(100i*val/
(SELECTSUM(O2ival)
FROMSalesiOrderValuesASO2
WHEREO2icustid=O1icustid)ASNUMERIC(5,2))ASpctcust,
val-(SELECTAVG(O2ival)
FROMSalesiOrderValuesASO2
WHEREO2icustid=O1icustid)ASdiffcust,
CAST(100i*val/
(SELECTSUM(O2ival)
FROMSalesiOrderValuesASO2)ASNUMERIC(5,2))ASpctall,
val-(SELECTAVG(O2ival)
FROMSalesiOrderValuesASO2)ASdiffall
FROMSalesiOrderValuesASO1;
Rozwiązanieopartenakwerendachpodrzędnychmadwiezasadniczewady
.Popierw-
sze,jegokodjestdługiizłożony
.Podrugie,obecnieoptymalizatorSQLServernie
identyfikujeprzypadków,gdywielekwerendpodrzędnychuzyskujedostępdotego
samegozbioruwierszy
,wzwiązkuztymkażdakwerendapodrzędnawymagaćbędzie
osobnejoperacjidostępudodanych.Wkonsekwencji,imwięcejzastosujemykwerend
podrzędnych,tymwięcejoperacjidostępudodanychzostanieprzeprowadzonych.
Wodróżnieniuodpoprzedniejsytuacji,problemtenniewynikaznaturyjęzyka,lecz
zesposobuoptymalizowaniakwerendpodrzędnychwprogramieSQLServer.
Jakpamiętamy
,funkcjeoknadefiniująokno,czylizbiórwierszyprzetwarzanych
przezfunkcję.Funkcjeagregacjizostałyzaprojektowanezmyśląostosowaniuich
nazbiorzewierszy
,dlategospecyfikacjaoknawpołączeniuzfunkcjamiagregacjimoże