Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00319 008801 11222648 na godz. na dobę w sumie
Zapytania w języku T-SQL - ebook/pdf
Zapytania w języku T-SQL - ebook/pdf
Autor: , , Liczba stron:
Wydawca: Promise Język publikacji: polski
ISBN: 978-83-7541-204-8 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych
Porównaj ceny (książka, ebook, audiobook).

Poznaj tajniki T-SQL, aby poradzić sobie z najtrudniejszymi zapytaniami i problemami dostrajania wydajności.
Wyciśnij maksymalną wydajność i efektywność z każdego tworzonego zapytania T-SQL. Czterech wiodących ekspertów prezentuje pogłębiony przegląd wewnętrznej architektury T SQL i zaawansowane, praktyczne techniki optymalizowania reaktywności i zużycia zasobów. Dzięki właściwemu rozumieniu języka i jego podstaw autorzy przedstawiają unikatowe rozwiązania, tworzone i dostrajane przez lata. Cały kod i prezentowane techniki zostały w pełni zaktualizowane, aby odzwierciedlić nowe usprawnienia T-SQL dostępne w Microsoft SQL Server 2014 i SQL Server 2012.
Twórz szybszy i wydajniejszy kod T-SQL:
• Przejdź od programowania proceduralnego do języka zbiorów i logiki
• Doskonal wydajną metodologię dostrajania zapytań
• Oceniaj złożoność algorytmiczną, by móc przewidzieć wydajność rozwiązania
• Porównaj techniki agregowania danych, łącznie z nową koncepcją grupowania zbiorów
• Wydajnie realizuj analizy danych
• Wydobądź wszystko z zoptymalizowanych narzędzi masowego importowania danych
• Uniknij pułapek prowadzących do wadliwego, wolno wykonywanego kodu
• Twórz zoptymalizowane zapytania statystyczne bez dodatkowego oprogramowania
• Użyj obiektów programowalnych do przyśpieszenia zapytań
• Wykorzystaj ulepszenia wydajności w zapytaniach OLTP
• Opanuj użyteczne i eleganckie podejście do manipulowania grafami
Przykłady kodu dostępne są do pobrania pod adresem
tsql.solidq.com/books/tq3
O tej książce
• Dla doświadczonych praktyków T-SQL
• Obejmuje zaktualizowaną tematykę książek Microsoft SQL Server 2008 od środka: Zapytania w języku T-SQL oraz Programowanie w języku T-SQL
• Wyjaśnia wiele zagadnień egzaminacyjnych dla certyfikacji MCSE 70-464 oraz MCSA/MCSE 70-461
O autorach
Itzik Ben-Gan, SQL Server MVP od roku 1999, współtwórca SolidQ oraz cyków szkoleniowych Advanced T-SQL ­Querying, Programming and Tuning oraz T-SQL Fundamentals courses. Prowadzi wiele szkoleń na temat T-SQL i wykładów na konferencjach TechEd, SQLPASS i SQL Server Connections.
Dejan Sarka, MCT, SQL Server MVP, jest konsultantem w dziedzinie baz danych/BI, szkoleniowcem i programistą specjalizującym się w modelowaniu, drążeniu danych i zapewnianiu jakości. Jest autorem lub współautorem 11 książek i założycielem Slovenian SQL Server and .NET Users Group.
Adam Machanic, SQL Server MVP, jest programistą, autorem i wykładowcą skupiającym się na wydajności i projektowaniu wielkoskalowych hurtowni danych. Jest twórcą nagrodzonej procedury składowanej sp_WhoIsActive.
Kevin Farlee, Storage Engine Program Manager w zespole SQL Server, ma ponad 25 lat doświadczenia w dziedzinie baz danych i magazynowania informacji.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Itzik Ben-Gan Dejan Sarka Adam Machanic Kevin Farlee Zapytania w języku T-SQL w Microsoft SQL Server 2014 i SQL Server 2012 Przekład: Natalia Chounlamany Marek Włodarz APN Promise, Warszawa 2015 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Zapytania w języku T-SQL w Microsoft SQL Server 2014 i SQL Server 2012 Authorized Polish translation of the English language edition entitled: T-SQL Querying, ISBN: 978-0-7356-8504-8, by Itzik Ben-Gan, Dejan Sarka, Adam Machanic, and Kevin Farlee, published by Pearson Education, Inc, publishing as Microsoft Press, A Division Of Microsoft Corporation. Copyright © 2015 by Itzik Ben-Gan, Dejan Sarka, Adam Machanic, and Kevin Farlee. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from Pearson Education, Inc. Polish language edition published by APN PROMISE SA Copyright © 2015 Autoryzowany przekład z wydania w języku angielskim, zatytułowanego: T-SQL Querying, ISBN: 978-0-7356-8504-8, by Itzik Ben-Gan, Dejan Sarka, Adam Machanic, and Kevin Farlee, opublikowanego przez Pearson Education, Inc, publikującego jako Microsoft Press, oddział Microsoft Corporation. Wszystkie prawa zastrzeżone. Żadna część niniejszej książki nie może być powielana ani rozpowszechniana w jakiejkolwiek formie i w jakikolwiek sposób (elektroniczny, mechaniczny), włącznie z fotokopiowaniem, nagrywaniem na taśmy lub przy użyciu innych systemów bez pisemnej zgody wydawcy. APN PROMISE SA, ul. Kryniczna 2, 03-934 Warszawa tel. +48 22 35 51 600, fax +48 22 35 51 699 e-mail: mspress@promise.pl Książka ta przedstawia poglądy i opinie autorów. Przykłady firm, produktów, osób i wydarzeń opisane w niniejszej książce są fikcyjne i nie odnoszą się do żadnych konkretnych firm, produktów, osób i wydarzeń, chyba że zostanie jednoznacznie stwierdzone, że jest inaczej. Ewentualne podobieństwo do jakiejkolwiek rzeczywistej firmy, organizacji, produktu, nazwy domeny, adresu poczty elektronicznej, logo, osoby, miejsca lub zdarzenia jest przypadkowe i niezamierzone. Nazwa Microsoft oraz znaki towarowe wymienione na stronie http://www.microsoft.com/about/ legal/en/us/IntellectualProperty/Trademarks/EN-US.aspx są zastrzeżonymi znakami towarowymi grupy Microsoft. Wszystkie inne znaki towarowe są własnością ich odnośnych właścicieli. APN PROMISE SA dołożyła wszelkich starań, aby zapewnić najwyższą jakość tej publikacji. Jednakże nikomu nie udziela się rękojmi ani gwarancji. APN PROMISE SA nie jest w żadnym wypadku odpowiedzialna za jakiekolwiek szkody będące następstwem korzystania z informacji zawartych w niniejszej publikacji, nawet jeśli APN PROMISE została powiadomiona o możliwości wystąpienia szkód. ISBN: 978-83-7541-158-4 Przekład: Natalia Chounlamany, Marek Włodarz Redakcja: Marek Włodarz Korekta: Ewa Swędrowska Skład i łamanie: MAWart Marek Włodarz ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Dla Lilach, za to, że nadaje sens wszystkiemu, co robię. – Itzik Ben-Gan ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści Przedmowa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xiii Wstęp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv 1 Logiczne przetwarzanie zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 Fazy logicznego przetwarzania zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Krótkie omówienie faz logicznego przetwarzania zapytania . . . . . . . . . . . . . . . . 4 Przykładowe zapytanie oparte na scenariuszu z użyciem tabeli klientów i zamówień . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Szczegółowe omówienie faz logicznego przetwarzania zapytania . . . . . . . . . . . . . . 9 Krok 1: Faza FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Krok 2: Faza WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Krok 3: Faza GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Krok 4: Faza HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Krok 5: Faza SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Krok 6: Faza ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Krok 7: Zastosowanie filtra TOP lub OFFSET-FETCH . . . . . . . . . . . . . . . . . . . . . . . 25 Pozostałe aspekty logicznego przetwarzania zapytań . . . . . . . . . . . . . . . . . . . . . . . 30 Operatory tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 Funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40 Operatory UNION, EXCEPT oraz INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 2 Optymalizowanie zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 Struktury wewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Strony i fragmenty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 Struktura tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48 Narzędzia do mierzenia wydajności zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60 Metody dostępu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 Skanowanie tabeli/nieuporządkowane skanowanie indeksu klastrowego . . . . . 65 Nieuporządkowane skanowanie pokrywającego indeksu nieklastrowego . . . . 68 Uporządkowane skanowanie indeksu klastrowego . . . . . . . . . . . . . . . . . . . . . . . 70 Uporządkowane skanowanie pokrywającego indeksu nieklastrowego . . . . . . . 72 Skanowanie w wykonaniu aparatu magazynu . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Przeszukanie indeksu nieklastrowego + skanowanie zakresu + wyszukania . . . 92 Nieuporządkowane skanowanie indeksu nieklastrowego + operacje wyszukania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== v Operacja przeszukania indeksu klastrowego + skanowanie zakresu . . . . . . . . 105 Przeszukanie pokrywającego indeksu nieklastrowego + skanowanie zakresu 107 Szacowanie liczebności . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Porównanie wersji komponentu do szacowania liczebności . . . . . . . . . . . . . . . 111 Konsekwencje niedoszacowań i przeszacowań . . . . . . . . . . . . . . . . . . . . . . . . . 112 Statystyki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Szacowania dla wielu predykatów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 Problem rosnącego klucza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 Niewiadome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125 Funkcje indeksowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Indeksy malejące . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Kolumny dołączone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Filtrowane indeksy oraz statystyki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136 Indeksy magazynu kolumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Wbudowana definicja indeksu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Wybieranie zapytań do optymalizacji przy użyciu zdarzeń rozszerzonych . . . . . . 149 Informacje i statystyki dotyczące indeksów oraz zapytań . . . . . . . . . . . . . . . . . . . 153 Obiekty tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Porównanie rozwiązań bazujących na zbiorach i iteracji . . . . . . . . . . . . . . . . . . . . 170 Dostrajanie zapytań poprzez ich korektę . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Równoległe wykonanie zapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180 Jak działa równoległe wykonywanie zapytania . . . . . . . . . . . . . . . . . . . . . . . . . 181 Równoległość a optymalizacja zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 Wzorzec zapytania z równolegle wykonywaną operacją APPLY . . . . . . . . . . . . 207 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 3 Zapytania złożone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Podzapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213 Podzapytania niezależne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Podzapytania skorelowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Predykat EXISTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Niepoprawne podzapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229 Wyrażenia tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Tabele pochodne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Wspólne wyrażenia tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Widoki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Wbudowane funkcje zwracające tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245 Generowanie liczb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Operator APPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Operator CROSS APPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250 Operator OUTER APPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Niejawny operator APPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 vi ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wielokrotne wykorzystywanie aliasów kolumn . . . . . . . . . . . . . . . . . . . . . . . . . 254 Złączenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Złączenie krzyżowe (Cross Join) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256 Złączenie wewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261 Złączenie zewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Samozłączenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Złączenia równościowe i nierównościowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Zapytania z wieloma złączeniami . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 Złączenia oraz antyzłączenia częściowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Algorytmy złączenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273 Rozdzielanie elementów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281 Operatory UNION, EXCEPT oraz INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285 Operatory UNION ALL oraz UNION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Operator INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289 Operator EXCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 4 Grupowanie i przestawianie danych oraz funkcje okna . . . . . . . . . . . . 295 Funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295 Agregujące funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296 Rankingowe funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Funkcje okna przesunięcia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324 Statystyczne funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326 Luki i wyspy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330 Przestawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Przestawianie danych jeden-do-jednego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 340 Przestawianie danych wiele-do-jednego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344 Odwrotne przestawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Odwrotne przestawianie danych przy użyciu CROSS JOIN oraz VALUES . . . . . 349 Odwrotne przestawianie danych przy użyciu CROSS APPLY oraz VALUES . . . . 351 Zastosowanie operatora UNPIVOT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Niestandardowe agregacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Wykorzystanie kursora . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Wykorzystanie operacji przestawiania danych . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Specjalizowane rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Zestawy grupowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Podklauzula GROUPING SETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Klauzule CUBE oraz ROLLUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Algebra zestawów grupowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 377 Materializowanie zestawów grupowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 378 Sortowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 383 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== vii 5 Filtry TOP i OFFSET-FETCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Filtry TOP oraz OFFSET-FETCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Filtr TOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Filtr OFFSET-FETCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 389 Optymalizacja filtrów na przykładzie stronicowania . . . . . . . . . . . . . . . . . . . . . . . . 391 Optymalizacja filtra TOP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391 Optymalizacja filtra OFFSET-FETCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Optymalizacja funkcji ROW_NUMBER . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 403 Wykorzystanie opcji TOP w modyfikacjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 TOP w modyfikacjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 Modyfikacje fragmentaryczne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 407 Pierwszych N z każdej grupy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 409 Rozwiązanie bazujące na funkcji ROW_NUMBER . . . . . . . . . . . . . . . . . . . . . . . . 411 Rozwiązanie oparte na klauzulach TOP oraz APPLY . . . . . . . . . . . . . . . . . . . . . 412 Rozwiązanie bazujące na łączeniu (sortowanie z przenoszeniem) . . . . . . . . . . 413 Mediana . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415 Rozwiązanie wykorzystujące funkcję PERCENTILE_CONT . . . . . . . . . . . . . . . . . 417 Rozwiązanie wykorzystujące funkcję ROW_NUMBER . . . . . . . . . . . . . . . . . . . . 417 Rozwiązanie wykorzystujące klauzule OFFSET-FETCH oraz APPLY . . . . . . . . . . 418 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420 6 Modyfikowanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Wstawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 SELECT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421 Import zbiorczy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424 Mierzenie ilości rejestrowanych danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425 Dostawca zbiorczych zestawów wierszy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 Sekwencje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 430 Cechy charakterystyczne i ograniczenia właściwości tożsamości . . . . . . . . . . . 430 Obiekt sekwencji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 432 Względy wydajnościowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437 Podsumowanie porównania tożsamości z sekwencją . . . . . . . . . . . . . . . . . . . . 445 Usuwanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 TRUNCATE TABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 446 Usuwanie duplikatów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 450 Aktualizowanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453 Aktualizowanie przy użyciu wyrażeń tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 454 Aktualizowanie z wykorzystaniem zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . 455 Scalanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456 Przykłady zastosowania instrukcji MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 457 Zapobieganie konfliktom instrukcji MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461 viii ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== ON to nie filtr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 USING przypomina FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 463 Klauzula OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 464 Przykład z instrukcją INSERT i tożsamością . . . . . . . . . . . . . . . . . . . . . . . . . . . . 465 Przykład archiwizacji usuwanych danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 467 Przykład z instrukcją MERGE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468 Funkcja Composable DML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472 7 Przetwarzanie danych typu data i czas . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Typy danych daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473 Funkcje daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477 Nowe funkcje daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487 Wyzwania związane z przetwarzaniem daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . 490 Literały . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491 Identyfikowanie dni tygodnia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494 Obsługiwanie danych samej daty lub samego czasu przy użyciu typów DATETIME oraz SMALLDATETIME . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 497 Obliczanie pierwszej, ostatniej i kolejnej daty . . . . . . . . . . . . . . . . . . . . . . . . . . 498 Argumenty wyszukiwania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 503 Problemy zaokrągleń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 505 Zapytania dotyczące dat i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Grupowanie według tygodni . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 507 Interwały . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 509 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534 8 T-SQL dla praktyków BI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 535 Przygotowywanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 536 Widok analizy sprzedaży . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537 Częstości . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 Częstości bez użycia funkcji okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 538 Częstości z wykorzystaniem funkcji okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 539 Statystyki opisowe dla zmiennych ciągłych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 Centra rozkładu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 542 Rozproszenie rozkładu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546 Wyższe momenty populacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 551 Zależności liniowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560 Dwie ciągłe zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 561 Tablice liczebności i chi-kwadrat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 568 Analiza wariancji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573 Całkowanie oznaczone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576 Średnie ruchome i entropia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== ix Średnie ruchome . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 580 Entropia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 587 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591 9 Obiekty programowalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Dynamiczny kod SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595 Korzystanie z polecenia EXEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596 Korzystanie z procedury składowanej sp_executesql . . . . . . . . . . . . . . . . . . . . . 600 Dynamiczne przestawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601 Dynamiczne warunki wyszukiwania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 606 Dynamiczne sortowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 614 Funkcje definiowane przez użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 Skalarne UDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619 Wielowyrażeniowe funkcje tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 624 Procedury składowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 626 Kompilacje, rekompilacje i ponowne użycie planów wykonania . . . . . . . . . . . 627 Typ tabeli i parametry o wartościach tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 647 EXEC … WITH RESULT SETS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 650 Wyzwalacze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 Typy i stosowanie wyzwalaczy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 653 Wydajne programowanie wyzwalaczy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 659 Programowanie SQLCLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 664 Architektura SQLCLR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665 Skalarne funkcje CLR i tworzenie naszej pierwszej asemblacji . . . . . . . . . . . . . 668 Strumieniowe funkcje o wartościach tabeli . . . . . . . . . . . . . . . . . . . . . . . . . . . . 679 Procedury składowane i wyzwalacze SQLCLR . . . . . . . . . . . . . . . . . . . . . . . . . . . 687 Typy definiowane przez użytkownika w SQLCLR . . . . . . . . . . . . . . . . . . . . . . . . 700 Agregacje zdefiniowane przez użytkownika SQLCLR . . . . . . . . . . . . . . . . . . . . . 712 Transakcje i współbieżność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 718 Czym są transakcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 719 Blokady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722 Eskalacja blokad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 729 Opóźniona trwałość . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 730 Poziomy izolacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733 Zakleszczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 746 Obsługa błędów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752 Konstrukcja TRY-CATCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753 Błędy w transakcjach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757 Logika ponawiania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 760 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761 x ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== 10 In-Memory OLTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 Przegląd technologii In-Memory OLTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 763 Dane zawsze są w pamięci . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 764 Natywna kompilacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765 Architektura wolna od blokad i zatrzasków . . . . . . . . . . . . . . . . . . . . . . . . . . . . 766 Integracja z SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 767 Tworzenie tabel zoptymalizowanych pamięciowo . . . . . . . . . . . . . . . . . . . . . . . . . 768 Tworzenie indeksów w tabelach zoptymalizowanych pamięciowo . . . . . . . . . . . . 770 Indeksy klastrowe i nieklastrowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 770 Nieklastrowe indeksy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 771 Indeksy skrótowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 775 Środowiska wykonawcze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 Zapytania interaktywne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 786 Natywnie skompilowane procedury . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795 Ograniczenia obszaru powłoki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800 DDL dla tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 800 DML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802 11 Grafy i zapytania rekurencyjne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803 Terminologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803 Graf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 Drzewa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 804 Hierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805 Scenariusze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 805 Schemat organizacyjny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806 Zestawienie materiałowe (BOM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 808 System drogowy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 812 Iteracja/rekurencja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 815 Podgrafy/potomkowie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 817 Przodkowie/ścieżka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 828 Generowanie poddrzewa poprzez wyliczenie ścieżek . . . . . . . . . . . . . . . . . . . . 832 Sortowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 835 Cykle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 839 Zmaterializowane ścieżki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843 Przygotowanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843 Odpytywanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850 Materializowanie ścieżek przy użyciu typu danych HIERARCHYID . . . . . . . . . . . . 855 Utrzymywanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858 Zapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 866 Dalsze aspekty pracy z HIERARCHYID . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 870 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xi Zbiory zagnieżdżone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882 Przypisywanie wartości lewo- i prawostronnych . . . . . . . . . . . . . . . . . . . . . . . . 883 Zapytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890 Domknięcie przechodnie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893 Skierowany graf acykliczny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 908 Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .911 O autorach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .957 xii ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Przedmowa Od roku 1993 pracuję w zespole Microsoft SQL Server. To kawał czasu i wspaniałe było obserwowanie od środka, jak produkt ten się rozwija i dojrzewa, aby stać się tym, czym jest obecnie. Wspaniałe było też przyglądanie się, jak coraz więcej i więcej klientów wykorzystuje SQL Server do prowadzenia swoich przedsiębiorstw i biznesów. Ale przede wszystkim miałem ten zaszczyt, że mogłem wspierać najbardziej błyskotli- wą i zaangażowaną społeczność techniczną, jaką kiedykolwiek widziałem. Społeczność Microsoft SQL Server jest pełna prawdziwie zadziwiających, inteli- gentnych ludzi. Są oni dumni z tego, że mogą dzielić się swoją wiedzą z innymi, wszystko po to, by społeczność była jeszcze silniejsza. Każdy na świecie może wejść do Twittera i zadać dowolne pytanie na kanale #sqlhelp, a po kilku sekundach otrzyma odpowiedź jednego z najbystrzejszych światowych ekspertów. Jeśli szukamy prawdzi- wej wiedzy w dziedzinie wydajności, magazynowania danych, optymalizacji zapytań, projektowania wielkoskalowego, modelowania lub dowolnego innego zagadnienia związanego z bazami danych, eksperci należący do społeczności chętnie podzielą się swoim doświadczeniem. Warto poznać ich nie tylko ze względu na wiedzę, ale również niezwykłe, przyjazne osobowości. Członkowie społeczności SQL Server lubią, aby nazywać ich rodziną - rodziną SQL. Każdy członek społeczności zna najważniejszych udziałowców dzięki ich wiedzy w określonych dziedzinach. Jeśli ktoś zapyta, kto jest najlepszym specjalistą w dziedzi- nie wydajności baz danych, każdy członek społeczności poda te same nazwiska - cztery lub pięć. Jeśli pytanie będzie dotyczyło magazynowania danych, również od każdego usłyszymy tę samą odpowiedź. W każdej dziedzinie znajdziemy kilku ekspertów, któ- rzy są najlepszymi fachowcami w wybranym obszarze domeny bazodanowej. Jest tylko jeden wyjątek, który znam, i dotyczy on języka T-SQL. Oczywiście, istnieje wielu uta- lentowanych programistów T-SQL, ale jeśli zapytamy kogokolwiek, kto jest najlepszy, zawsze usłyszymy tylko jedno nazwisko: Itzik Ben-Gan. Itzik poprosił mnie o napisanie tej przedmowy do jego nowej książki i czuję się zaszczycony, że mogę to zrobić. Jego wcześniejsze książki - Inside Microsoft SQL Server: T-SQL Querying (Microsoft Press, 2009*), Inside Microsoft SQL Server: T-SQL Programming * Wydanie polskie: Microsoft SQL Server 2008 od środka: Zapytania w języku T-SQL, APN Promise, Warszawa 2009. xiii ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xiv Zapytania w języku T-SQL (Microsoft Press, 2009*) oraz Microsoft SQL Server High-Performance T-SQL Using Win- dow Functions (Microsoft Press, 2012**) - można znaleźć na półkach każdego admini- stratora czy projektanta baz danych, jakiego znam. Książki te to przeszło 2000 stron najwyższej jakości wiedzy technicznej na temat języka T-SQL i określają one standard wysokiej jakości treści w dziedzinie baz danych. Teraz dołączyła do nich nowa książka, zatytułowana po prostu Zapytania w języku T-SQL. Nie tylko łączy ona zagadnienia omawiane w trzech wcześniejszych pozycjach, ale również, a może przede wszystkim, dodaje informacje dotyczące SQL Server 2012 i 2014, w tym funkcje okna, nowy estymator kardynalności, sekwencje, magazyn kolumnowy, In-Memory OLTP i wiele więcej. Itzik znalazł również nowych współau- torów: są to Kevin Farlee, Adam Machanic i Dejan Sarka. Kevin jest członkiem zespołu projektowego Microsoft SQL Server i kimś, z kim pracowałem przez wiele lat. Adam to jedno z tych nielicznych nazwisk, o których wspominałem wcześniej - jeden z naj- lepszych ekspertów w dziedzinie wydajności baz danych na świecie. Dejan wreszcie jest szeroko znany przede wszystkim dzięki swojej wiedzy na temat BI i modelowania danych. Mogę się spodziewać, że książka ta stanie się kolejną standardową pozycją na temat T-SQL dla wszystkich członków społeczności Microsoft SQL Server. Mark Souza General Manager, Cloud and Enterprise Engineering Microsoft * Wydanie Polskie: Microsoft SQL Server 2008 od środka: Programowanie w języku T-SQL, APN Promise, Warszawa 2010. ** Wydanie polskie: Microsoft SQL Server 2012. Optymalizacja kwerend T-SQL przy użyciu funkcji okna, APN Promise, Warszawa 2012 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wstęp Książka ta, będąc aktualizacją zarówno pozycji Microsoft SQL Server 2008 od środ- ka: Zapytania w języku T-SQL (APN Promise, 2009), jak i części książki Microsoft SQL Server 2008 od środka: Programowanie w języku T-SQL (APN Promise, 2010), zapew- nia projektantom i administratorom baz danych szczegółowy przegląd wewnętrznej architektury T-SQL i wyczerpujące źródło informacji. Zawiera omówienie nowych funkcjonalności wprowadzonych w wydaniach SQL Server 2012 i 2014, ale w wie- lu przypadkach dotyczy obszarów, które nie są zależne od wersji oprogramowania i zapewne będą aktualne również w przyszłych wydaniach SQL Server. Zaprezentowane zostały rozwiązania najtrudniejszych zagadnień dotyczących zapytań opartych na zbio- rach i problemów dostrajania zapytań, wsparte głęboką wiedzą i doświadczeniem zespołu autorskiego. Czytelnik będzie mógł pogłębić swoje zrozumienie architektury i wewnętrznych mechanizmów i opanować praktyczne podejścia i zaawansowane tech- niki optymalizowania wydajności kodu. Książka przedstawia wiele unikatowych tech- nik, które zostały opracowane, ulepszone i doszlifowane przez autorów w ciągu wielu lat pracy, zapewniając wysoko wydajne rozwiązania dla często spotykanych wyzwań. Większość przedstawianych rozwiązań i technik koncentruje się na wydajności i sku- teczności tworzonego kodu. Autorzy podkreślają również potrzebę posiadania pełnego zrozumienia języka i jego podstaw matematycznych. Kto powinien przeczytać tę książkę Książka ta ma na celu pomóc doświadczonym praktykom T-SQL w osiągnięciu lepsze- go zrozumienia i wydajności. Adresatami tej publikacji są programiści T-SQL, admini- stratorzy baz danych, specjaliści BI, analitycy danych i oraz wszyscy, którzy poważnie zajmują się językiem T-SQL. Główny cel to przygotować Czytelnika na rzeczywiste wymagania, w których potrzebne jest posługiwanie się językiem T-SQL. Treści nie sku- piają się na przygotowaniu do jakiegoś egzaminu certyfikacyjnego, ale można zauwa- żyć, że książka wyczerpuje wiele zagadnień sprawdzanych na egzaminach 70-461 oraz 70-464. Tak więc, choć książki tej nie można traktować jako jedynej pomocy nauko- wej w przygotowaniu do tych egzaminów, bez wątpienia będzie to bardzo przydatna lektura uzupełniająca. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xv xvi Zapytania w języku T-SQL Założenia Autorzy zakładają, że Czytelnik ma przynajmniej rok solidnego doświadczenia w pracy w SQL Server, pisaniu i dostrajaniu kodu T-SQL. Przyjmują, że czytelnik ma już wpra- wę w tworzeniu kodu T-SQL, zna podstawy dostrajania zapytań i jest gotów zmierzyć się z bardziej wymagającymi wyzwaniami. Książka może być też użyteczna dla osób, które mają podobne doświadczenia z inną platformą bazodanową i dialektem języka SQL, ale preferowana jest rzeczywista wiedza i doświadczenie dotyczące SQL Server oraz T-SQL. Kto nie powinien czytać tej książki Książka ta raczej nie nadaje się dla nowicjuszy w dziedzinie baz danych i języka SQL. Struktura ksiażki Książka rozpoczyna się dwoma rozdziałami, w których przedstawiane są podstawy logicznego i fizycznego przetwarzania zapytań, niezbędne do zrozumienia większości pozostałych rozdziałów. Rozdział pierwszy przedstawia logiczne przetwarzania zapytań. Omówione zostały szczegółowo logiczne fazy procesu przetwarzania, unikatowe aspekty zapytań SQL oraz szczególny zestaw reguł i koncepcji, które trzeba opanować, aby móc programować w relacyjnym, zorientowanym na zbiory środowisku. Rozdział drugi zawiera omówienie dostrajania zapytań i fizyczną warstwę mechani- zmu bazodanowego. Przedstawione zostały wewnętrzne struktury danych, narzędzia do pomiaru wydajności zapytań, metody dostępowe, oszacowania liczebności, indek- sy, szeregowanie zapytań przy użyciu zdarzeń rozszerzonych, technologia magazynu kolumnowego, stosowanie tabel tymczasowych i zmiennych tablicowych, porównanie podejścia opartego na zbiorach do rozwiązań wykorzystujących kursory, dostrajanie zapytań oraz równoległe wykonywanie zapytań. (Fragment o równoległym przetwa- rzaniu zapytań został napisany przez Adama Machanica). Kolejnych pięć rozdziałów zajmuje się różnymi zagadnieniami związanymi z mani- pulowaniem danymi. Oprócz przedstawienia i objaśnienia poszczególnych funkcjonal- ności, autorzy skupiają się głównie na wydajności kodu i wykorzystania omawianych funkcjonalności do rozwiązywania często spotykanych zadań. W rozdziale 3 przed- stawione są zapytania wielotabelowe wykorzystujące podzapytania, operator APPLY, złączenia oraz operatory relacyjne UNION, INTERSECT i EXCEPT. Rozdział 4 omawia problematykę analizy danych przy użyciu grupowania, przestawiania (pivoting) oraz funkcji okna. Rozdział 5 zawiera omówienie filtrów TOP oraz OFFSET-FETCH i roz- wiązanie problemów typu pierwszych N z grupy. W rozdziale 6 omówione zostały takie zagadnienia modyfikacji danych, jak minimalnie rejestrowane operacje, wydajne ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wstęp xvii stosowanie obiektów sekwencji, scalanie danych oraz klauzula OUTPUT. Wreszcie w rozdziale 7 omówione są zagadnienia dotyczące danych typu data i czas, włącznie z obsługą interwałów (przedziałów) czasowych. Rozdział 8 omawia wykorzystanie języka T-SQL w praktyce BI; jego autorem jest Dejan Sarka. Omówione zostały techniki przygotowywania danych do analizy i wyko- rzystanie T-SQL do realizacji zadań statystycznej analizy. Przedstawione zostały zagad- nienia związane z częstościami występowania, statystyki opisowe dla zmiennych cią- głych, zależności liniowe, średnie ruchome oraz entropia zbioru danych. Rozdział 9 zawiera omówienie konstruktów programistycznych wspieranych przez T-SQL. Należą do nich dynamiczny kod SQL, funkcje definiowane przez użytkow- nika, procedury składowane, wyzwalacze, programowanie SQLCLR (ten fragment autorstwa Adama Machanica), transakcje i współbieżność oraz obsługa błędów. Wcześniej zagadnienia te zostały przedstawione w książce Inside Microsoft SQL Server: T-SQL Programming. Rozdział 10 przedstawia najważniejsze udoskonalenie dostępne w wydaniu SQL Server 2014 – silnik In- Memory OLTP. Autorem tego rozdziału jest Kevin Farlee z firmy Microsoft, który brał udział w projektowaniu tej funkcjonalności. Rozdział 11 zawiera omówienie grafów i zapytań rekurencyjnych. Pokazuje, jak obsługiwać struktury grafów, takie jak hierarchie pracowników, zestawienia maga- zynowe czy mapy w SQL Server przy użyciu języka T-SQL. Pokazuje implementację takich zagadnień, jak model wyliczanej ścieżki (przy użyciu własnego rozwiązania lub za pomocą typu danych HIERARCHYID) oraz model zagnieżdżonych zbiorów. Pokazane zostało również wykorzystanie zapytań rekurencyjnych do manipulowania danymi w grafach. Wymagania systemowe Do wykonania przykładów kodu zawartych w książce potrzebne są następujące skład- niki programowe: ■■ Microsoft SQL Server 2014: ■❐ Wydanie 64-bitowe Enterprise, Developer lub Evaluation; inne wydania nie wspierają mechanizmów In-Memory OLTP ani technologii magazynu kolum- nowego, omówionych w książce. Wersję próbną można pobrać ze strony http:// www.microsoft.com/sql. ■❐ Aktualne wymagania sprzętowe i programowe można sprawdzić pod adresem http://msdn.microsoft.com/en-us/library/ms143506(v=sql.120).aspx. ■❐ W oknie dialogowym Feature Selection (wybór funkcjonalności) programu insta- lacyjnego SQL Server 2014 należy wybrać następujące komponenty: Database Engine Services, Client Tools Connectivity, Documentation Components, Management Tools – Basic, Management Tools – Complete. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xviii Zapytania w języku T-SQL ■■ Microsoft Visual Studio 2013 z rozszerzeniem Microsoft SQL Server Data Tools (SSDT): ■❐ Aktualne wymagania sprzętowe i kompatybilność platformy dla Visual Studio 2013 można znaleźć pod adresem http://www.visualstudio.com/products/ visual-studio-2013-compatibility-vs. ■❐ Informacje na temat instalowania SSDT zawiera strona http://msdn.microsoft.com/ en-us/data/tools.aspx. Zależnie od konfiguracji systemu Windows do zainstalowania i konfiguracji SQL Server 2014 oraz Visual Studio 2013 konieczne mogą być uprawnienia lokalne- go administratora. Pobieranie przykładów kodu Książka zawiera bardzo wiele przykładów kodu. Całość kodu źródłowego można pobrać z witryny autorów http://tsql.solidq.com/books/tq3. Kod źródłowy jest udostępniony jako plik skompresowany o nazwie T-SQL Que- rying – YYYYMMDD.zip, gdzie YYYYMMDD wskazuje ostatnią aktualizację zawartości. Po pobraniu pliku należy wykonać instrukcje zawarte w pliku Readme.txt dołączonym do archiwum, aby zainstalować przykłady kodu. Errata, aktualizacje i wsparcie dla książki Dołożyliśmy wszelkich starań, aby zapewnić dokładność i poprawność tej książki, jak i towarzyszącego jej kodu przykładowego. W razie wykrycia błędu można przesłać go do wydawcy pod adresem mspinput@microsoft.com. Pod tym samym adresem można również skontaktować się z zespołem Microsoft Press Book Support, jeśli potrzebna jest inna pomoc. Proszę zauważyć, że pod tym adresem nie jest oferowana pomoc tech- niczna dla oprogramowania Microsoft. Pomoc dotycząca oprogramowania i sprzętu firmy Microsoft jest dostępna poprzez witrynę http://support.microsoft.com. Bezpłatne ebooki z Microsoft Press Począwszy od wstępnych informacji technicznej, po pogłębione omówienie szcze- gólnych zagadnień, bezpłatne ebooki wydawnictwa Microsoft Press obejmują szeroki zakres tematyki. Publikacje te są dostępne w formatach PDF, EPUB oraz Mobi for Kindle, gotowe do pobrania z witryny: http://aka.ms/mspressfree Warto zaglądać tam często, aby dowiedzieć się, co jest nowego! ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wstęp xix Podziękowania Wiele osób przyczyniło się do tego, aby książka ta ujrzała światło dzienne, zarówno bezpośrednio, jak i pośrednio, i zasługuje na podziękowania i wyróżnienie. Bardzo możliwe, że niezamierzenie pominąłem jakieś nazwiska i z góry za to przepraszam. Lilach: jesteś tym kimś, kto sprawia, że chcę być dobry w tym, co robię. Niezależnie od tego, że inspirujesz mnie nieustannie, miałaś też nieoficjalną rolę w powstaniu tej książki – byłaś pierwszą czytelniczką! Spędziliśmy tak wiele godzin, sczytując tekst i wyszukując błędy, zanim wysłałem go do redaktorów. Mam wrażenie, że przynajmniej niektóre aspekty T-SQL znasz lepiej, niż ludzie, którzy zajmują się nim zawodowo. Dziękuję moim rodzicom, Mila i Gabi, i moim dzieciom, Mickey i Ina, za sta- łe wsparcie i zaakceptowanie mojej czasowej nieobecności. Ostatnich kilka lat było bardzo intensywnych i mam nadzieję, że nadchodzące lata będą zdrowe i szczęśliwe. Współautorzy książki, Dejan Sarka, Adam Machanic i Kevin Farlee: było prawdzi- wym zaszczytem stać się częścią tak doświadczonej grupy ludzi. Każdy z was jest takim ekspertem w swojej dziedzinie, że zdecydowałem, iż odpowiednie tematy najlepiej będzie powierzyć właśnie wam. Dejan stworzył rozdział o praktycznym stosowaniu języka T-SQL w BI, Adam napisał fragmenty o równoległym przetwarzaniu zapytań i programowaniu SQL CLR, zaś Kevin rozdział o mechanizmie In-Memory OLTP. Dzię- ki za wzięcie udziału w tworzeniu tej książki. Do technicznego recenzenta książki, Alejandro Mesa: czytałeś i (nieoficjalnie) recenzowałeś moje wcześniejsze książki. Podszedłeś do tematu z taką pasją, że byłem szczęśliwy, że zdecydowałeś się przyjąć bardziej oficjalną rolę recenzenta. Chcę rów- nież podziękować recenzentowi wcześniejszego wydania, Steve Kass: wykonałeś tak wspaniałą i dokładną robotę, że jej echo jest ciągle słyszalne w tej najnowszej. Mark Souza: brałeś udział w niemal całym procesie powstawania książki, od pierw- szego pomysłu, biorąc odpowiedzialność za aspekty techniczne, organizacyjne i spo- łecznościowe. Jeśli ktokolwiek naprawdę czuje puls społeczności SQL Server, to właśnie ty. Wszyscy jesteśmy wdzięczni za to, co robisz, i zaszczytem jest to, że to ty napisałeś przedmowę. Podziękowania należą się też wielu redaktorom w wydawnictwie Microsoft Press. Devon Musgrave, który pełnił funkcję zarówno redaktora koordynującego, jak i pro- jektowego: to dzięki tobie książka stała się realnym bytem. Zdaję sobie sprawę, że ta książka była tylko jedną z wielu, za które jesteś odpowiedzialny i chcę podzię- kować za czas i wysiłki, które przeznaczyłeś właśnie na nią. Jest jeszcze kilka nazwisk, które wymienię (i ponownie przepraszam, jeśli kogoś pominąłem): Carol Dillingham, redaktor projektu, Curtis Philips, menedżer projektu z Publishing.com, Roger LeBlanc, redaktor językowy, który pracował również przy moich wcześniejszych książkach, oraz Andrea Fox, korektorka. To była prawdziwa przyjemność pracować wspólnie z wami. Co do SolidQ, mojej firmy przez ostatnią dekadę: wspaniałe jest być częścią tak świetnej firmy, która rozwinęła się do tego, czym jest obecnie. Członkowie tej firmy ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xx Zapytania w języku T-SQL są dla mnie znacznie więcej, niż kolegami; są partnerami, przyjaciółmi i rodziną. Oto niepełna z pewnością lista tych, którym chcę podziękować w tym miejscu: Fernando G. Guerrero, Douglas McDowell, Herbert Albert, Dejan Sarka, Gianluca Hotz, Anto- nio Soto, Jeanne Reeves, Glenn McCoin, Fritz Lechnitz, Eric Van Soldt, Berry Walker, Marilyn Templeton, Joelle Budd, Gwen White, Jan Taylor, Judy Dyess, Alberto Martin, Lorena Jimenez, Ron Talmage, Andy Kelly, Rushabh Mehta, Joe Chang, Mark Tabladil- lo, Eladio Rincón, Miguel Egea, Alejandro J. Rocchi, Daniel A. Seara, Javier Loria, Paco González, Enrique Catalá, Esther Nolasco Andreu, Rocío Guerrero, Javier Torrenteras, Rubén Garrigós, Victor Vale Diaz, Davide Mauri, Danilo Dominici, Erik Veerman, Jay Hackney, Grega Jerkič, Matija Lah, Richard Waymire, Carl Rabeler, Chris Randall, Tony Rogerson, Christian Rise, Raoul Illyés, Johan Åhl
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Zapytania w języku T-SQL
Autor:
, ,

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: