Jak się nauczyć SQL?

* Post dla osób szukających pracę jako analityk danych lub data scientist

Co to jest SQL?

SQL czyli strukturalny język zapytań (ang. structured query language) to podstawowe narzędzie osoby pracującej z danymi oraz główna broń każdego analityka danych (o czym pisałam w poście jak nim zostać). SQL jest językiem służącym do komunikacji z bazą danych. Za jego pomocą pisze się tzw. query, czyli zapytanie do bazy danych, które służy do umieszczania, modyfikowania lub pobierania danych z baz. SQL jest językiem ustrukturyzowanym, co znaczy, że mimo iż ma wiele odmian (MySQL, SQLite, PostgreSQL, itd.), są one do siebie na tyle podobne, że umiejąc programować w jednej z nich nie musimy specjalnie uczyć się kolejnej.

SQL nie jest jak inne języki programowania, typu Python, gdzie możemy za pomocą kodu zaprogramować co nam się żywnie podoba i stworzyć całą aplikację. Jako, że służy on tylko i wyłącznie do kontaktu z bazą danych, ma on jasno narzuconą strukturę oraz kolejność wykonywania działań.

Dlaczego warto się go uczyć?

Według mojej subiektywnej opinii żadna inna umiejętność związana z danymi nie ma bardziej korzystnego bilansu zysków i strat (korzyści finansowe vs wysiłek włożony w naukę) niż SQL. Na rynku jest bardzo dużo różnego typu analityków ogarniających Excela, ale osób potrafiących kodować w SQL jest już dużo, dużo mniej, podczas gdy większość informacji jest pobierana z baz danych (czyli ktoś je musi z nich wyciągnąć). Nawet jeżeli kodowanie w SQL to jedyna umiejętność związana z danymi jaką posiadamy, to już jesteśmy w stanie zarabiać nawet 2-3x więcej niż analityk pracujący tylko w Excelu. Oczywiście, wiadomo, że czym więcej umiemy tym więcej zarabiamy, więc umiejąc Pythona czy Machine Learning byłoby to jeszcze więcej, ale dlatego właśnie wspominam o bilansie -> Python i ML są naprawdę wymagającymi umiejętnościami i trzeba włożyć mnóstwo godzin, aby je dobrze pojąć – podczas gdy SQL jest bardzo prosty!

Co trzeba umieć?

Szukając informacji o SQL w internecie znajdziecie kilka podejrzanie brzmiących skrótów zaczynających się na literkę D, które dotyczą:

  • DML manipulacji,
  • DDL definiowania,
  • DCL kontrolowania, i
  • DQL querowania baz danych.

Nie musicie ich zapamiętywać. Nas interesuje tylko i wyłącznie 4 aspekt (DQL), czyli wyciąganie z baz danych informacji za pomocą komendy SELECT. Reszta komend (CREATE, INSERT, ALTER itd.) jest używana przede wszystkim przez data engineers (DE), których rolą jest budowanie i utrzymywanie baz danych. Analityk nie zajmuje się budowaniem baz danych, ale wyciąganiem z nich informacji. Oczywiście, może się zdarzyć, że czasem będziecie używać inne komendy (np. żeby stworzyć swoją tabelę), ale spokojnie można się tego nauczyć na późniejszym etapie.

Anegdotka! Nie mogę wam obiecać, że nikt nigdy na rekrutacji nie spyta was o napisanie innych komend niż SELECT, ale pamiętajcie, że cały proces rekrutacji służy także do waszej oceny firmy, i być może właśnie rekrutujecie się do złego miejsca. Miałam kiedyś taką rekrutację w niemieckim korpo, gdzie było pełno pytań nie-SELECTowych (komendy typu CREATE, ALTER, DROP itd.). Prawdopodobnie układała to randomowa osoba, która z analizą nie miała nic wspólnego i tylko wpisała "SQL" w google wyciągając pierwsze lepsze przypadki. Jest to kompletny absurd - żadna porządna firma, która zna się na zakresie pracy analityka nie będzie się skupiała na nie-SELECTach. Jeżeli spotkacie się z takim przypadkiem i życie wam miłe, to Run Forest, run! Im lepsza firma, tym bardziej was przetrzepią z trudnych pytań SELECTowych.

Zanim jednak przejdziemy do omówienia samej komendy SELECT, cofnijmy się na moment do baz danych, z którymi będziemy się komunikować.

Podstawy relacyjnych baz danych

Osobiście uważam, że żeby zrozumieć działanie samego SQL, musimy także zrozumieć podstawy relacyjnych baz danych.

Jako podstawy naprawdę mam na myśli PODSTAWY. Nie bądźcie tacy głupi jak ja 5 lata temu myśląca, że aby napisać prostą query muszę wiedzieć wszystko na temat baz danych. Nie musicie. Nie róbcie odrębnego kursu, aby zrozumieć techniczne aspekty jak to działa. Ale, błagam(!), nie idźcie też w drugą stronę i totalną ignorancję – wstyd jest być analitykiem danych i nie rozumieć podstawowych pojęć typu primary key czy foreign key!

