Moduł 1 · Pierwsze zapytania: baza, SELECT i filtrowanie
Relacyjna baza danych i baza ćwiczeniowa Ziarnko
Po tej lekcji zrozumiesz, jak zbudowana jest relacyjna baza danych, i uruchomisz bazę ćwiczeniową, na której pracujesz przez cały kurs. Poznasz tabele, klucze i relacje na przykładzie sklepu internetowego z Gdańska.
Po co analitykowi SQL
SQL (Structured Query Language) to język, którym pytasz relacyjną bazę danych o dane. Analityk, który zna SQL, nie czeka na eksport z systemu sprzedażowego ani na arkusz przygotowany przez dział IT. Sam pobiera dokładnie te wiersze i kolumny, których potrzebuje, liczy sumy i średnie po stronie bazy, a wynik może odświeżyć jednym kliknięciem.
SQL jest opisany w międzynarodowej normie ISO/IEC 9075. Najnowsze jej wydanie to SQL:2023. Każdy system bazodanowy (PostgreSQL, MySQL, SQL Server, Oracle, SQLite) realizuje tę normę trochę inaczej i dodaje własne funkcje. W kursie używamy PostgreSQL, bo jest darmowy, popularny i bardzo bliski normie. Dokumentacja PostgreSQL podaje, że system spełnia co najmniej 170 ze 177 obowiązkowych funkcji poziomu Core SQL:2023. Najnowsza stabilna wersja to PostgreSQL 18 (stan na październik 2026), a wszystkie zapytania z kursu działają także w wersjach 16 i 17.
Większość tego, czego się tu nauczysz (SELECT, WHERE, GROUP BY, JOIN, CTE, funkcje okna), przeniesiesz bez zmian do innych baz. Różnią się głównie funkcje dat i tekstu. Gdy pokazujemy funkcję specyficzną dla PostgreSQL, piszemy to wprost.
Baza ćwiczeniowa: sklep Ziarnko
Przez cały kurs pracujesz na jednej bazie: fikcyjnym sklepie internetowym Ziarnko z Gdańska, który sprzedaje kawę, herbatę i akcesoria. Dane są wygenerowane, ale mają typowe cechy prawdziwych danych sprzedażowych: sezonowość, klientów kupujących raz i stałych, anulowane zamówienia, a nawet kilka błędów, które posprzątasz w module 6.
Baza ma pięć tabel:
klienci(800 wierszy): identyfikator, miasto, województwo, data rejestracji, kanał pozyskania, zgoda marketingowa;produkty(24 wiersze): nazwa, kategoria, cena brutto w zł, czy produkt jest w ofercie;zamowienia(1478 wierszy): kto, kiedy, status, kanał (www albo aplikacja), kod rabatowy, koszt dostawy;pozycje_zamowien(2903 wiersze): które produkty, w jakiej ilości i cenie trafiły do zamówienia;zdarzenia_www(6620 wierszy): kroki klientów na stronie we wrześniu 2026, od wizyty do zamówienia.
Baza ćwiczeniowa kursu, plik ziarnko.sql w materiałach do modułu 1.
Zwróć uwagę, że w tabeli klienci nie ma imion, nazwisk ani adresów e-mail. Analityk do większości analiz nie potrzebuje danych, które pozwalają wskazać osobę. RODO nazywa takie podejście minimalizacją danych (art. 5 ust. 1 lit. c), a zastąpienie danych osobowych identyfikatorem to pseudonimizacja (art. 4 pkt 5). W pracy pytaj więc najpierw, czy do raportu wystarczy klient_id.
Tabela, wiersz, kolumna i typ danych
Tabela przypomina arkusz w Excelu, ale ma ścisłe reguły. Każda kolumna ma nazwę i typ danych, więc w kolumnie cena_brutto typu numeric(10,2) nie zapiszesz tekstu „około 30 zł”. Każdy wiersz opisuje jedną rzecz: jednego klienta, jedno zamówienie, jedną pozycję. Kolejność wierszy w tabeli nie jest gwarantowana. Jeśli potrzebujesz porządku, prosisz o niego w zapytaniu (ORDER BY, lekcja 2).
Brak wartości oznacza się w SQL specjalnym znacznikiem NULL. W bazie Ziarnko 18 klientów nie podało miasta i ma tam NULL. To nie jest pusty tekst ani zero, tylko informacja „nie wiadomo”. Jak NULL zachowuje się w porównaniach, poznasz w lekcji 3.
Klucze i relacje
Klucz główny (PRIMARY KEY) jednoznacznie identyfikuje wiersz. W tabeli zamowienia to zamowienie_id, a baza nie pozwoli dodać drugiego zamówienia o tym samym numerze ani zostawić numeru pustego. W tabeli pozycje_zamowien kluczem jest para kolumn (zamowienie_id, produkt_id): ten sam produkt występuje w danym zamówieniu tylko raz, z ilością w kolumnie ilosc.
Klucz obcy (FOREIGN KEY) to kolumna, która wskazuje klucz główny innej tabeli. zamowienia.klient_id musi istnieć w klienci.klient_id, więc nie powstanie zamówienie „niczyje”. Tak zapisuje się relację jeden do wielu: jeden klient, wiele zamówień. Relacje są fundamentem złączeń (JOIN), które poznasz w module 3.
Programy graficzne, np. pgAdmin lub DBeaver (stan na październik 2026), też wykonają plik .sql.
Po wczytaniu pliku sprawdź, czy wszystko się zgadza:
SELECT count(*) FROM klienci; -- 800
SELECT count(*) FROM produkty; -- 24
SELECT count(*) FROM zamowienia; -- 1478Jeśli liczby się różnią, najczęściej plik wczytano dwa razy do niepustej bazy albo przerwano go w połowie. Plik zaczyna się od usunięcia tabel, więc wystarczy uruchomić go ponownie.
Najważniejsze w 3 punktach
- SQL to język opisany normą ISO/IEC 9075; w kursie używasz PostgreSQL 18 (zapytania działają też w 16 i 17).
- Tabela ma kolumny z typami, klucz główny identyfikuje wiersz, a klucz obcy zapisuje relację między tabelami.
- Do analiz zwykle wystarcza identyfikator klienta zamiast danych osobowych, zgodnie z zasadą minimalizacji z RODO.
Źródła
- PostgreSQL 18 Documentation, Appendix D. SQL Conformance (dostęp: październik 2026): https://www.postgresql.org/docs/18/features.html
- PostgreSQL: Versioning Policy, lista wspieranych wersji (dostęp: październik 2026): https://www.postgresql.org/support/versioning/
- PostgreSQL 18 Documentation, 5.5. Constraints (klucze główne i obce): https://www.postgresql.org/docs/18/ddl-constraints.html
- Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (RODO), art. 4 pkt 5 i art. 5 ust. 1 lit. c: https://eur-lex.europa.eu/legal-content/PL/TXT/?uri=CELEX:32016R0679