Marcinie zwróć uwagę, iż zapytania dotychczas z jakimi
miałeś do czynienia miały postać: wybieram (select) wartości z pól z tabeli
(from ….). Przy czym po „from” można podać nazwę/nazwy konkretnych tabel albo
po prostu napisać w nawiasie kolejne zapytanie (zwane podzapytaniem).
Wybierałeś dotychczas „coś z czegoś”:
SELECT ….. FROM
(SELECT ….. FROM …. WHERE …. GROUP BY ….) alias_tabeli
WHERE …. GROUP BY …. ORDER BY…. ;
(SELECT ….. FROM …. WHERE …. GROUP BY ….) alias_tabeli
WHERE …. GROUP BY …. ORDER BY…. ;
W SQL istnieje podobnie jak w życiu możliwość wybierania nie
tylko „coś z czegoś” ale „z czegoś coś”. Co więcej okazuje się, iż ten drugi
sposób („z czegoś coś”) jest dla serwera bazy wydajniejszy, Twoje zapytanie
zostanie wykonane szybciej.
Robi się to następująco:
WITH alias_tabeli
AS (SELECT ….. FROM …. WHERE …. GROUP BY ….)
SELECT …. FROM alias_tabeli WHERE …. GROUP BY …. ORDER BY…. ;
AS (SELECT ….. FROM …. WHERE …. GROUP BY ….)
SELECT …. FROM alias_tabeli WHERE …. GROUP BY …. ORDER BY…. ;
Jak widać dzięki pokolorowaniu na obrazku poniżej obu wyżej
wymienionych konstrukcji mają one dużo wspólnych elementów, pojawiło się
jedynie dodatkowo WITH oraz AS i wyraźnie inna kolejność.
Użycie drugiej konstrukcji powoduje, iż wyniki są buforowane
i dzięki temu jest to wydajniejszy sposób. Warto go znać, bo może istotnie
przyspieszyć uzyskanie wyniku zapytania, oczywiście kosztem obciążenia bazy,
ale wydajniejszy dla Ciebie, powodujący, iż wyraźnie szybciej otrzymasz wynik.
W.
Brak komentarzy:
Prześlij komentarz