Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
ZveřejnilKristýna Mašková
1
David Gešvindr MCT | MSP | MCITP | MCPD
2
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#
4
Popisuje chování dotazu Jeho fáze, jejich vstupy a výstupy nutně nesouvisí s vlastním fyzickým zpracováním dotazu
5
SELECT DISTINCT TOP FROM JOIN ON WHERE GROUP BY HAVING ORDER BY 1 2 3 4 5 6 7 8 9 10
6
Customers CustomerIDName 1David 2Jirka 3Martin Orders OrderIDCustomerID 11 22 31 44 X CROSS JOIN Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 22 1 31 3Martin44... VT1
7
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 22 3Martin44... ON CONDITION Customers.CustomerID = Orders.CustomerID Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 = INNER JOIN VT1 VT2
8
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 VT2 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 3MartinNULL VT3
9
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 VT2 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 NULL 44 VT3
10
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 VT2 Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 3MartinNULL 44 VT3
11
SELECT DISTINCT TOP FROM JOIN ON WHERE GROUP BY HAVING ORDER BY 1 2 3 4 5 6 7 8 9 10
12
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
13
Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 1 31 2Jirka22 3MartinNULL VT4 GROUP BY Customers.CustomerID GROUPSRAW Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 31 2Jirka22 3MartinNULL VT5
14
HAVING COUNT(Orders.OrderID) > 0 VT5 GROUPSRAW Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 31 2Jirka22 3MartinNULL GROUPSRAW Customers. CustomerID Customers. Name Orders. OrderID Orders. CustomerID 1David11 31 2Jirka22 VT6
15
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
16
Odstranění duplicitních řádků Redundantní s GROUP BY VT7 VT8
17
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
18
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
19
SELECT DISTINCT TOP FROM JOIN ON WHERE GROUP BY HAVING ORDER BY 1 2 3 4 5 6 7 8 9 10
21
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
22
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
23
CustomerIDCityCategory 1BrnoSmall 2BrnoMedium 3PrahaLarge 4PrahaLarge 5OstravaMedium CitySmallMediumLarge Brno110 Praha002 Ostrava010
24
CitySmallMediumLarge Brno110 Praha002 Ostrava010 CityCategoryCustomersCount BrnoSmall1 BrnoMedium1 PrahaLarge2 OstravaMedium1
26
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
27
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
28
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
30
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
32
Xquery Dostupné metody: Value Exists Query Nodes Výhody: Omezení síťového provozu Vyšší bezpečnost Lepší výkon
35
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
36
Dostupné statické metody STPointFromText / STPointFromWKB STLineFromText / STLineFromWKB STPolyFromText / STPolyFromWKB Dostupné metody STArea, STAsText, STDistance, STIntersects, STLength, STUnion, STEquals
38
Table Valued Expression Obdoba derived table Výhody: Zpřehlednění kódu Tvorba rekurzivních dotazů
41
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
42
Nativní způsob pro uložení hierarchických dat Výhody Malá velikost Indexované Depth-firstBreadth-first
45
BEN-GAN, Itzik, et al. Inside Microsoft SQL Server 2008: T-SQL Querying. Redmond, Washington : Microsoft Press, 2009. 798 s.
46
David Gešvindr david@wug.cz
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.