Czy zastanawialiście się kiedyś jak zapytanie wykonuje silnik bazy danych? W pierwszej kolejności wpisujemy SELECT, ale skąd wiadomo, z której tabeli pobrać dane? Dlaczego w klauzuli WHERE nie widzimy aliasów z polecenia SELECT? Co jest powodem tego, że w SELECT można używać tylko kolumn wymienionych w GROUP BY i funkcji agregujących?
Odpowiedź jest bardzo prosta. Język SQL jest mocno zbliżony do naturalnego, dlatego w pierwszej kolejności piszemy co wybieramy:
„weź imiona i nazwiska pracowników, ale tylko tych zatrudnionych przed 2016 rokiem”.
SELECT imię, nazwisko FROM pracownicy WHERE YEAR(data_zatrudnienia) < 2016
Silnik bazy danych wykonuje zapytanie w innej kolejności. Warto pamiętać, że jest ona zawsze taka sama.
- FROM, JOIN – najpierw serwer musi wiedzieć skąd pobrać dane
- WHERE – następnie filtruje dane i bierze tylko te potrzebne
- GROUP BY – kolejnym krokiem jest pogrupowanie danych
- HAVING – teraz silnik filtruje grupy
- SELECT – dopiero w tym kroku wybierane są potrzebne nam dane i wyliczane są funkcje agregujące
- ORDER BY – na samym końcu wiersze zostaną posortowane
- TOP – i wybrane te w odpowiedniej ilości
Jest to bardzo ważne, ponieważ dzięki tej wiedzy wiemy, które części zapytania są ważne pod względem optymalizacji.
Mam nadzieję, że dzięki temu jesteś w stanie odpowiedzieć na pytania zadane na początku wpisu 🙂
wydawało mi ze jestem masterem sqla bo joina i group by umiem. super wpis!
„Warto pamiętać, że jest ona zawsze taka sama.” – na pewno ?
A jeśli użyję UNION, nie wpłynie to na kolejność ? Wg. mnie wpłynie i TOP zostanie przeanalizowane przed UNION i SELECT’em. Kolejność jest więc zmienna w zależności, od wystąpienia (bądź nie) UNION w zestawieniu.
Tak czy inaczej – bardzo przydatny wpis.