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 o Direktszorzat számítása 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 o o Direktszorzat számítása Feltételt nem teljesítő sorok eldobása 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 o Hasonló a CROSS APPLY-hoz 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