Jak się nauczyć SQL?

wpis dla osób szukających pracę jako analityk danych lub data scientist; aktualizowany w styczniu 2023

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ż znacznie 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 zysków i strat -> 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 w porównaniu z nimi dużo prostszy!

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 przede wszystkim czwarty aspekt (DQL), czyli wyciąganie z baz danych informacji za pomocą komendy SELECT. Reszta komend (CREATE, INSERT, ALTER itd.) jest używana głównie 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ę na analityka w pewnym korpo, gdzie było więcej pytań o nie-SELECTy niż SELECTy (czyli o komendy typu CREATE, ALTER, DROP itd.). Prawdopodobnie układała to osoba, która z analizą nie miała zbyt dużo wspólnego i po wpisaniu "SQL" w google wyskoczyły jej różne przypadki. Moim zdaniem nie świadczy to zbyt dobrze o firmie gdy proces rekrutacyjny nie sprawdza rzeczywistej pracy - była to dla mnie czerwona flaga. 

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 jak ja X lat temu myśląca, że aby napisać prostą query muszę wiedzieć wszystko na temat baz danych. Nie musicie. 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ć, 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
  • GROUP BY: COUNT, COUNT DISTINCT, MIN, MAX, SUM, AVG itd.
  • ORDER BY
  • LIMIT
  • HAVING: różnica między WHERE i HAVING
  • 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
  • funkcje związane z czasem: DATE_TRUNC, EXTRACT, INTERVAL

Pułapka SQL

Istnieje jeszcze jedna cecha SQL o której dotychczas nie wspomniałam. SQL ma prosty syntaks, przez co wyciągnięcie danych z bazy nie jest trudne. 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 spowoduje 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. 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.

Kursy

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 go pisać, pisać oraz – jeszcze raz – 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.

Jak zapoznacie się z podstawami SQL to zapraszam do kolejnych artykułów:

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

keywords: SQL, nauka SQL, język zapytań, bazy danych, analityk danych, jak zostać analitykiem danych, kursy SQL, jak się nauczyć SQL, SQL co oznacza, który SQL, SQL jak zacząć, jak, SQL jak się nauczyć, co to jest SQL, czym jest SQL, co znaczy SQL, kody SQL, bazy SQL, który SQL, czy SQL jest trudny, czy SQL jest darmowy, co SQL, co oznacza SQL, SQL co to znaczy, SQL co to za skrót, SQL co oznacza, SQL do czego, SQL do czego służy, SQL czy python, SQL czy warto, SQL blog, SQL czy trudny, SQL czy excel, SQL czy VBA, SQL vs excel, SQL dla pracujących w excelu, SQL dla początkujących

10 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

  7. Czy mogłabyś pokazac jak wyglądają typowe kwerendy w sql które pisze się jako analityk danych – jaki jest ich stopień skomplikowania?

Leave a Comment

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *