1. Zaawansowane instrukcje SQL
Tworzenie bardziej rozbudowanych zapytań wymaga łączenia selekcji, modyfikacji danych i konstrukcji pomocniczych. Omawiane są klauzule SELECT, GROUP BY i HAVING, operacje INSERT, UPDATE, DELETE i MERGE, widoki, CTE, Dynamic SQL, bezpieczeństwo oraz kursory i ich alternatywy.
- zapytania
SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY,
- operacje modyfikujące dane (
INSERT, UPDATE, DELETE, MERGE),
- wykorzystanie instrukcji
INSERT INTO ... SELECT,
- tworzenie i modyfikacja widoków (
CREATE VIEW, ALTER VIEW),
- Common Table Expressions (CTE) i rekurencyjne CTE,
- Dynamic SQL – zastosowania, parametryzacja i bezpieczeństwo,
- ochrona przed SQL Injection,
- kursory – zastosowania oraz nowoczesne alternatywy oparte na operacjach zbiorowych.
2. Podzapytania i operacje na zbiorach
Relacja między podzapytaniami a operatorami zbiorów decyduje o czytelności i efektywności wielu konstrukcji SQL. Sekcja obejmuje podzapytania skorelowane i nieskorelowane, użycie ich w SELECT, FROM i WHERE oraz operatory EXISTS, IN, ANY, ALL, UNION, INTERSECT i EXCEPT.
- podzapytania skorelowane i nieskorelowane,
- podzapytania w klauzulach
SELECT, FROM i WHERE,
- operatory
EXISTS, NOT EXISTS, IN, ANY, ALL,
- operatory zbiorów (
UNION, UNION ALL, INTERSECT, EXCEPT),
- wybór optymalnej techniki budowy zapytań.
3. Zmienne i sterowanie przepływem
Sterowanie przepływem pozwala budować logikę wykonania wykraczającą poza pojedyncze zapytanie. Uczestnicy deklarują i wykorzystują zmienne, stosują IF...ELSE, CASE i WHILE, a także poznają TRY...CATCH oraz metody obsługi błędów i komunikatów.
- deklarowanie zmiennych,
- przypisywanie wartości,
- wykorzystanie zmiennych w zapytaniach i procedurach,
- instrukcje warunkowe (
IF...ELSE, CASE),
- pętle (
WHILE),
- obsługa wyjątków (
TRY...CATCH),
- zarządzanie błędami i komunikatami.
4. Typy danych i ich wykorzystanie
Od właściwego typu danych zależą nie tylko poprawność zapisu, ale też rozmiar i wydajność operacji. Materiał obejmuje typy liczbowe, znakowe, daty i czasu, binarne, XML, JSON, zasady konwersji oraz kryteria doboru typów pod kątem zastosowania.
- typy liczbowe,
- typy znakowe (
CHAR, VARCHAR, NCHAR, NVARCHAR),
- typy daty i czasu (
DATE, TIME, DATETIME2, DATETIMEOFFSET),
- typy binarne,
- dane XML,
- dane JSON i funkcje JSON (w systemach wspierających tę funkcjonalność),
- konwersja typów danych,
- dobór właściwych typów danych pod kątem wydajności.
5. Tabele i struktury pomocnicze
Dobór struktury pomocniczej wpływa na sposób przetwarzania danych pośrednich i obciążenie bazy. Sekcja porównuje tabele tymczasowe lokalne i globalne, zmienne tabelaryczne oraz tabele pamięciowe, wskazując kiedy każda z tych opcji sprawdza się najlepiej.
- tabele tymczasowe lokalne i globalne,
- zmienne tabelaryczne,
- tabele pamięciowe (jeżeli wspierane przez silnik bazy danych),
- wybór odpowiedniej struktury dla danego scenariusza.
6. Procedury składowane
Procedury składowane służą do kapsułkowania operacji biznesowych wykonywanych w bazie danych. W tej części omawiana jest ich budowa, parametry wejściowe i wyjściowe, zwracanie kodów błędów, użycie Dynamic SQL oraz zasady poprawnego projektowania.
- zastosowania procedur,
- budowa procedury składowanej,
- parametry wejściowe i wyjściowe,
- zwracanie kodów błędów,
- Dynamic SQL w procedurach,
- dobre praktyki projektowania procedur.
7. Funkcje użytkownika
Funkcje użytkownika porządkują powtarzalną logikę i umożliwiają wielokrotne użycie obliczeń w zapytaniach. Zakres obejmuje funkcje skalarne i tabelaryczne, operacje na datach, tekście, liczbach i konwersjach, a także projektowanie własnych funkcji UDF.
- funkcje skalarne,
- funkcje tabelaryczne (
Inline Table-Valued Functions),
- wieloinstrukcyjne funkcje tabelaryczne,
- funkcje operujące na datach i czasie,
- funkcje tekstowe,
- funkcje matematyczne,
- funkcje konwersji,
- tworzenie własnych funkcji użytkownika.
8. Transakcje i współbieżność
Spójność danych w środowisku wielodostępnym wymaga poprawnego zarządzania transakcjami. Uczestnicy pracują z BEGIN TRANSACTION, COMMIT, ROLLBACK i SAVEPOINT, poznają poziomy izolacji, blokady oraz zasady obsługi błędów przy operacjach współbieżnych.
- właściwości ACID,
BEGIN TRANSACTION, COMMIT, ROLLBACK,
- punkty zapisu (
SAVEPOINT),
- poziomy izolacji transakcji,
- blokady i współbieżność,
- obsługa błędów w transakcjach.
9. Wyzwalacze (Triggers)
Gdy logika ma reagować automatycznie na zmiany danych lub struktury, stosuje się wyzwalacze. Omawiane są triggery DML i DDL, ich zastosowania biznesowe oraz audyt zmian, a także dobre praktyki i ograniczenia wpływające na utrzymanie rozwiązania.
- wyzwalacze DML (
INSERT, UPDATE, DELETE),
- wyzwalacze DDL (
CREATE, ALTER, DROP),
- zastosowania biznesowe,
- audyt zmian,
- dobre praktyki oraz ograniczenia stosowania wyzwalaczy.
10. Wydajność i optymalizacja kodu T-SQL
Wydajność kodu T-SQL ocenia się przez sposób wykonania zapytań i wykorzystanie zasobów silnika. Sekcja obejmuje analizę planów wykonania, dobór indeksów, strojenie procedur i funkcji, eliminację typowych wąskich gardeł oraz monitorowanie działania zapytań.
- analiza planów wykonania,
- wykorzystanie indeksów,
- optymalizacja procedur i funkcji,
- eliminacja typowych problemów wydajnościowych,
- monitorowanie zapytań.
11. Warsztat praktyczny
Na warsztacie uczestnicy łączą zagadnienia z całego programu w spójne rozwiązania po stronie bazy danych. Tworzą procedury, funkcje i wyzwalacze, wdrażają transakcje z obsługą błędów, stosują CTE oraz Dynamic SQL, a następnie analizują i optymalizują gotowy kod.
- tworzenie procedur składowanych i funkcji,
- budowa wyzwalaczy,
- implementacja transakcji i obsługi błędów,
- wykorzystanie CTE oraz Dynamic SQL,
- analiza i optymalizacja kodu,
- rozwiązanie kompleksowego zadania obejmującego programowanie po stronie bazy danych.