Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00140 007301 11238936 na godz. na dobę w sumie
Microsoft SQL Server 2012 Podstawy języka T-SQL - ebook/pdf
Microsoft SQL Server 2012 Podstawy języka T-SQL - ebook/pdf
Autor: Liczba stron:
Wydawca: Promise Język publikacji: polski
ISBN: 978-83-7541-294-9 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> bazy danych
Porównaj ceny (książka, ebook, audiobook).

Microsoft® SQL Server® 2012
Podstawy języka T-SQL
Poznaj działanie T-SQL – i buduj lepsze zapytania
Opanuj podstawy języka Transact-SQL – projektuj własny kod zapytań i modyfikowania danych w systemie Microsoft SQL ­Server 2012. Ekspert w dziedzinie SQL Server wyjaśnia koncepcje działania mechanizmów zapytań i programowania w języku T-SQL, a ćwiczenia zamieszczone w każdym rozdziale pozwalają dobrze przyswoić poznaną wiedzę. Po zrozumieniu wewnętrznej logiki języka T-SQL szybko nauczysz się konstruowania sprawnego kodu – niezależnie od tego, czy jesteś programistą, czy administratorem bazy danych.
Dowiedz się jak:
• Korzystać z najlepszych rozwiązań programistycznych specyficznych dla T-SQL
• Tworzyć tabele baz danych i definiować integralność danych
• Konstruować kwerendy wielu tabel przy użyciu złączeń i podkwerend
• Upraszczać kod i ułatwiać jego utrzymywanie za pomocą wyrażeń tablicowych
• Implementować strategie modyfikowania danych związane z wstawieniem, aktualizacjami, usuwaniem i scalaniem danych
• Korzystać z zaawansowanych rozwiązań, takich jak funkcje okien, przestawianie danych czy zbiory grupujące
• Kontrolować spójność danych przy użyciu poziomów izolacji oraz opanować metody eliminowania zakleszczeń i blokowań
• Przenieść język T-SQL na wyższy poziom przy użyciu obiektów programowalnych
O autorze
Itzik Ben-Gan, Microsoft MVP w dziedzinie SQL Server od 1999 roku, jest współzałoży-cielem firmy SolidQ, która dostarcza usługi konsultingowe i szkoleniowe w zakresie zarzą-dzania danymi przy użyciu produktów firmy Microsoft. Jest autorem wielu artykułów opu-blikowanych w magazynie SQL Server Pro. Pełni funkcję prelegenta na różnych konferencjach branżowych, takich jak Microsoft TechEd, DevTeach, PASS czy SQL Server Connections.

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

Darmowy fragment publikacji:

Itzik Ben-Gan Microsoft® SQL Server® 2012 Podstawy języka T-SQL przełożył Leszek Biolik APN Promise, Warszawa 2012 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Microsoft® SQL Server® 2012: Podstawy języka T-SQL © 2012 APN PROMISE SA Authorized Polish translation of English edition of Microsoft® SQL Server® 2012 T-SQL Fundamentals ISBN: 978-0-735-65814-1 Copyright © 2012 by Itzik Ben-Gan This translation is published and sold by permission of O’Reilly Media, Inc., which owns or controls all rights to publish and sell the same. APN PROMISE SA, biuro: ul. Kryniczna 2, 03-934 Warszawa tel. +48 22 35 51 600, fax +48 22 35 51 699 e-mail: mspress@promise.pl 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. Książka ta przedstawia poglądy i opinie autora. 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. 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-101-0 Przekład: Leszek Biolik Redakcja: Marek Włodarz Korekta: Ewa Swędrowska Skład i łamanie: MAWart Marek Włodarz ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści Przedmowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv Podziękowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix 1 Podstawy zapytań i programowania T-SQL . . . . . . . . . . . . . . . . . . . . 1 Teoretyczne podstawy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 Teoria zbiorów. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 Logika predykatów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 Model relacyjny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 Cykl życia danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Architektura SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Odmiany ABC produktu SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 Instancje produktu SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 Bazy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 Schematy i obiekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Tworzenie tabel i definiowanie integralności danych . . . . . . . . . . . . . . . . . . 24 Tworzenie tabel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 Definiowanie integralności danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 2 Kwerendy dotyczące pojedynczej tabeli . . . . . . . . . . . . . . . . . . . . . . . 31 Elementy instrukcji SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Klauzula FROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 Klauzula WHERE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Klauzula GROUP BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37 Klauzula HAVING . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41 Klauzula SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Klauzula ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47 Filtry TOP i OFFSET-FETCH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 Funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Predykaty i operatory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56 Wyrażenia CASE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== iii iv Spis treści Znacznik NULL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62 Operacje jednoczesne – „all-at-once” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Stosowanie danych znakowych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Typy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 Opcje sortowania (collation) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Operatory i funkcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71 Predykat LIKE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 Stosowanie dat i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Typy danych dotyczące dat i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Literały . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Rozdzielne stosowanie daty i czasu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Filtrowanie zakresów danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 Funkcje daty i godziny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89 Zapytania dotyczące metadanych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 Widoki katalogów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98 Widoki schematów informacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99 Systemowe procedury składowane i funkcje . . . . . . . . . . . . . . . . . . . . . . . 99 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Ćwiczenie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 Ćwiczenie 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Ćwiczenie 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Ćwiczenie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107 Ćwiczenie 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 Ćwiczenie 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści v 3 Złączenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 Złączenia krzyżowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Składnia ANSI SQL-92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Składnia ANSI SQL-89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111 Samo-złączenie krzyżowe (Self Cross Join) . . . . . . . . . . . . . . . . . . . . . . . 111 Tworzenie tabel liczb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112 Złączenia wewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Składnia ANSI SQL-92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 Składnia ANSI SQL-89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115 Bezpieczeństwo złączenia wewnętrznego . . . . . . . . . . . . . . . . . . . . . . . . 116 Dodatkowe przykłady złączeń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Złączenia złożone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117 Złączenie nierównościowe (Non-Equi Join) . . . . . . . . . . . . . . . . . . . . . . . 118 Kwerendy wielokrotnych złączeń (multi-join) . . . . . . . . . . . . . . . . . . . . . 120 Złączenia zewnętrzne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Podstawy złączeń zewnętrznych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121 Złączenia zewnętrzne – zagadnienia zaawansowane . . . . . . . . . . . . . . . 124 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132 Ćwiczenie 1-2 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . 133 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135 Ćwiczenie 6 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 136 Ćwiczenie 7 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 136 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Ćwiczenie 1-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Ćwiczenie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139 Ćwiczenie 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== vi Spis treści 4 Podkwerendy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Podkwerendy niezależne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Przykłady skalarnych podkwerend niezależnych . . . . . . . . . . . . . . . . . . 142 Przykłady podkwerend niezależnych o wielu wartościach . . . . . . . . . . 144 Podkwerendy skorelowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148 Predykat EXISTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151 Zaawansowane aspekty podkwerend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153 Zwracanie poprzednich lub kolejnych wartości . . . . . . . . . . . . . . . . . . . 153 Stosowanie agregacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154 Postępowanie w przypadku nieprawidłowo działających podkwerend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Ćwiczenie 2 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 161 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Ćwiczenie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163 Ćwiczenie 7 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 164 Ćwiczenie 8 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 164 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 Ćwiczenie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Ćwiczenie 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167 Ćwiczenie 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168 5 Wyrażenia tablicowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Tabele pochodne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169 Przypisywanie aliasów kolumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Stosowanie argumentów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Zagnieżdżanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Wielokrotne odwołania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175 Wspólne wyrażenia tablicowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści vii Przypisywanie aliasów kolumn w wyrażeniach CTE . . . . . . . . . . . . . . . . 176 Stosowanie argumentów w wyrażeniach CTE . . . . . . . . . . . . . . . . . . . . . 177 Definiowanie wielu wyrażeń CTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 Wielokrotne odwołania w wyrażeniach CTE . . . . . . . . . . . . . . . . . . . . . . 178 Rekurencyjne wyrażenia CTE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 Widoki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182 Widoki i klauzula ORDER BY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183 Opcje widoku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186 Funkcje wewnętrzne zwracające tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190 Operator APPLY . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Ćwiczenie 1-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Ćwiczenie 2-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Ćwiczenie 2-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197 Ćwiczenie 3 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 198 Ćwiczenie 4-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198 Ćwiczenie 4-2 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . 199 Ćwiczenie 5-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Ćwiczenie 5-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Ćwiczenie 1-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Ćwiczenie 2-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Ćwiczenie 2-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Ćwiczenie 4-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 Ćwiczenie 4-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Ćwiczenie 5-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203 Ćwiczenie 5-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 6 Operatory zbiorowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205 Operator UNION . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206 Operator wielozbioru UNION ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207 Operator zbiorowy UNION z niejawną opcją Distinct . . . . . . . . . . . . . . 207 Operator INTERSECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208 Operator zbiorowy INTERSECT z opcją Distinct . . . . . . . . . . . . . . . . . . . 209 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== viii Spis treści Operator wielozbioru INTERSECT ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . 210 Operator EXCEPT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212 Operator zbiorowy EXCEPT (z opcją Distinct) . . . . . . . . . . . . . . . . . . . . . 213 Operator wielozbioru EXCEPT ALL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 Pierwszeństwo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Omijanie nieobsługiwanych faz logicznych . . . . . . . . . . . . . . . . . . . . . . . . . 216 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Ćwiczenie 5 (zaawansowane ćwiczenie opcjonalne) . . . . . . . . . . . . . . . 221 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 7 Zaawansowane kwestie tworzenia zapytań . . . . . . . . . . . . . . . . . . 227 Funkcje okien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Funkcje okien – ranking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230 Offsetowe funkcje okna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Agregujące funkcje okien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237 Przestawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240 Przestawianie danych za pomocą standardu SQL . . . . . . . . . . . . . . . . . 242 Przestawianie danych przy użyciu operatora PIVOT specyficznego dla języka T-SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Odwrotne przestawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Odwrotne przestawianie danych przy użyciu standardu SQL . . . . . . . 247 Odwrotne przestawianie danych za pomocą operatora UNPIVOT, specyficznego dla języka T-SQL . . . . . . . . . . . . . . . . . . . . . . 249 Zbiory grupujące . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251 Klauzula pomocnicza GROUPING SETS . . . . . . . . . . . . . . . . . . . . . . . . . . 252 Klauzula pomocnicza CUBE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Klauzula pomocnicza ROLLUP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Funkcje GROUPING i GROUPING_ID . . . . . . . . . . . . . . . . . . . . . . . . . . . . 255 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści ix Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 262 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 264 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265 8 Modyfikowanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Wstawianie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Instrukcja INSERT VALUES . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267 Instrukcja INSERT SELECT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269 Instrukcja INSERT EXEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270 Instrukcja SELECT INTO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 Instrukcja BULK INSERT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272 Właściwość Identity i obiekt sekwencjonowania . . . . . . . . . . . . . . . . . . . 273 Usuwanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282 Instrukcja DELETE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 Instrukcja TRUNCATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284 Instrukcja DELETE w oparciu o złączenie . . . . . . . . . . . . . . . . . . . . . . . . . 284 Aktualizowanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286 Instrukcja UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287 Instrukcja UPDATE w oparciu o złączenie . . . . . . . . . . . . . . . . . . . . . . . . 288 Przypisanie UPDATE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291 Scalanie danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292 Modyfikowanie danych przy użyciu wyrażeń tablicowych . . . . . . . . . . . . 296 Modyfikacje przy użyciu opcji TOP i OFFSET-FETCH . . . . . . . . . . . . . . . . . 299 Klauzula OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 INSERT z klauzulą OUTPUT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 302 DELETE z klauzulą OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304 UPDATE z klauzulą OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 MERGE z klauzulą OUTPUT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 306 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== x Spis treści Możliwość tworzenia kwerend złożonych – composable DML . . . . . . . 307 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Ćwiczenie 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Ćwiczenie 1-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Ćwiczenie 1-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Ćwiczenie 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Rozwiązania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313 Ćwiczenie 1-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Ćwiczenie 1-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314 Ćwiczenie 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Ćwiczenie 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315 Ćwiczenie 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316 Ćwiczenie 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317 9 Transakcje i współbieżność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Transakcje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319 Blokowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Blokady. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322 Rozwiązywanie problemów związanych z blokowaniem . . . . . . . . . . . . 326 Poziomy izolacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333 Poziom izolacji READ UNCOMMITTED . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 Poziom izolacji READ COMMITTED . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 336 Poziom izolacji REPEATABLE READ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Poziom izolacji SERIALIZABLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339 Poziomy izolacji oparte na wersjach wierszy . . . . . . . . . . . . . . . . . . . . . . 341 Podsumowanie poziomów izolacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Zakleszczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 Ćwiczenia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Ćwiczenie 1-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 Ćwiczenie 1-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Spis treści xi Ćwiczenie 1-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Ćwiczenie 1-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 Ćwiczenie 1-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Ćwiczenie 1-6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Ćwiczenie 2-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Ćwiczenie 2-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Ćwiczenie 2-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 Ćwiczenie 2-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 357 Ćwiczenie 2-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 358 Ćwiczenie 2-6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 Ćwiczenie 3-1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Ćwiczenie 3-2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Ćwiczenie 3-3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Ćwiczenie 3-4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Ćwiczenie 3-5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 362 Ćwiczenie 3-6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 Ćwiczenie 3-7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 363 10 Obiekty programowalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 365 Wsady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Wsad jako jednostka analizy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 368 Wsady i zmienne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 369 Instrukcje, których nie można łączyć w tym samym wsadzie . . . . . . . . 370 Wsad jako jednostka rozpoznawania . . . . . . . . . . . . . . . . . . . . . . . . . . . . 370 Opcja GO n . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 371 Elementy kontroli przepływu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Element kontroli przepływu IF … ELSE . . . . . . . . . . . . . . . . . . . . . . . . . . 372 Element kontroli przepływu WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373 Przykład użycia elementów IF i WHILE . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Kursory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 375 Tabele tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Lokalne tabele tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 380 Globalne tabele tymczasowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 382 Zmienne tablicowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 384 Typy tablicowe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 385 Dynamiczny kod SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 386 Polecenie EXEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xii Spis treści Procedura składowana sp_executesql . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387 Używanie operatora PIVOT w dynamicznym kodzie SQL . . . . . . . . . . . 389 Procedury . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390 Funkcje definiowane przez użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . 391 Procedur składowane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 392 Wyzwalacze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 395 Obsługa błędów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 399 Wnioski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 404 Dodatek Rozpoczynamy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Rozpoczynamy pracę z SQL Database . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 405 Instalowanie produktu SQL Server w wersji dla siedziby . . . . . . . . . . . . . . 406 1. Uzyskanie produktu SQL Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 2. Utworzenie konta użytkownika . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 406 3. Wymagania wstępne instalacji . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 408 4. Instalowanie mechanizmu bazy danych, dokumentacji i narzędzi . 408 Pobieranie kodu źródłowego i przykładowej bazy danych . . . . . . . . . . . . 415 Używanie narzędzia SQL Server Management Studio . . . . . . . . . . . . . . . . 417 Korzystanie z dokumentacji SQL Server Books Online . . . . . . . . . . . . . . . . 423 Indeks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427 ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Przedmowa Jestem bardzo szczęśliwy, że Itzik Beg-Gan znalazł czas i siły, by napisać książkę dotyczącą podstaw języka T-SQL. Od wielu lat Itzik, korzystając ze swoich boga- tych doświadczeń w nauczaniu i konsultacjach związanych z produktem Microsoft SQL, pisze książki na temat zaawansowanego programowania, pozostawiając istotną lukę nie tylko dla nowicjuszy czy mniej doświadczonych użytkowników, ale także dla wielu ekspertów korzystających z produktu SQL Server i pełniących role, w których programowanie T-SQL nie stanowi najwyższego priorytetu. W odniesieniu do języka T-SQL Itzik jest na świecie jedną z najbardziej kompeten- tnych osób. W rzeczywistości my, czyli członkowie zespołu projektowego SQL Server, zwracamy się do niego po porady dotyczące większości nowych rozszerzeń języka, jakie planujemy wprowadzić. Jego oceny i przeprowadzane z nim konsultacje stanowią ważną część naszego procesu projektowania produktu SQL Server. Dla osoby, będącej ekspertem w danym temacie, nigdy nie jest prostym zadaniem napisanie książki, która jest wprowadzeniem do tej tematyki; w tym względzie jednak ogromnym atutem Itzika są wieloletnie doświadczenia w nauczaniu podstawowych, jak i zaawansowanych klas programowania. Doświadczenia te stanowią wielką war- tość przy rozróżnianiu podstaw języka T-SQL od bardziej zaawansowanych tematów. Jednak w tej książce autor nie stosuje prostego unikania zaawansowanej tematyki; nie obawia się podejmowania spójnych opisów złożonych tematów, takich jak teoria zbio- rów, logika predykatów czy model relacyjny, wprowadzając je w zrozumiały sposób i na tyle szczegółowo, by czytelnicy zdali sobie sprawę z ich istotnej roli dla języka SQL. W rezultacie powstała książka, dzięki której czytelnicy nie tylko dowiedzą się, co i jak działa w T-SQL, ale także będą wiedzieć dlaczego. W książkach i podręcznikach programowania nie ma lepszego sposobu przedsta- wiania tematyki, niż omawianie jej na podstawie dobrych przykładów. W niniejszej książce zawarto wiele przykładów, a wszystkie przykłady można pobrać z witryny autora pod adresem: http://tsql.solidq.com. T-SQL to dialekt ofi cjalnych standardów ISO i ANSI dotyczących języka SQL, ale zawierający szereg rozszerzeń, które mogą usprawnić wyrazistość i zwięzłość naszego kodu T-SQL. W wielu prezentowanych przykładach pokazano krok po kroku rozwiązania przedstawione w języku T-SQL i ich odpowiedniki w ANSI SQL. Jest to ogromna zaleta dla czytelników, którzy znają język SQL w wersji standardu ANSI, a którzy nie znają T-SQL, a także dla programistów, którzy muszą pisać kod SQL, który będzie można w łatwy sposób instalować na wielu różnych platformach bazodanowych. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xiii xiv Przedmowa Silne powiązania autora z zespołem produktu SQL Server widoczne są wyraźnie w opisie specyfi cznych rozwiązań w SQL Server określanych mianem ABC (Appliance, Box, Cloud), które przedstawiono w rozdziale 1 „Podstawy zapytań i programowania T-SQL”. Do tej pory używanie pojęcia „ABC” widziałem jedynie w zespole Microsoft SQL Server, jestem jednak pewny, że tylko kwestią czasu jest jego szerokie upowszech- nienie. Itzik opracował i testował przykłady zamieszczone w książce zarówno w odnie- sieniu do rozwiązań „B” (box), jak i „C” (cloud) produktu SQL Server, a Dodatek wska- zuje, w którym miejscu możemy rozpocząć pracę z wersją SQL Server w chmurze, czyli produktem nazywanym Windows Azure SQL Database. Z tego względu możemy posługiwać się niniejszą książką jako punktem początkowym naszych doświadczeń z chmurą. W witrynie Azure znaleźć można informacje, jak uzyskać darmową sub- skrypcję usług Azure, by wykonywać przykłady przytoczone w książce. Rozszerzenie o usługi chmury dla SQL Server to wyjątkowo istotna kwestia, której nie powinniśmy pomijać. Osobiście uważam ją za tak ważną, że zrobię coś, czego nigdy dotąd nie zrobiłem pisząc słowo wstępne – zareklamuję inną książkę (przepra- szam Itzik, ale muszę to zrobić!). Moje zainteresowania chmurą i przekonanie o jej zaletach gwałtownie wzrosły po przeczytaniu książki The Big Switch napisanej przez Nicholasa G. Carra (W.W. Norton and Company, 2009) i chcę właśnie podzielić się tym doświadczeniem. Jest to wspaniała książka, która porównuje postęp, jaki dokonuje się dzięki obliczeniom w chmurze, do procesu elektryfi kacji wprowadzanego na początku dwudziestego wieku. Moja wiara w przyszłość chmury została jeszcze bardziej utrwalo- na po obejrzeniu prezentacji Jamesa Hamilton „Cloud Computing Economies of Scale” na konferencji MIX10 (nagranie dostępne jest pod adresem http://channel9.msdn.com/ events/MIX/ MIX10/EX01). Itzik wskazuje na jeszcze jedną zmianę związaną z technologią chmury, z któ- rej powinniśmy zdawać sobie sprawę. Przyzwyczailiśmy się do kilkuletniej przerwy pomiędzy kolejnymi wersjami SQL Server, ale dzięki chmurze ten wzorzec zmieni się istotnie; powinniśmy być przygotowani na kilka mniejszych wydań produktu w chmurze (nazywanych Aktualizacjami usługi), które każdego roku będą instalowane w centrach danych fi rmy Microsoft na całym świecie. Z tego względu Itzik rozsądnie postępuje, dokumentując rozbieżności T-SQL pomiędzy SQL Server a Windows Azure SQL Database w swojej witrynie http://tsql.solidq.com, a nie w książce – dzięki temu znacznie łatwiej jest prezentować aktualne informacje. Książkę czyta się z wielkim zainteresowaniem, a co więcej, pozwala się ona cieszyć z odkrywania prezentowanych w niej nowych wskazówek dotyczących T-SQL. Lubor Kollar, SQL Server Development Team, Microsoft ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wprowadzenie Niniejsza książka pełni rolę przewodnika osób podejmujących pierwsze kroki w języku T-SQL (nazywanym także Transact-SQL), który jest opracowanym w fi r- mie Microsoft dialektem standardów ISO i ANSI języka SQL. Dzięki książce poznamy teorię konstruowania zapytań i programowania w języku T-SQL oraz sposoby projek- towania kodu T-SQL w celu uzyskiwania i modyfi kowania danych. Ponadto w książce zamieszczono ogólny opis programowalnych obiektów. Pomimo że książka pomyślana jest dla Czytelników początkujących, nie jest jedynie zbiorem procedur, według których mają postępować – książka wykracza poza elemen- ty składni T-SQL i wyjaśnia logikę działającą w tle języka i jego elementów. Od czasu do czasu w książce pojawiają zagadnienia, które dla osób poznających język T-SQL mogą być uważane za tematykę zaawansowaną – z tego też względu zapoznawanie się z tym fragmentami jest opcjonalne. Jeśli dość pewnie czujemy się w omówionym do tej pory materiale, możemy przejść do tematów bardziej zaawan- sowanych; w przeciwnym razie spokojnie możemy opuścić te fragmenty i powrócić do nich, gdy już nabierzemy większego doświadczenia. Fragmenty uważane za bar- dziej zaawansowane są w tekście zaznaczone jako opcjonalne. Wiele aspektów SQL jest unikatowych dla tego języka i różnią się znacznie od innych języków programowania. Niniejsza książka ułatwia przyswojenie sobie właś- ciwego sposobu myślenia i pozwala dobrze poznać elementy języka oraz postępować zgodnie z najlepszymi zaleceniami praktycznymi programowania w języku SQL. Książka nie są związana z konkretną wersją – obejmuje jednak elementy języka, które zostały wprowadzone w ostatnich wersjach SQL Server, wliczając w to SQL Ser- ver 2012. Podczas omawiania ostatnio wprowadzonych elementów języka specyfi ko- wana jest wersja produktu, w której dany element został dodany. Produkt SQL Server, oprócz tego, że jest rozwiązaniem dostępnym w siedzibie, jest także dostępny jako usługa w chmurze o nazwie Windows Azure SQL Database (poprzednio SQL Azure). Przykłady kodu przytaczane w książce były testowane zarówno w instalacjach SQL Server w siedzibie, jak i w odniesieniu do SQL Database. W powiązanej z książką witryną sieci Web (http://tsql.solidq.com) udostępnione są infor- macje dotyczące problemów zgodności pomiędzy tymi rozwiązaniami – na przykład funkcje dostępne w SQL Server 2012, które nie są jeszcze dostępne w SQL Database. W celu uzupełnienia procesu nauczania w książce zamieszczono ćwiczenia, któ- re pozwalają poznane informacje utrwalić w praktyce. Od czasu do czasu w książ- ce pojawiają się ćwiczenia opcjonalne, które są bardziej zaawansowane. Ćwiczenia ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xv xvi Wprowadzenie te przeznaczone są dla Czytelników, którzy dobrze poznali omawiany materiał i chcą sami sprawdzić swoje umiejętności, rozwiązując trudniejsze problemy. Ćwiczenia opcjonalne dla Czytelników zaawansowanych są odpowiednio oznaczone. Dla kogo przeznaczona jest ta książka Niniejsza książka skierowana jest dla programistów korzystających z języka T-SQL, administratorów baz danych, osób zajmujących się rozwiązaniami BI, autorów rapor- tów, analityków, architektów baz danych i zaawansowanych użytkowników, którzy dopiero rozpoczynają pracę z SQL Server i muszą tworzyć kwerendy albo kod przy użyciu języka Transact-SQL. Założenia Największe korzyści książka ta przyniesie osobom, które mają już doświadczenie w pracy z systemami Windows i aplikacjami opartymi na tych systemach. Ponadto osoby te powinny znać podstawowe pojęcia dotyczące systemów zarządzania relacyj- nymi bazami danych. Przydatne będzie też podstawowe doświadczenie w tworzeniu oprogramowania. Kto nie powinien czytać tej książki Nie każda książka nadaje się dla każdego czytelnika. W książce omówiono podsta- wy języka i głównie skierowana jest ona do osób w praktyce korzystających z języka T-SQL, które nie mają w tym wielkiego doświadczenia. Tym niemniej, wielu czytel- ników poprzedniego wydania tej książki uważa, że pomimo doświadczeń zdobytych w kolejnych latach pracy książka ta nadal jest przydatna i uzupełnia brakującą wiedzę. Organizacja książki Książka rozpoczyna się od przedstawienia teoretycznych podstaw konstruowania zapytań i programowania w języku T-SQL (rozdział 1), co stanowi fundament dla pozostałej części książki, a także dla procesów tworzenia tabel i defi niowania integral- ności danych. W rozdziałach 2 do 8 poruszane są różnorodne aspekty uzyskiwania i modyfi kowania danych, w rozdziale 9 omówione są kwestie współbieżności i trans- akcji, a na koniec rozdział 10 stanowi przegląd obiektów programowalnych. Poniżej przedstawiono listę rozdziałów wraz z krótkim ich opisem: ■ Rozdział 1 „Podstawy zapytań i programowania T-SQL” – teoretyczne podsta- wy SQL, teoria zbiorów i logika predykatów; analizy modelu relacyjnego; opisy architektury SQL Server; wyjaśnienie sposobów tworzenia tabel i defi niowania integralności danych. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Wymagania systemowe xvii ■ ■ ■ ■ ■ ■ ■ ■ ■ Rozdział 2 „Kwerendy dotyczące pojedynczej tabeli” – różnorodne aspekty konstruowania kwerend dotyczących pojedynczej tabeli przy użyciu polecenia SELECT. Rozdział 3 „Złączenia” – opis zapytań dotyczących wielu tabel przy użyciu złą- czeń (join), a w tym złączeń typu iloczyn kartezjański, złączenia wewnętrzne i zewnętrzne. Rozdział 4 „Podkwerendy” – omówienie kwerend używanych wewnątrz innych kwerend (mechanizm nazywany czasem podkwerendą). Rozdział 5 „Wyrażenia tablicowe” – omówienie tabel pochodnych, wyrażeń CTE (Common Table Expression), widoków, wbudowanych funkcji zwracających tabe- le i operatora APPLY. Rozdział 6 „Operatory zbiorowe” – omówienie operatorów UNION, INTERSECT i EXCEPT. Rozdział 7 „Zaawansowane kwestie tworzenia zapytań” – omówienie funkcji okien, operatorów PIVOT i UNPIVOT oraz praca z operatorami GROUPING SETS. Rozdział 8 „Modyfi kowanie danych” – wstawianie, aktualizowanie, usuwanie i sca- lanie danych. Rozdział 9 „Transakcje i współbieżność” – omówienie kwestii współdziałania połączeń użytkowników, którzy jednocześnie korzystają z tych danych; rozdział opisuje pojęcia, takie jak transakcje, blokady, poziomy izolacji czy zakleszczenia. Rozdział 10 „Obiekty programowalne” – omówienie możliwości programowania przy użyciu T-SQL w SQL Server. W książce zamieszczono także dodatek „Rozpoczynamy”, który ułatwia skonfi guro- wanie środowiska, pobranie kodów źródłowych książki, zainstalowanie przykładowej bazy danych TSQL2012, rozpoczęcie pisania kodu w odniesieniu do produktu SQL Server oraz poznanie sposobów uzyskania pomocy dzięki dokumentacji SQL Server Books Online. Wymagania systemowe Dodatek „Rozpoczynamy” zawiera informacje, których wersji produktu SQL Server 2012 można użyć do pracy z przykładowym kodem zamieszczonym w tej książce. Poszczególne wersje SQL Server mogą mieć różne wymagania systemowe i programo- we, a te wymagania są dokładnie opisane w dokumentacji SQL Server Books Online w sekcji „Hardware and Software Requirements for Installing SQL Server 2012”. W Dodatku wyjaśniono również, jak korzystać z dokumentacji SQL Server Books Online. Jeśli jesteśmy połączeni z usługą SQL Database, a sprzęt i oprogramowanie jest utrzymywane przez fi rmę Microsoft, wymagania te nie są istotne. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xviii Wprowadzenie Przykłady kodu Niniejsza książka powiązana jest z witryną sieci Web, która udostępnia wszystkie przy- kłady kodu używane książce, poprawki, a także dodatkowe zasoby. http://tsql.solidq.com W dodatku „Rozpoczynamy” znaleźć można informacje szczegółowe na temat kodów źródłowych. Poprawki i pomoc techniczna Dołożyliśmy wszelkich starań, by zapewnić największą dokładność informacji prezen- towanych w książce i materiałach pomocniczych. Informacje o zmianach i korektach zauważonych po opublikowaniu książki zamieszczane będą w witrynie Microsoft Press (oreilly.com): http://go.microsoft.com/FWLink/?Linkid=248718 Informacje o niezauważonych jeszcze błędach prosimy przekazywać za pośrednictwem tej samej strony. Dodatkowa pomoc możliwa jest za pośrednictwem adresu e-mail Microsoft Press Book Support: mspinput@microsoft.com. Prosimy pamiętać, że pod wymienionymi powyżej adresami nie jest oferowana pomoc techniczna dla oprogramowania fi rmy Microsoft. Oczekujemy na Wasze uwagi W fi rmie Microsoft Press najwyższym priorytetem jest zadowolenie czytelników, a wszelkie komentarze są mile widziane i stanowią cenną wartość. Swoje opinie o książce można przesłać na adres: http://www.microsoft.com/learning/booksurvey W krótkim czasie zapoznajemy się ze wszystkim komentarzami i uwagami. Z góry dziękujemy za wszelkie opinie! Pozostańmy w kontakcie Warto rozmawiać! Jesteśmy na Twitterze: http://twitter.com/MicrosoftPress. ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Podziękowania Wiele osób przyczyniło się do powstania tej książki, czy to bezpośrednio, czy pośrednio i wszystkim im należą się serdeczne podziękowania i uznanie. Dla Lilach, za zrozumienie i wsparcie wszystkich moich poczynań oraz za wyrozu- miałość dla niekończących się godzin spędzonych nad SQL. Dla moich rodziców, Mila i Gabi, oraz rodzeństwa Mickey i Ina, za stałe wsparcie i akceptowanie nieobecności, co teraz jest trudniejsze niż kiedykolwiek. Mamo, wszy- scy wierzymy, że będzie dobrze, dzięki Twojej sile i determinacji. Tato, dzięki, że jesteś tak pomocny. Dla członków zespołu projektowego Microsoft SQL Server; Lubor Kollar, Tobias Ternstrom, Umachandar Jayachandran (UC) i z pewnością wielu innych. Dziękuję za wielki wysiłek i czas spędzony na spotkaniach ze mną i poświęcony na udzielanie mailowych odpowiedzi na moje pytania i wątpliwości. Sądzę, że w produktach SQL Server 2012 i SQL Database widać poczynione wielkie inwestycje w T-SQL i mam nadzieję, że ten kierunek zostanie zachowany. Dla zespołu redaktorów w fi rmach O’Reilly Media i Microsoft Press; dziękuję Keno- wi Jones za poświęcone godziny i zainicjowanie projektu. Dziękuję Russellowi Jones za uruchomienie i przeprowadzenie projektu po stronie O’Reilly. Dziękuję także Kri- sten Borg, Kathy Krause i wszystkim innym, którzy pracowali nad tą książką. Dla Herberta Albert i Gianluca Hotz, redaktorów technicznych książki, wykonali- ście doskonałą pracę, dzięki której książka jest lepsza i bardziej precyzyjna. Dla SolidQ, mojej fi rmy w ostatniej dekadzie: to wielka satysfakcja pracować w tak wspaniale prowadzonej fi rmie. Pracownicy fi rmy to nie tylko koledzy – to partnerzy, przyjaciele i rodzina. Fernando G. Guerrero, Douglas McDowell, Herbert Albert, Dejan Sarka, Gianluca Hotz, Jeanne Reeves, Glenn McCoin, Fritz Lechnitz, Eric Van Soldt, Joelle Budd, Jan Taylor, Marilyn Templeton, Berry Walker, Alberto Martin, Lorena Jimenez, Ron Talmage, Andy Kelly, Rushabh Mehta, Eladio Rincón, Erik Veerman, Jay Hackney, Richard Waymire, Carl Rabeler, Chris Randall, Johan Åhlén, Raoul Illyés, Peter Larsson, Peter Myers, Paul Turley – dziękuję Wam i wielu innym osobom. Dla zespołu redakcyjnego produktu SQL Server Pro, czyli Megan Keller, Lavon Peters, Michele Crockett, Mike Otey i z pewnością jeszcze wiele innych osób; pisałem dla tego magazynu od ponad dekady i jestem wdzięczny, że mogłem podzielić się moją wiedzą z czytelnikami magazynu. Dla osób z grupy MVP produktu SQL Server – Alejandro Mesa, Erland Sommar- skog, Aaron Bertrand, Tibor Karaszi, Paul White i wielu innych oraz dla prowadzącego ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== xix xx Podziękowania program MVP, Simona Tien; jest to wspaniały program i jestem wdzięczny, że mogłem w nim uczestniczyć. Niespotykany jest poziom umiejętności w tej grupie i zawsze cie- szyłem się na nasze spotkania, zarówno, by podzielić się pomysłami, jak i po prostu pogadać przy piwie. Jestem przekonany, że w dużej mierze dodanie przez Microsoft funkcjonalności T-SQL do produktu SQL Server zostało zainspirowane przez członków MVP i całą społeczność produktu SQL Server. To wspaniale przekonać się, że ta syner- gia przekształca się w tak znaczące i ważne rezultaty. Dla Q2, Q3 i Q4, thanQ. Na koniec, podziękowania kieruję do moich studentów: nauczanie SQL jest moją siłą napędową, moją pasją. Dziękuję, że mogę spełniać moje powołanie i dziękuję za wszystkie interesujące pytania, które pozwalają pogłębiać wiedzę. Itzik Ben-Gan ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== ROZDZIAŁ 1 Podstawy zapytań i programowania T-SQL Wyruszamy w podróż do krainy innej niż wszystkie – miejsca, które rządzi się własnym zbiorem praw. Jeśli książka ta jest pierwszym krokiem poznawania języka T-SQL (Transact-SQL), powinniście się czuć tak jak Alicja przed rozpoczęciem jej przygód w Krainie Czarów. Dla mnie podróż ta nie ma końca, a po drodze sta- le odkrywam coś nowego. Zazdroszczę Wam – niektóre z najbardziej ekscytujących odkryć wciąż są przed Wami! Z językiem T-SQL związany jestem od wielu lat: nauczanie, seminaria, pisanie i konsultacje związane z tą tematyką. Dla mnie T-SQL to coś więcej niż tylko język programowania – to sposób myślenia. Do tej pory uczyłem i pisałem często na temat zaawansowanych kwestii, a nie opisywałem podstaw języka. Nie dlatego, że podstawy T-SQL są proste czy łatwe – wręcz przeciwnie: widoczna prostota języka jest myląca. Mógłbym opisywać elementy składni języka w sposób bardzo powierzchowny i na tej podstawie można w kilka minut rozpocząć pisanie kwerend. W praktyce jednak podej- ście takie utrudnia zrozumienie istoty języka i wydłuża proces jego poznawania. Rola przewodnika osób podejmujących pierwsze kroki to duża odpowiedzialność. Chciałbym mieć pewność, że poświęciłem wystarczająco dużo czasu i wysiłku, analizu- jąc i poznając język, zanim zabrałem się za opisywanie jego podstaw. Język T-SQL nie jest prosty; właściwe opanowanie podstaw to znacznie więcej, niż zrozumienie elemen- tów składni i kodowania kwerend, które zwracają odpowiednie wyniki. W zasadzie trzeba wyrzucić z pamięci to, co się wie na temat innych języków programowania i zacząć myśleć w kategoriach języka T-SQL. Teoretyczne podstawy SQL to akronim nazwy Structured Query Language (strukturalny język zapytań). Jest to standardowy język, opracowany do tworzenia zapytań i zarządzania danymi w systemach zarządzania relacyjnymi bazami danych (RDBMS). RDBMS to system zarządzania bazą danych oparty na modelu relacyjnym (model semantyczny przed- stawiania danych), który z kolei bazuje na dwóch działach matematyki: teorii zbiorów i logice predykatów. Wiele innych języków programowania i różnych aspektów obli- czeń komputerowych powstało i rozwijało się w dużej mierze w oparciu o intuicję. Inaczej jest w przypadku SQL, w takim stopniu, w jakim SQL bazuje na modelu ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== 1 2 Rozdział 1: Podstawy zapytań i programowania T-SQL relacyjnym, opiera się na trwałym fundamencie – matematyce stosowanej. Tak więc T-SQL wspierany jest przez solidne podstawy. Firma Microsoft udostępnia język T-SQL jako dialekt (lub rozszerzenie) języka SQL w oprogramowaniu zarządzania danymi produktu Microsoft SQL Server, czyli w swoim systemie RDBMS. Niniejszy podrozdział stanowi krótki opis teoretycznych podstaw języka SQL, teo- rii zbiorów i logiki predykatów, modelu relacyjnego i cyklu życia danych. Ponieważ książka ta nie jest ani podręcznikiem matematycznym, ani książką o modelowaniu danych i projektowaniu, przedstawione w niej informacje teoretyczne są przekazywane w swobodnej formie i tym samym nie są pełne. Celem jest opisanie kontekstu języka T-SQL i przedstawienie kluczowych punktów, które są integralną częścią procesu pra- widłowego zrozumienia opisu działania języka T-SQL w dalszej części książki. Niezależność języka Model relacyjny jest niezależny od języka. Możemy więc implementować model relacyjny przy użyciu innego języka niż SQL, na przykład przy użyciu C# w modelu klas. Obecnie typowym rozwiązaniem są systemy RDBMS, które obsługują także inne języki niż dialekt SQL, czego przykładem jest integracja CLR w SQL Server. Ponadto już na początku trzeba zdawać sobie sprawę, że SQL na różne sposo- by odbiega od modelu relacyjnego. Niektórzy nawet twierdzą, że SQL powinien zastąpić nowy język (taki, który jest bardziej zgodny z modelem relacyjnym). Na razie jednak, SQL jest branżowym językiem używanym przez wszystkie wio- dące systemy RDBMS. ZOBACZ TAKŻE Informacje szczegółowe na temat niezgodności SQL z modelem relacyj- nym, a także na temat metod używania SQL zgodnie z tym modelem, znaleźć można w na- stępującej książce: SQL and Relational Theory: How to Write Accurate SQL Code, Second Edition, C. J. Date (O’Reilly Media, 2011). SQL SQL to język standardów ANSI i ISO, bazujący na modelu relacyjnym, opracowany do tworzenia zapytań i zarządzania danymi w systemach RDBMS. Na początku lat siedemdziesiątych, dla swojego systemu RDBMS nazwanego System R, fi rma IBM opracowała język SEQUEL (Structured English QUEry Language). Nazwa języka została później zmieniona na SQL ze względu na dyskusje dotyczące znaku towarowego. Język SQL stał się najpierw standardem ANSI (w roku 1986), a następnie standardem ISO (w roku 1987). Od roku 1986 instytucje ANSI (American ##7#52#aSUZPUk1BVC1WaXJ0dWFsbw== Teoretyczne podstawy 3 National Standards Institute) i ISO (International Organization for Standardization) co kilka lat udostępniają nowe wersje standardu SQL. Do tej pory opublikowane zosta- ły następujące standardy: SQL-86 (1986), SQL-89 (1989), SQL-92 (1992), SQL:1999 (1999), SQL:2003 (2003), SQL:2006 (2006), SQL:2008 (2008) i SQL:2011 (2011). Co interesujące, język SQL przypomina angielski i jest również bardzo logiczny. Inaczej niż w przypadku wielu języków programowania, które stosują imperatywne wzorce programowania, SQL używ
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Microsoft SQL Server 2012 Podstawy języka 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ą: