Przejdź do treści
Programujmy

Kurs SQL od podstaw, pierwsze zapytania na prawdziwej tabeli

Kurs SQL od podstaw najlepiej zacząć od jednej tabeli, którą da się zrozumieć w minutę, czyli od zamówień w sklepie. Ten wpis prowadzi przez cztery polecenia, SELECT, WHERE, ORDER BY i GROUP BY, i pokazuje, jak z każdego z nich zrobić pierwsze realne pytanie do danych.

Tabela, na której pracujemy

Wyobraź sobie tabelę o nazwie zamowienia. Każdy wiersz to jedno zamówienie, a kolumny opisują, co o nim wiemy: id (numer zamówienia), klient (nazwa klienta), miasto, kwota (wartość zamówienia w złotych), status (na przykład nowe, oplacone, wyslane) oraz data_zamowienia. Taki układ spotkasz w niemal każdym sklepie internetowym, więc umiejętności z tego wpisu przydadzą się w prawdziwej pracy.

Warto od razu zrozumieć ideę: SQL nie mówi komputerowi, jak ma coś znaleźć, tylko opisuje, co chcemy dostać. Piszesz, jakie kolumny, z jakiej tabeli i według jakiego warunku, a baza sama wybiera sposób. Dzięki temu składnia jest krótka, a pierwsze zapytania da się napisać po kilkunastu minutach.

SELECT, czyli pytasz o kolumny

SELECT wskazuje, które kolumny chcesz zobaczyć, a FROM mówi, z której tabeli. Zacznij od najprostszego pytania, a potem zawężaj:

  • `SELECT * FROM zamowienia;` pokazuje wszystkie kolumny i wszystkie wiersze.
  • `SELECT klient, kwota FROM zamowienia;` pokazuje tylko dwie kolumny.
  • `SELECT DISTINCT miasto FROM zamowienia;` pokazuje każde miasto raz, bez powtórzeń.
  • `SELECT COUNT(*) FROM zamowienia;` zwraca liczbę zamówień.

Gwiazdka jest wygodna przy poznawaniu tabeli, ale w pracy lepiej wypisywać kolumny z nazwy. Zapytanie jest wtedy czytelniejsze i nie ciągnie zbędnych danych. Zwróć uwagę na średnik na końcu: kończy polecenie i pozwala napisać kilka zapytań po kolei.

WHERE, czyli filtrujesz wiersze

WHERE zawęża wyniki do wierszy spełniających warunek. Dopisujesz go po FROM. Kilka najczęściej używanych form:

  • `SELECT * FROM zamowienia WHERE miasto = 'Poznań';` zwraca zamówienia z jednego miasta.
  • `SELECT * FROM zamowienia WHERE kwota > 500;` zwraca zamówienia powyżej 500 zł.
  • `SELECT * FROM zamowienia WHERE status = 'nowe' AND kwota >= 200;` łączy dwa warunki.
  • `SELECT * FROM zamowienia WHERE miasto IN ('Poznań', 'Gdańsk');` sprawdza kilka wartości naraz.
  • `SELECT * FROM zamowienia WHERE klient LIKE 'Kow%';` znajduje klientów, których nazwa zaczyna się od Kow.

Tekst zapisujesz w pojedynczych cudzysłowach, liczby bez nich. Częsty błąd początkujących to użycie jednego znaku równości tam, gdzie chcieli porównać zakres, albo zapomnienie nawiasów przy łączeniu AND z OR. Gdy łączysz warunki, nawiasy pokazują, w jakiej kolejności mają być oceniane, więc stawiaj je zawsze, kiedy masz wątpliwość.

ORDER BY, czyli porządkujesz wynik

Bez ORDER BY baza nie obiecuje żadnej kolejności wierszy. Gdy kolejność ma znaczenie, ustaw ją jawnie:

  • `SELECT * FROM zamowienia ORDER BY kwota DESC;` zaczyna od największych zamówień.
  • `SELECT * FROM zamowienia ORDER BY data_zamowienia ASC;` zaczyna od najstarszych.
  • `SELECT * FROM zamowienia ORDER BY miasto, kwota DESC;` sortuje najpierw po mieście, a w obrębie miasta od największej kwoty.
  • `SELECT * FROM zamowienia ORDER BY kwota DESC LIMIT 5;` zwraca pięć największych zamówień.

DESC oznacza malejąco, ASC rosnąco, a domyślnie jest rosnąco. LIMIT ogranicza liczbę wierszy, co przydaje się, gdy interesuje Cię ranking. Uwaga: zapis limitu różni się nieco między systemami baz danych, więc gdy ćwiczysz na innej bazie, sprawdź jej dokumentację.

GROUP BY, czyli liczysz podsumowania

Tu SQL pokazuje, dlaczego jest tak użyteczny w raportach. GROUP BY zbiera wiersze o tej samej wartości w grupy, a funkcje takie jak COUNT, SUM i AVG liczą coś dla każdej grupy:

  • `SELECT miasto, COUNT(*) FROM zamowienia GROUP BY miasto;` podaje liczbę zamówień w każdym mieście.
  • `SELECT miasto, SUM(kwota) FROM zamowienia GROUP BY miasto;` podaje łączną sprzedaż na miasto.
  • `SELECT status, AVG(kwota) FROM zamowienia GROUP BY status;` podaje średnią wartość zamówienia według statusu.
  • `SELECT miasto, SUM(kwota) FROM zamowienia GROUP BY miasto HAVING SUM(kwota) > 5000;` zostawia tylko miasta, w których sprzedaż przekroczyła 5000 zł.
  • `SELECT miasto, SUM(kwota) AS sprzedaz FROM zamowienia GROUP BY miasto ORDER BY sprzedaz DESC;` buduje ranking miast.

Zasada, którą warto zapamiętać: kolumna, której nie ujęto w funkcji, musi występować w GROUP BY. HAVING działa jak WHERE, ale po zgrupowaniu, więc pozwala filtrować po wyniku funkcji. Alias po AS nadaje czytelną nazwę kolumnie wyniku.

Jak uczyć się zapytań, żeby je zapamiętać

Zapytań nie uczysz się z czytania, tylko z pisania. Weź każde z powyższych, zmień jedną rzecz i przewiduj wynik przed uruchomieniem. Jeśli wynik jest inny, niż się spodziewałeś, to najcenniejszy moment nauki. Zapisuj własne pytania o dane i próbuj na nie odpowiadać: które miasto sprzedało najwięcej, ilu klientów złożyło więcej niż jedno zamówienie, jaka jest średnia wartość zamówienia w ostatnim miesiącu.

W przeglądarce możesz uruchamiać zapytania na tabeli i od razu sprawdzać, czy wynik zgadza się z oczekiwaniem. Mentor AI podpowiada, gdzie jest błąd, bez wypisywania gotowej odpowiedzi. Pełny program znajdziesz na stronie szkolenie sql, a jeśli SQL ma służyć do raportów, zobacz kurs SQL dla analityków, a o roli SQL w wyborze pierwszego języka piszemy we wpisie języki programowania.

Co dalej

Po opanowaniu tych czterech poleceń następny krok to łączenie tabel, czyli JOIN, oraz podzapytania. Mając zamówienia i osobną tabelę klientów, odpowiesz na pytania o to, kto i co kupuje. Do egzaminów zawodowych SQL także jest ważny, o czym przeczytasz we wpisie egzamin INF.03. Dobry fundament budują też podstawy programowania.

Jeśli chcesz ułożyć tygodnie nauki pod swój czas i cel, wypełnij krótki formularz. Dostaniesz plan i pierwsze zapytanie do uruchomienia od razu w przeglądarce. Więcej wpisów znajdziesz na blog o nauce programowania.