Grupowanie i łączenie zbiorów
Tworzenie kostek analitycznych połówkowych z użyciem funkcji ROLLUP. Tworzenie pełnej kostki analitycznej z wykorzystaniem funkcji CUBE. Wielokrotne grupowanie z określeniem zbiorów atrybutów na których będziemy wykonywali agregacje za pomocą GROUPING SETS. Wykorzystanie funkcji skalarnych GROUPING() i GROUPING_ID(). Porównanie wielokrotnego grupowania z tradycyjnymi metodami wykorzystującymi grupowania pojedyncze oraz łączenia zbiorów za pomocą UNION.
Podzapytania
Zapytanie jako zbiór danych. Oczekiwana liczba zwracanych wartości - zapytania skalarne oraz wielowartościowe. Samodzielne podzapytania podrzędne, podzapytania nieskorelowane. Podzapytanie skorelowane - odwołujące się kolumn znajdujących się w zapytaniu zewnętrznym. Miejsce stosowania podzapytań: SELECT, FROM, WHERE. Testy istnienia. Sprawdzanie czy podzapytanie zwraca wiersze za pomocą predykatów: EXIST, IN. Podzapytanie z operatorami IN, Any (Some), All. Zapytania wielokrotnie zagnieżdżone.
Funkcje szeregujące i rankingowe
Znaczenie funkcji okna OVER(). Numerowanie rekordów z użyciem funkcji ROW_NUMBER(). Ranking z użyciem RANK() - szereg oraz DENSE_RANK() - szereg zwarty. Numerowanie rekordów według podkategorii z użyciem PARTITION BY. Dzielenie zbioru na przedziały za pomocą NTILE(). Wykorzystanie CTE - common table expression.
Zaawansowane funkcje
Funkcje matematyczne: RAND(), FLOOR(), POWER(), SQRT. Funkcje daty i czasu GETDATE(), GETUTCDATE(), SYSDATETIME(), DATEADD(), DATENAME(). Funkcje konwersji i typów: CAST(), CONVERT(). Tworzenie własnych funkcji za pomocą polecenia CREATE FUNCTION(). Tworzenie funkcji tabelarycznych ze zwykłego zapytania (SELECT). Tworzenie funkcji tabelarycznych złożonych. Własne funkcje skalarne. Znajdź wystąpienie ciągu za pomocą CHARINDEX(). Pobieranie fragmentu tekstu z użyciem SUBSTRING(). Przykrywanie danych wrażliwych z wykorzystaniem funkcji STUFF().
CTE, procedury składowane
Tablicowe zapytania podrzędne, czyli wyrażenia tablicowe. Upraszczanie kodu za pomocą wspólnych wrażeń tablicowych (CTE). Wielokrotne odwołania do raz zdefiniowanego CTE. CTE jako swego rodzaju tabela pośrednia. Stosowanie CTE w kontenerach np. widokach lub definiowanych przez użytkownika funkcjach. Systemowe procedury składowane, parametry procedur składowanych, wywoływanie procedur. Tworzenie i poprawa procedur składowanych. CREATE PROCEDURE, ALTER PROCEDURE. Najważniejsze wskazówki dotyczące optymalizacji procedur: SET NOCOUNT ON, funkcje skalarne w a działanie procedur, SELECT *, zawężanie wyników, BEGIN/END TRANSACTION.
Inne zagadnienia
XML jako zewnętrzne źródło danych, pobieranie danych XML do tabel. Czytanie plików XML z wykorzystaniem OPENXML(), OPENROWSET(). Tworzenie dokumentów XML na podstawie danych relacyjnych z użyciem FOR XML AUTO, przeszukiwanie XML za pomocą natywnych metod. Optymalizacja zapytań: logiczne przetwarzanie zapytań. Plan wykonywania zapytania. Podstawowe narzędzia optymalizacji: Sterty (stosy), Indeksy, Statystyki. Dobre praktyki tworzenia zapytań.