Nie mam złotego środka jak się tego nauczyć (no bo ja głupia robiłam ten nieszczęsny kurs), zatem polecę wam po prostu otwarty umysł, przeczytanie jakiegoś wprowadzającego artykułu (może tego?) i uważne słuchanie przy wstępie do kursów SQL.

SELECT

Możemy już wrócić do dania głównego tego artykułu. SELECT statement, czyli zapytanie rozpoczynające się słowem SELECT, to główny cel naszej nauki. Służy ono do definiowania, jakie informacje chcemy pobrać z bazy danych.

Zobrazujmy to na przykładzie prostej query, abyście zrozumieli mniej więcej o czym mówimy:

SELECT name, surname
FROM users
WHERE country = 'pl'

Powyższe zapytanie wysyła informację do bazy, że chcielibyśmy wyciągnąć imię i nazwisko (SELECT name, surname) z tabeli użytkowników (FROM users) od użytkowników z Polski (WHERE country = 'pl'). Jako wynik otrzymamy 2 kolumny (imię i nazwisko) i tyle wierszy, ile istnieje użytkowników z Polski w bazie, więc jeżeli mamy np. 3 użytkowników, baza danych powinna nam zwrócić coś w stylu:

Każde nasze zapytanie będzie miało podobną formę – zawsze będzie część SELECT definiująca co chcemy pobrać, oraz FROM określające z jakiej tabeli chcemy pobrać te dane. Filtrowanie za pomocą WHERE jest opcjonalne.

Do SELECT, FROM i WHERE musimy dorzucić jeszcze kilka rzeczy – np. gdy chcemy, by wypluło nam tylko 10 pierwszych wierszy to dodamy na końcu LIMIT 10, a gdy potrzebujemy danych z dwóch różnych tabel to musimy je połączyć za pomocą JOIN.

Nie musicie w tym momencie zapamiętywać te wszystkie informacje – chcę wam tylko przedstawić jak wygląda SQL i wytłumaczyć co jest wymagane na poziomie podstawowym. Ten post nie służy nauce SQL, ponieważ nie da się nauczyć SQL czytając 10-minutowy post. Zaraz przejdziemy do konkretnych kursów i stron, jeszcze tylko uzgodnijmy zakres co potrzebujemy wiedzieć, aby dostać pracę jako analityk danych lub data scientist.

Co jest podstawą podstaw i po zakończeniu nauki powinniście mieć w małym paluszku:

  • SELECT
  • FROM
  • WHERE: =, !=, IN, NOT IN, LIKE, NOT LIKE
  • JOIN: INNER,  LEFT
  • GROUPBY: COUNT, COUNT DISTINCT, MIN, MAX, SUM, AVG itd.
  • HAVING: różnica między WHERE i HAVING
  • ORDER BY
  • LIMIT
  • typy danych: string, int, date

Co jest trochę trudniejsze, ale i tak powinniście umieć/rozumieć/mieć o tym pojęcie:

  • UNION
  • JOIN: RIGHT, OUTER, CROSS, SELF JOIN
  • SUBQUERY
  • WINDOW FUNCTIONS: przede wszystkim RANK
  • Pisanie queries z dynamicznym okresem czasu zamiast kodowania dat na sztywno (ang. hard coding). W pracy używamy tego praktycznie w każdym zapytaniu, zatem często możemy się z tym spotkać na rekrutacji, a rzadko jest to wspominane na kursach. Przykład – gdy chcemy, aby dane dotyczyły tylko ostatnich 7 dni to dopisujemy warunek:

WHERE created_date >= NOW - INTERVAL '7' DAY

Kursy

Istnieje jeszcze jedna cecha SQL o której dotychczas nie wspomniałam. SQL ma naprawdę prosty syntaks, przez co naprawdę prosto wyciągnąć dane z bazy za jego pomocą. Nie ma jednak mechanizmu sprawdzającego, czy dane, które wyciągamy to są dane, które chcieliśmy wyciągnąć. Nie jest tak jak np. w Pythonie, gdzie często zły kod wywoła po prostu error i kod się nie wykona – w SQL często będziemy spotykać się z sytuacją, gdzie sam kod się wykona i zwróci nam rekordy, ale mogą być one niestety błędne. Jest na to tylko jedno rozwiązanie – SQLa trzeba się nauczyć porządnie. Dlatego uważam, że o ile w przypadku Excela, Pythona czy Tableau uczenie się metodą prób i błędów jest jak najbardziej ok, to przy SQL zalecam bardziej akademickie podejście i oprócz praktyki przerabianie także czystej teorii.

Niestety, nie jestem w stanie polecić jednego dobrego kursu, bo idealny kurs nie istnieje. Jestem w stanie za to polecić kombinację kurs + tutorial, które w połączeniu powinny wystarczyć do nauki. Jako dodatek polecam trochę bardziej skomplikowany kurs, który fajnie ilustruje pracę w SQL na prawdziwych danych.

Kurs Analyzing Big Data with SQL

Teoretyczne podejście w formie kursu, który pokrywa wszystkie podstawowe aspekty o których wspomniałam. Każdemu pojedynczemu zagadnieniu dedykowane jest osobne wideo, zatem przekazanej wiedzy jest naprawdę sporo. Jedyny problem jaki mam z tym kursem, to to, że jest on zbyt teoretyczny – aby nauczyć się SQL trzeba, przede wszystkim, pisać, pisać oraz – jeszcze raz – go pisać.

Tutorial SQLZoo

Praktykę SQL polecam z całego serca w formie tutorialu SQLZoo. Jest to naprawdę wybitny materiał, który polecam zawsze każdej osobie, która chce się nauczyć SQL. W tutorialu wszystko opiera się na waszym pisaniu queries i sprawdzaniu poprawności wyników, a teorii albo nie ma albo zamyka się w kilku słowach.

*Jedyny minus tego tutorialu to, że w pewnym momencie przesadzają trochę z poziomem trudności SELF JOINów czy SUBQUERY, zatem nie przejmujcie się za bardzo jak utkniecie na pojedyńczych przykładach. Ale jest ich tylko kilka, zatem proszę też nie odpuszczać przy co drugim zadaniu!

DodatkowoKurs Managing Big Data with MySQL

Bardzo fajny kurs, w założeniu dla początkujących, ale w rzeczywistości zbyt skomplikowany dla totalnych nowicjuszy. Jako nieliczny kurs korzysta on z prawdziwych danych wygenerowanych przez istniejące firmy, a nie idealnych rekordów sztucznie wytworzonych na potrzeby kursu. Dzięki temu widzimy z jakimi problemami spotykamy się używając SQL w realnej pracy i jak wygląda właściwy flow działania z danymi. Kurs jest mocno praktyczny, do tego stopnia, że zdarzyło mi się do niego wracać, aby odświeżyć pisanie queries przed rekrutacjami.

Co dalej?

Dzisiejszy artykuł wprowadził nas w świat SQL – co to jest, dlaczego warto się go uczyć, co musimy umieć i jak zdobyć tę wiedzę.

Przedstawione materiały mają za zadanie nauczyć nas języka SQL i wprowadzić w świat relacyjnych baz danych, tak, aby umożliwić zdobycie nam pracy jako analityk danych lub data scientist. Na tym etapie wiedza z kursów będzie wystarczająca. Gdy zaczniemy pracować, przekonamy się, że głównym problemem nie jest jednak bazowy syntaks SQL (chociaż jest on problemem jak się go nie zna), ale przede wszystkim logika biznesowa, testowanie poprawności zapytań czy radzenie sobie z wyjątkami.

Jako, że jak zostać analitykiem danych już wiecie (link poniżej!), wiecie także jak się nauczyć głównego narzędzia analityka – SQL, to kolejne artykuły z tego tematu będą się skupiały jak zostać dobrym analitykiem danych, m.in. jak pisać CTEs, jak pisać czysty SQL, jak testować poprawność danych czy jak używać GitHuba.

Zachęcam do śledzenia moich mediów społecznościowych, aby nie przegapić nowych postów:

Jeżeli chcecie by informowani o nowych postach oraz dostawać ekstra materiały dla subskrybentów, to zapraszam do zapisu do newslettera:

8 thoughts on “Jak się nauczyć SQL?”

  1. Pingback: Dlaczego Excel i VBA są słabe? – Crappy Data

  2. Pingback: Kurs SQL – i co dalej? CTE – Crappy Data

  3. Pingback: Jak zostać analitykiem danych? – Crappy Data

  4. Czy zaproponowane przez Ciebie kursy na Coursera są płatne? Dzięki za wpisy, precytałam wszystko i zachęciłaś mnie do szukania większej ilości informacji 🙂

    1. Dzięki wielkie! Polityka coursery jest taka, że udostępnia zazwyczaj wszystkie materiały z darmo, ale żeby dostać certyfikat (i czasami żeby robić zadania/sprawdzić wynik z testu) trzeba wykupić płatny dostęp. 1 tydzień jest całkowicie za darmo więc można sobie przetestować kurs.

  5. Pingback: Czysty kod SQL – Crappy Data

  6. Hej, dziękuję za ten wpis, bardzo pomocny 😊 mam pytanie, przerabiam kurs na Udemy i omawiane są obecnie procedury, funkcje, triggery i indeksy, kurs omawia je dość teoretycznie i pobieżnie, dlatego chciałam spytać czy zagłębiać się w temat bardziej? Jak często są one wykorzystane w pracy analityka danych? Czy jeśli jestem początkująca to lepiej na moim etapie skupiać się na rozbudowywaniu selectów?

    1. Cześć, dzięki wielkie za miłe słowa!

      Myślę, że taka pobieżna wiedza wystarczy na początek, ale też warto zapamiętać o czym mówią – czasami pytają na rekrutacjach o teoretyczne rzeczy, np. co to są indeksy.

      W pracy czasami się przydaje, ale to już się nauczysz w trakcie, na początek najważniejsza jest logika obliczeń SELECTów

Comments are closed.