Lekérdezések
Tartalom • • • • • • • • • •
Lekérdezések feldolgozási sorrendje Összekapcsolások Operátorok Szűrések Aggregátumok és csoportosítások Csoportos szűrések Rendezések Halmazműveletek ‘Ranking’ függvények Pivotálás
SELECT • • • • • •
SELECT(projekció) FROM(forrás) WHERE(szűrés) GROUPBY(csoportosítás) HAVING(csoportok szűrése) ORDERBY(rendezés)
Feldolgozási sorrend • • • • • •
5. SELECT 1. FROM 2. WHERE 3. GROUP BY 4. HAVING 6. ORDER BY
FROM • • • • • • • • •
Tábla Nézet Rowset függvény Tábla értékű függvény (CLR is) OPENXML Beágyazott lekérdezés Összekapcsolt tábla Pivotált tábla Tábla értékű változó
Példák • SELECT* FROM Employees • SELECT* FROM Sales by Category • SELECT* FROM CustomersByCity('Berlin') • SELECT* FROM @CustomersInHungary
Összekapcsolás • Egy, két vagy több tábla összeillesztése a közöttük fennálló logikai kapcsolatok alapján
Összekapcsolás • CROSS JOIN o Táblák feltétel nélküli összekapcsolása o direkt szorzat
• … FROM Customers CROSS JOIN Orders • … FROM Customers, Orders
Összekapcsolás • INNER JOIN o Feltételes összekapcsolás
• … FROM Customers INNER JOIN Orders ON CustomersCustomerID= OrdersCustomerID • Kiértékelés o Direktszorzat számítása o Feltételt nem teljesítő sorok eldobása
Összekapcsolás • FULL/LEFT/RIGHT OUTER JOIN o Külső (feltételt nem teljesítő) sorokat is tartalmazó összekapcsolás
• … FROM Customers LEFT OUTER JOIN Orders ON Customers.CustomerID= Orders.CustomerID • Kiértékelés o Direktszorzat számítása o Feltételt nem teljesítő sorok eldobása o Külső sorok felvétele az eredménybe
Összekapcsolás • CROSS APPLY o Kifejezés (pl. függvény) alkalmazása egy tábla soraira o Az eredeti tábla kibővítése az eredmény oszlopaival
• … FROM Customers CROSS APPLY CustomersSalesRep(CustomersCustomerID)
Összekapcsolás • OUTER APPLY o Hasonló a CROSS APPLY-hoz o Az eredmény olyan sorokat is tartalmaz, amelyekre a függvény üres eredményt adott
• Kiértékelés o CROSS APPLY számítása o Külső sorok felvétele az eredménybe
Operátorok
WHERE • Logikai kifejezések segítségével szelektálhatók a tábla sorai • A kifejezésekben a tábla oszlopnevei változókként használhatók • Az operátorok segítségével összetett kifejezések is megadhatók
Aggregátumok • • • • • • • •
COUNT / COUNT_BIG –darabszám SUM –összeg MIN –legkisebb érték MAX –legnagyobb érték AVG –átlagos érték CHECKSUM_AGG –ellenőrző összeg STDEV / STDEVP –szórás VAR / VARP –variancia
GROUP BY • Oszlopok értékei szerint csoportosíthatók a táblák sorai • Az aggregátumok számolhatók az egyes csoportokon belül és az összes adatra is • Vagy akár az összes lehetséges dimenzió mentén
Példák • GROUP BYCity • GROUP BYCountry, City • GROUP BY ROLLUP(City) • GROUP BY ROLLUP(Country, City) • GROUP BY CUBE(City) • GROUP BY CUBE(Country, City)
HAVING • Logikai kifejezések segítségével szelektálhatók a csoportok • A kifejezésekben az aggregátumokra adhatunk megszorításokat • Az operátorok segítségével összetett kifejezések is megadhatók
SELECT • • • •
A tábla oszlopaira szűrhetünk Az ismétlődő sorokat kizárhatjuk Az eredmény egy részét kizárhatjuk Kifejezések segítségével új oszlopokat definiálhatunk
Példák • • • • • •
SELECT firstName, lastName SELECT DISTINCT firstName SELECT TOP (10) * SELECT TOP (10) PERCENT* SELECT TOP (10) WITH TIES * SELECT unitPrice * quantity
ORDER BY • A lekérdezés eredményét rendezhetjük egy vagy több oszlop szerint • Rendezhetünk növekvően és csökkenően • A SELECT résznél definiált aliasnevek használhatók ebben a szakaszban
Halmazműveletek • • • •
INTERSECT –metszet UNION –unió EXCEPT –különbség Rendezetlen lekérdezések között alkalmazható operátorok
OVER • Az aggregátumok számítási tartománya specifikálható • A PARTITION BY segítségével adhatjuk meg a csoportosítást • … AVG(freight) OVER() • … AVG(freight) OVER(PARTITION BYorderID)
RANK függvények • • • •
ROW_NUMBER –sorszámozás RANK –helyezés DENSE_RANK –hézag nélküli helyezés NTILE –csoportosítás és számozás
• Az OVER-rel együtt használandó • Rendezést kell megadni az OVER-en belül
Példák • SELECT ROW_NUMBER() OVER(ORDER BY employeeID) … • SELECT RANK() OVER(PARTITION BY Country ORDER BY employeeID) …
Pivotálás/Unpivotálás • Pivotálás: Sorok „átfordítása” oszlopokká • Unpivotálás: Oszlopok „átfordítása” sorokká • Az eredménytábla mezőértékeit aggregátumok szolgáltatják
Pivotálás • … PIVOT(COUNT(orderyear) FOR orderyear IN([1996], [1997])) AS P … • … UNPIVOT(Quantity FOR orderyear IN([1996], [1997])) AS U