David Gešvindr MCT | MSP | MCITP | MCPD
Jak se zpracovává dotaz? Když norma nestačila Práce s XML Geografická data CTE Zpracování hierarchií a grafů Píšeme uložené procedury v C#
Popisuje chování dotazu Jeho fáze, jejich vstupy a výstupy nutně nesouvisí s vlastním fyzickým zpracováním dotazu
SELECT DISTINCT TOP FROM JOIN ON WHERE GROUP BY HAVING ORDER BY
Customers CustomerIDName 1David 2Jirka 3Martin Orders OrderIDCustomerID X CROSS JOIN Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Martin44... VT1
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Martin44... ON CONDITION Customers.CustomerID = Orders.CustomerID Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 = INNER JOIN VT1 VT2
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 VT2 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 3MartinNULL VT3
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 VT2 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 NULL 44 VT3
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 VT2 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 3MartinNULL 44 VT3
SELECT DISTINCT TOP FROM JOIN ON WHERE GROUP BY HAVING ORDER BY
V podmínce ON, WHERE a HAVING: NULL chápáno jako FALSE V check-constraint: NULL chápáno jako TRUE V GROUP BY, ORDER BY a UNIQUE omezeních jsou si NULL rovny Three-valued Logic True False Unknown VT3 VT4
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 3MartinNULL VT4 GROUP BY Customers.CustomerID GROUPSRAW Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 3MartinNULL VT5
HAVING COUNT(Orders.OrderID) > 0 VT5 GROUPSRAW Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 3MartinNULL GROUPSRAW Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David Jirka22 VT6
Vyhodnocení výrazů v části SELECT Vytvořené aliasy sloupců použitelné až v dalších krocích „All-at-once“ SELECT c1 + 1 AS e1, e1 + 1 AS e2 UPDATE Customers SET FirstName = LastName, LastName = FirstName UPDATE dbo.T1 SET c1 = c1 + (SELECT MAX(c1) FROM dbo.T1) VT6 VT7
Odstranění duplicitních řádků Redundantní s GROUP BY VT7 VT8
Vrání n prvních výsledků z dodaného tabulky Pokud je definováno ORDER BY, ovlivní pořadí řádků WITH TIES Deterministický x nedeterministický VT8 VT9
Seřazení množiny výsledků Dle ANSI SQL:1999 při použití DISTINCT jsme omezeni na sloupce vracené příkazem SELECT (VT7), jinak použitelná i VT6 Vrací kurzor Nelze použít jako table-expression View, Inline table-valued function, subquery, derived table nebo common table expression VT9 VC10
SELECT DISTINCT TOP FROM JOIN ON WHERE GROUP BY HAVING ORDER BY
Customers CustomerIDName 1David 2Jirka 3Martin Orders OrderIDCustomerID 31 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David31 2Jirka22 SELECT TOP 1 * WHERE Orders.CustomerID = Customers.CustomerID ORDER BY Orders.OrderID DESC
Customers CustomerIDName 1David 2Jirka 3Martin Orders OrderIDCustomerID 31 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David31 2Jirka22 3MartinNULL SELECT TOP 1 * WHERE Orders.CustomerID = Customers.CustomerID ORDER BY Orders.OrderID DESC
CustomerIDCityCategory 1BrnoSmall 2BrnoMedium 3PrahaLarge 4PrahaLarge 5OstravaMedium CitySmallMediumLarge Brno110 Praha002 Ostrava010
CitySmallMediumLarge Brno110 Praha002 Ostrava010 CityCategoryCustomersCount BrnoSmall1 BrnoMedium1 PrahaLarge2 OstravaMedium1
Ne na vše je relační podoba dat vhodná Převod dat z XML do relační podoby jen kvůli uložení nemusí být výhodný XML je univerzální formát pro výměnu dat Zjednodušení importu a exportu dat
Od verze 2005 Uložení XML do tabulky Datový typ XML (XML index) Podpora XML schémat XML document / XML fragment Generování XML z relačních dat Konverze XML na relační data Použití xquery v dotazech
FOR XML Rozšiřuje příkaz SELECT Nastavitelný formát výstupu Několik režimů AUTO, EXPLICIT, RAW, PATH Výhody Klient obdrží přímo XML Velmi rychlý export do XML
Výhodné pro import XML XML je převedeno na tabulku se kterou je možné pracovat Postup: 1.sp_XML_preparedocument 2.OPENXML 3.sp_xml_removedocument
Xquery Dostupné metody: Value Exists Query Nodes Výhody: Omezení síťového provozu Vyšší bezpečnost Lepší výkon
Microsoft SQL Server 2008 Možnost uložení geografických a geometrických dat Data jsou ukládána jako serializované instance geografických objektů Pokročilé možnosti dotazování Dobrý výkon – spatial indexy
Dostupné statické metody STPointFromText / STPointFromWKB STLineFromText / STLineFromWKB STPolyFromText / STPolyFromWKB Dostupné metody STArea, STAsText, STDistance, STIntersects, STLength, STUnion, STEquals
Table Valued Expression Obdoba derived table Výhody: Zpřehlednění kódu Tvorba rekurzivních dotazů
Využití Uložení organizační struktury Souborový systém Úkoly v projektech Možnosti uložení Tabulka s cizími klíči XML Hierarchyid
Nativní způsob pro uložení hierarchických dat Výhody Malá velikost Indexované Depth-firstBreadth-first
BEN-GAN, Itzik, et al. Inside Microsoft SQL Server 2008: T-SQL Querying. Redmond, Washington : Microsoft Press, s.
David Gešvindr