Kolejność wykonywania działań w SQL

9 grudnia 2021

Kolejność wykonywania działań SQL

Kolejność wykonywania działań w SQL – wprowadzenie

Kolejność wykonywania działań w SQL, inaczej mówiąc kolejność poleceń w SQL różni się od standardowych procedur w językach programowania. Załóżmy, że puszczasz sobie SELECTa, z jakąś agregacją, z jakimś filtrowaniem i np. do tego jest też jakieś sortowanie, jakiś ORDER BY albo jeszcze jakiś LIMIT, żeby tylko kilka wyników się wyświetliło.

Co SQL robi po kolei? Czy najpierw się grupuje rzeczy, czy najpierw się filtruje rzeczy? I które rzeczy się najpierw filtruje? Najpierw się filtruje HAVING, czy najpierw się filtruje jako WHERE? Jak to działa? No właśnie, zastanówmy się. Jak to działa? Co SQL musi wziąć najpierw pod uwagę?

Jeżeli ten temat wydaje się dla Ciebie zbyt skomplikowany, zerknij na mój plan nauki SQL.

Kolejność wykonywania poleceń w SQL

Kolejność wykonywania poleceń w SQL - przykład

Jeżeli sobie wyobrazimy jakiegoś takiego średnio skomplikowanego SELECTa, którego teraz widzisz na ekranie. To co się dzieje najpierw?

1 | FROM i JOIN

Najpierw silnik SQLa patrzy na to, skąd dane pochodzą. Czyli najpierw będziemy brali pod uwagę słowa FROM i JOIN, bo to jest dla nas najważniejsze. I to może zaskakiwać, jeśli chodzi o Kolejność wykonywania działań w SQL. W odróżnieniu od np. Pythona nie idziemy „linijka po linijce” (przy okazji polecam porównanie SQLa i Pythona).

Skąd brać dane? To jest pierwsza rzecz, którą SQL uwzględni, więc jeżeli np. nie ma tabeli, tak, to nie ma co filtrować, więc po co się brać za filtrowanie, skoro nie ma nawet źródła, nie ma skąd tego brać.

2 | WHERE

Następna rzeczą, którą SQL wykona, jest filtrowanie. Zanim dojdzie do jakiegokolwiek grupowania, zanim dojdzie do jakichkolwiek agregatów, do liczenia jakiegokolwiek SUM albo AVERAGE, albo COUNTu, zanim dojdzie do tych rzeczy, będziemy filtrowali surowe dane, które sobie już wybraliśmy z tych tabel za pomocą FROM albo JOIN.

Kolejność wykonywania działań w SQL WHERE

W naszym przypadku filtrujemy tylko rzędy gdzie w kolumnie Total mamy więcej niż 2, a w kolumnie BillingCity nie jest wpisane Paris lub Oslo.

3 | GROUP BY

Dopiero po przefiltrowaniu tych rzeczy dochodzi do grupowania i tutaj grupowanie oczywiście odbywa się razem, będzie się odbywało razem z agregatami, tak. To znaczy, zazwyczaj łączy się to ze sobą, jeżeli mamy SUM, no to tam gdzieś będzie poniżej GROUP BY. Jeżeli będziemy rozpatrywali kolejność wykonywania poleceń w SQL, to może być to nie intuicyjne, bo wygląda to tak jakby dwa polecenia (GROUP BY i np. SUM) wykonywały się równocześnie.

SQL GROUP BY kolejność

Tutaj nie ma co dzielić włosa na czworo. Dla Twojej praktycznej wiedzy wystarczy być wiedział, że GROUP BY jest po WHERE, a przed HAVING, jeżeli chodzi o kolejność działań w SQL. To jest ten moment, w którym to grupowanie się odbywa.

W tym naszym przykładzie GROUP BY 1 oznacza, że grupujemy po kolumnie nr 1, czyli BillingCity.

4 | HAVING

Dopiero kiedy to grupowanie się odbędzie, czyli np. mamy policzoną, nie wiem, średnią sprzedaż czy łączną sprzedaż czy whatever, dopiero w tym momencie idzie nam HAVING.

SQL HAVING kolejność

HAVING filtruje nam dane, ale filtruje nam dane na poziomie grup, czyli np. odrzucamy te grupy, odrzucamy te produkty, których łączna sprzedaż była poniżej jakiejś tam kwoty. To jest dopiero w tym momencie, to jest dopiero jakby krok czwarty.

U nas HAVING kwalifikuje tylko te grupy, w których unikalna ilość CustomerID jest większa niż 3.

5 | SELECT

I wreszcie dopiero, kiedy to zostanie wykonane, dopiero wtedy SQL robi SELECT. Wtedy bierze to wszystko, co sobie wyliczył. Dopiero na tym etapie oznaczone zostają rekordy, które mogą nam być zwrócone.

SELECT SQL kolejność wykonywania działań

6 | ORDER BY i LIMIT

Na końcu, ponieważ jakby mamy zaznaczony ten set wyników, który ma nam zostać zwrócony, wreszcie w tym momencie SQL może zastosować ostatnie operacje, czyli sortowanie i limitacja.

ORDER BY kolejność SQL

Czyli, jeżeli mamy użyte słowo ORDER BY, no to w tym momencie ono zostanie zastosowane, bo musimy sobie te wyniki posortować, np. posortować po ID produktu albo po dacie. W naszym przypadku sortujemy po nr_of_customers, od najwększej do najmniejszej wartości. Po sortowaniu, zastosowane zostaje LIMIT. U nas wzięte zostają 3 rekordy.

Kolejność wykonywania działań w SQL – podsumowanie

Kolejność wykonywania poleceń w SQL jest następująca:

  1. FROM / JOIN
  2. WHERE
  3. GROUP BY
  4. HAVING
  5. SELECT
  6. ORDER BY
  7. LIMIT

Poniżej wersja do oglądania :

A może pora sobie przypomnieć jak działa LEFT JOIN?

To tyle w tym temacie. Analizujcie w pokoju!  

Podobał Ci się ten artykuł?
Podziel się nim w Social Mediach:
>>> udostępnij go na LinkedIn i pokaż, że codziennie uczysz się czegoś nowego 
>>> wrzuć go na Facebooka, to się może przydać któremuś z Twoich znajomych 
>>> Przypnij sobie tą stronkę to zakładek, może się przydać w przyszłości

Inne ciekawe artykuły:

Wolisz oglądać niż czytać – nie ma problemu
>>> Obserwuj i oglądaj KajoData na YouTube

A jeśli chcesz się dowiedzieć czegoś więcej o SQL – zajrzyj tutaj.

Ja Ci ją z przyjemnością wyślę. Za darmo. Bez spamu.

Poradnik Początkującego Analityka

Video - jak szukać pracy w IT

Regularne dawki darmowej wiedzy, bez spamu.

Zgadzam się na przetwarzanie moich danych osobowych przez KajoData Kajo Rudziński w celu realizacji usługi newsletter, a tym samym wysyłania mi informacji o produktach blogowych, usługach, lub nowościach, zgodnie z polityką prywatności. Wiem, że zgodę tę mogę w każdej chwili cofnąć.

Please wait...

Dziękujemy za zapis!