Kurs SQL dla programistów – Mistrzowska Szkoła Programowania
Grupa startuje [DATA] · zostało [X] z 15 miejsc · lista zamyka się [DATA]
Dla programistów, którzy piszą SQL „na wyczucie” i mają tego dość

W Twoim projekcie jest kod, którego nikt nie testuje i nikt nie czyta. A codziennie dotyka danych Twoich klientów.

To Twoje zapytania SQL. Poniżej pokażę Ci, dlaczego zapytanie, które „działa”, potrafi miesiącami liczyć złe liczby, i jak w 9 tygodni nauczyć się pisać SQL, za który możesz ręczyć.

Krystian Kapuściński · 7 lat jako Java Developer w Ericssonie i Sii · ponad 2 500 zajęć na żywo · ★★★★★ 5,0 z 21 opinii

Od: Krystian Kapuściński, Mistrzowska Szkoła Programowania, Łódź
Do: programisty, który chce wiedzieć, co naprawdę zwróci jego zapytanie
Temat: dlaczego „wykonało się bez błędu” to najniebezpieczniejsze zdanie w pracy z danymi

Cześć,

jest piątek, 16:40. Zamykasz laptopa. W głowie masz już weekend.

I wtedy przychodzi wiadomość z działu finansów:

wiadomość · 16:41„Liczby z Twojego raportu nie zgadzają się z fakturami. Sprzedaż za ostatnie trzy miesiące wychodzi zawyżona. Możesz to wyjaśnić przed poniedziałkowym spotkaniem?”

Otwierasz zapytanie. To samo, które napisałeś kwartał temu. Wykonuje się bez błędu i bez ostrzeżenia. Wyniki wyglądają rozsądnie.

A jednak kłamią. Od trzech miesięcy.

Jeśli kiedyś czułeś w żołądku to zimne „o nie”, wiesz, o czym mówię. Jeśli jeszcze nie, przeczytaj ten list do końca, bo to tylko kwestia czasu.

Tę historię słyszę w różnych wersjach na pierwszych rozmowach z programistami, którzy do mnie przychodzą. Zmieniają się szczegóły: raz to raport, raz migracja danych, raz zadanie na rozmowie rekrutacyjnej. Przebieg jest zawsze ten sam.

Co właściwie poszło nie tak?

Raport łączył zamówienia z ich pozycjami i z płatnościami. Wszystko w jednym zapytaniu, z SUM i GROUP BY na końcu.

Tylko że zamówienie z trzema pozycjami i dwiema płatnościami po złączeniu zamienia się w sześć wierszy. Każda płatność pojawia się trzy razy. I SUM grzecznie liczy ją trzy razy.

Składniowo wszystko było w porządku. Baza nie miała się do czego przyczepić. Wykonała dokładnie to, co jej kazałeś, tylko nie to, co miałeś na myśli.

I tu dochodzimy do sedna.

Twój kod ma testy, code review i CI. Twoje zapytania nie mają nic.

Pomyśl o tym przez chwilę.

Każda klasa, którą piszesz, przechodzi przez czyjeś oczy. Jest pull request, są komentarze, testy jednostkowe i pipeline, który nie przepuści czerwonego builda.

A zapytanie SQL? Wklejasz je do repozytorium albo do raportu. Uruchamiasz raz. Wykonało się? Idzie dalej.

Jedyny „test”, jaki przechodzi, to pytanie: czy baza zgłosiła błąd. A baza prawie nigdy go nie zgłasza. Spójrz na to:

klienci_bez_zamowien.sqlwykonano bez błędów
SELECT name
FROM customers
WHERE id NOT IN (
    SELECT customer_id FROM orders
);
→ 0 wierszy. Bez błędu i bez ostrzeżenia.

Niewinne zapytanie: „pokaż klientów, którzy nic nie zamówili”. Teraz wyobraź sobie, że w tabeli zamówień jest choćby jeden wiersz z pustym customer_id. Jeden.

Od tej chwili to zapytanie zawsze zwraca pusty wynik. Choć klientów bez zamówień może być setka. Nikt nie dostaje alertu. Kampania do „uśpionych klientów” po prostu nigdy nie wychodzi, a wszyscy myślą, że takich klientów nie ma.

Takich pułapek jest więcej, niż myślisz. I żadnej z nich nie wyłapie kompilator, linter ani zielony pasek w IDE.

Dlaczego nikt Ci o tym nie powiedział? (Spoiler: to nie Twoja wina)

Jeśli zastanawiasz się teraz, jak mogłeś tego nie wiedzieć, odpowiedź jest prosta: nikt Cię tego nie uczył. Uczono Cię składni.

Semestr baz danych sprawdzał, czy zapytanie jest poprawne składniowo. Kurs z nagrań pokazywał SELECT na tabeli z pięcioma czystymi wierszami. Platforma z ćwiczeniami nagradzała Cię zielonym ptaszkiem, kiedy wynik zgadzał się z jedną zapisaną odpowiedzią. A framework obiecywał, że SQL-a i tak nie będziesz musiał znać.

Każde z nich nauczyło Cię jednej rzeczy: jeśli się wykonało, to jest dobrze.

„Jeśli zapytanie zwraca wynik, to znaczy, że jest dobre.”Najdroższe kłamstwo w pracy z danymi

Zauważ, co łączy kursy, platformy i frameworki: żadne z nich nigdy nie zobaczy Twojego zapytania na prawdziwych danych. Żadne nie odbierze telefonu z działu finansów. Zielony ptaszek dobrze się sprzedaje, bo daje szybką satysfakcję i powód, żeby wrócić po kolejny poziom.

Telefon w piątek o 16:40 odbierasz Ty.

Kim jestem i dlaczego mówię Ci to wprost

Krystian Kapuściński przy laptopie

Nazywam się Krystian Kapuściński. Jestem inżynierem informatyki z Politechniki Łódzkiej. Przez 7 lat pracowałem jako Java Developer w Ericssonie i Sii, pisząc aplikacje, które działały na produkcji. A w takiej aplikacji prawie każda funkcja kończy się na bazie danych.

Od 6 lat uczę programowania. Mam za sobą ponad 2 500 zajęć na żywo i ponad 276 kursantów. Przeczytałem setki cudzych zapytań i wiem, które błędy wracają u prawie każdego.

Nie mówię Ci tego, żeby się pochwalić. Mówię, bo właśnie dlatego wiem jedno: różnica między programistą, który zgaduje, a takim, który wie, nie bierze się z talentu. Bierze się z nawyku.

Dwóch programistów. To samo zadanie. Zupełnie inny piątek.

Obaj dostają do napisania ten sam raport. Obaj znają składnię. Zobacz, co robią.

Programista A

  1. Pisze zapytanie.
  2. Uruchamia je.
  3. Sprawdza, czy nie ma błędu.
  4. Wysyła raport.

W piątek o 16:40 odbiera wiadomość z finansów.

Programista B

  1. Pisze zapytanie.
  2. Pyta: co tu zrobi NULL?
  3. Pyta: czy to złączenie nie zwielokrotni wierszy?
  4. Pyta: czy baza ma jak to szybko znaleźć?
  5. Dopiero wtedy wysyła raport.

W piątek o 16:40 jest już w drodze do domu.

Programista B nie jest mądrzejszy. On po prostu przez wiele tygodni pisał zapytania, które ktoś czytał i odsyłał z komentarzem: „tu zgubisz wiersze”, „tu policzysz podwójnie”, „tu przyda się indeks”. Aż te trzy pytania zaczął zadawać sobie sam, odruchowo.

Tego nawyku nie da się obejrzeć na nagraniu. Trzeba go wytrenować: piszesz, ktoś czyta, wskazuje błąd, poprawiasz. Tydzień po tygodniu.

I dokładnie po to stworzyłem ten kurs.

Przedstawiam

SQL dla programistów: 9 tygodni, w których każde Twoje zapytanie ktoś przeczyta

W pełnym programie Junior Java Developer SQL to dwa moduły z dziesięciu miesięcy. Coraz częściej odzywali się do mnie programiści, którzy reszty nie potrzebują. Potrzebują porządnego SQL-a. Więc te dwa moduły zamieniłem w osobny kurs na żywo.

Kolejność 18 tematów nie wzięła się z podręcznika. Dochodziłem do niej przez 6 lat i ponad 2 500 zajęć, sprawdzając, w którym miejscu ludzie się gubią. Możesz dojść do niej sam, na kolejnych raportach z błędnymi liczbami. Albo w 9 tygodni, z kimś, kto pokaże Ci pułapki, zanim w nie wpadniesz.

Zajęcia 1Nowy temat. Zapytania piszemy razem na żywo.
ZadaniePiszesz sam, bez odpowiedzi na dole strony.
KomentarzCzytam Twoje zapytania i wskazuję, gdzie wynik się rozjeżdża.
Zajęcia 2Zaczynamy od błędów grupy, potem kolejny temat.

36 godzin zajęć na żywo · 18 tematów · 2 wieczory w tygodniu · najwyżej 15 osób w grupie · nagrania wszystkich zajęć

Oto czego się nauczysz (i co Ci to da)

  • Dlaczego NOT IN potrafi zwrócić zero wierszy, choć powinien setkę, i jaką zmianą to naprawisz raz na zawsze.podzapytania
  • Jedno pytanie, które zadajesz przed każdym SUM i COUNT, żeby złączenie nie policzyło Ci płatności trzy razy.JOIN · GROUP BY, HAVING
  • Kiedy warunek należy do WHERE, a kiedy do HAVING, i co ta różnica zmienia w wyniku oraz w szybkości zapytania.WHERE, LIKE, ORDER BY · GROUP BY, HAVING
  • Jak sprawić, żeby złe dane w ogóle nie miały jak trafić do tabeli, zamiast łapać je potem w raportach.ograniczenia: NOT NULL, UNIQUE, klucze
  • Jak przenieść logikę warunkową z pętli w aplikacji do jednego zapytania, które robi to samo szybciej i czytelniej.CASE WHEN
  • Dlaczego jedno zapytanie liczy się ułamek sekundy, a prawie identyczne minutę, i kiedy indeks pomaga, a kiedy tylko zajmuje miejsce.indeksy
  • Co się dzieje z danymi, gdy aplikacja padnie w połowie zapisu, i jak transakcje chronią Cię przed „połową przelewu”.transakcje · ACID
  • Kto może czytać, a kto zmieniać dane, ustawione świadomie, a nie metodą „daj wszystkim wszystko”.DCL: GRANT, REVOKE, DENY
  • Kiedy logika powinna żyć w bazie, a kiedy w aplikacji, żebyś przestał zgadywać przy każdej procedurze i wyzwalaczu.procedury · funkcje · wyzwalacze
  • I fundament, na którym stoi cała reszta: jak działa baza, jakie typy danych wybrać i jak świadomie tworzyć i zmieniać tabele oraz dane.podstawy baz · typy danych · DDL · DML · podstawowe zapytania

Nie musisz wierzyć mi na słowo

5,0 ★średnia z 21 opinii na e-korepetycje.net
276+osób, które uczyłem
2 500+zajęć na żywo
6 latuczenia programowania

Poniżej prawdziwe opinie z Facebooka szkoły i z mojego profilu na e-korepetycje.net, bez żadnych zmian. Dotyczą moich zajęć z programowania, głównie z Javy. Kurs SQL prowadzę dokładnie w ten sam sposób.

★★★★★

„Pokazał mi dużo rzeczy, na które wcześniej przy pisaniu kodu nie zwracałem uwagi, i je wytłumaczył.”

Zrzut ekranu: opinia Kuby na e-korepetycje.netKuba · e-korepetycje.net, 31 października 2020
★★★★★

„Nauczyciel tłumaczył wszystko krok po kroku, a trudniejsze zagadnienia przedstawiał prosto i na przykładach.”

Zrzut ekranu: polecenie Filipa Lesia na FacebookuFilip Leś · Facebook, styczeń 2026
★★★★★

„Dzięki niemu zdałam poprawkę na studiach i nabrałam pewności w programowaniu.”

Zrzut ekranu: opinia Julii na e-korepetycje.netJulia · e-korepetycje.net, 17 lutego 2025

Wyobraź sobie trzy sceny z niedalekiej przyszłości

1

Code review

Kolega wrzuca pull request z zapytaniem do raportu. Rzucasz okiem i od razu widzisz: złączenie z dwiema tabelami podrzędnymi, a potem SUM. Zostawiasz jeden komentarz. Oszczędzasz zespołowi trzech miesięcy złych liczb.

2

Rozmowa rekrutacyjna

„Proszę napisać zapytanie, które zwróci klientów bez zamówień w tym roku.” Kiedyś byłoby to dziesięć minut ciszy. Teraz piszesz spokojnie i od razu dodajesz, jak Twoje zapytanie poradzi sobie z NULL-em. Widzisz, że rekruter podnosi wzrok znad kartki.

3

Kolejny piątek, 16:40

Przychodzi pytanie z finansów o liczby w raporcie. Otwierasz zapytanie i wiesz, gdzie spojrzeć: na złączenia, na NULL-e, na grupowanie. Po dziesięciu minutach odpisujesz, że liczby są dobre. I wiesz dlaczego. Zamykasz laptopa i idziesz w weekend.

To nie jest obietnica, że nigdy się nie pomylisz. To obietnica, że przestaniesz zgadywać. A to zmienia wszystko: jak piszesz, jak rozmawiasz z zespołem i jak śpisz w niedzielę wieczorem.

Oto wszystko, co dostajesz

36 godzin zajęć na żywo z prowadzącym, 18 tematów od podstaw do procedur i wyzwalaczy4 320 zł
Komentarz do każdego oddanego zadania, z konkretnymi linijkami do poprawyw cenie
Nagrania wszystkich zajęć przez cały kursw cenie
Certyfikat ukończeniaw cenie
Bonus 1: e-book „Junior Java. Twój start w karierze”: 100 pytań z rozmów rekrutacyjnych, mapa kompetencji i 10 pomysłów na projekty49 zł
Bonus 2: 1 600 zł mniej za pełny program Junior Java Developer, jeśli dołączysz do niego w ciągu 30 dni od końca kursu SQL1 600 zł
Łączna wartość5 969 zł

Skąd 4 320 zł: tyle kosztowałyby te same 36 godzin jako moje lekcje indywidualne (36 × 120 zł).

Ile kosztuje pewność, że Twoje liczby się zgadzają?

Gdybyś kupił te same godziny jako lekcje indywidualne, zapłaciłbyś 4 320 zł. I to bez komentarzy do zadań, bez grupy i bez nagrań.

W kursie płacisz 1 600 zł. To około 44 zł za godzinę zajęć na żywo, z komentarzem do każdego zadania w cenie.

A teraz porównaj to z kosztem jednego raportu, który przez trzy miesiące pokazywał złe liczby. Albo jednej rozmowy rekrutacyjnej oblanej na zadaniu z SQL. Albo jednej nocy spędzonej na szukaniu, gdzie migracja zgubiła wiersze.

cena kursu
400 zł / mies.

przez 4 miesiące, razem 1 600 zł

albo całość od razu

Tak, chcę pisać SQL, za który mogę ręczyć

Jedna uczciwa uwaga: nie zobaczysz tu przekreślonej ceny ani promocji, która „kończy się o północy”. Cena jest jedna dla wszystkich. Ograniczenie jest inne i prawdziwe, piszę o nim niżej.

Moja gwarancja: pierwsze 14 dni na moje ryzyko

Zapisz się. Przez dwa tygodnie chodź na zajęcia, oddawaj zadania i czytaj moje komentarze. Jeśli uznasz, że to nie jest Twój sposób nauki, z jakiegokolwiek powodu, napisz jedną wiadomość. Pierwsza wpłata wróci na Twoje konto.

Bez tłumaczenia się i bez „ankiet rezygnacyjnych”. Całe ryzyko jest po mojej stronie.

Dlaczego miejsc jest tylko 15

Bo każde zadanie, które oddasz, czytam osobiście. Piętnaście osób to tyle, ile jestem w stanie co tydzień rzetelnie przeczytać i skomentować. Szesnasta osoba dostałaby gorsze komentarze, a na to się nie zgodzę.

Grupa startuje [DATA]. Lista zamyka się [DATA]. Wolnych miejsc zostało [X]. Termin kolejnej grupy nie jest jeszcze ustalony.

Masz teraz dwie drogi

Droga pierwsza

Zostajesz przy tym, co jest: framework, ściąga i nadzieja, że raport liczy dobrze. Może się uda. Może przez długi czas nic się nie stanie. Aż któregoś piątku o 16:40 przyjdzie wiadomość.

Droga druga

Za 9 tygodni masz za sobą 18 tematów i kilkadziesiąt zapytań, które napisałeś sam i które ktoś przeczytał. Zadajesz sobie trzy pytania odruchowo. I wiesz, co zwróci Twoje zapytanie, zanim je uruchomisz.

Nie będę Cię naciskać. Obie decyzje są w porządku, byle była Twoja. Jeśli jednak czytasz ten list aż tutaj, chyba wiesz, która jest dla Ciebie.

Dołączam do kursu SQL · 400 zł/mies.

albo 1 600 zł jednorazowo · 14 dni na zmianę zdania

Co się stanie po kliknięciu

1
Płacisz pierwszą ratę albo całość. Na maila od razu przychodzi potwierdzenie i e-book.
2
Najpóźniej następnego dnia roboczego dostajesz plan zajęć, link do spotkań i zaproszenie do grupy.
3
Jeśli nie masz jeszcze zainstalowanej bazy, ustawiamy ją razem przed pierwszymi zajęciami. Pierwsze zapytanie piszesz już na pierwszych zajęciach.

Do zobaczenia na pierwszych zajęciach,

Krystian

Krystian Kapuściński · Mistrzowska Szkoła Programowania

P.S. Jeśli przewinąłeś od razu na dół, oto skrót: 9 tygodni SQL-a na żywo, 18 tematów od podstaw do transakcji, indeksów i procedur. Każde Twoje zapytanie przeczytam i skomentuję. 400 zł miesięcznie przez 4 miesiące, 14 dni gwarancji, najwyżej 15 osób w grupie.

P.P.S. Pamiętasz zapytanie z NOT IN, które zwraca zero wierszy? Teraz, kiedy o nim wiesz, zajrzyj do swojego projektu i poszukaj takich zapytań. Jeśli znajdziesz choć jedno, wiesz już, po co jest ten kurs.

Pytania, które pewnie teraz zadajesz

„Programuję w Pythonie, PHP albo JavaScripcie. To kurs dla mnie?”

Tak. SQL jest ten sam bez względu na język, w którym piszesz aplikację. Kurs nie wymaga znajomości Javy.

„Znam podstawy SQL. Nie będę się nudzić?”

Pierwsze tematy idą szybko, ale już w nich zadania dotykają pułapek, na których potykają się osoby piszące SQL od lat: NULL w warunkach, duplikaty po złączeniu, różnica między WHERE a HAVING. Druga połowa kursu to w całości materiał zaawansowany.

„Nie mam czasu na kolejny kurs.”

Dwa wieczory w tygodniu, po około 2 godziny zajęć, plus 2–3 godziny na zadania. Dni ustalamy wspólnie z grupą. Jeśli nie zdążysz na zajęcia, zostaje nagranie, a zadanie i tak dostaje komentarz.

„Na jakiej bazie danych pracujemy?”

[SYSTEM BAZY DANYCH]. Składnia, której się uczysz, przenosi się na inne popularne bazy, a różnice omawiamy na bieżąco.

„Czemu nie nauczyć się z YouTube’a za darmo?”

Składni możesz. Z YouTube’a nauczysz się, jak napisać zapytanie. Nie dowiesz się, że Twoje konkretne zapytanie gubi wiersze, bo nikt go nie przeczyta. Ten kurs jest właśnie o tym drugim.

Wolisz najpierw porozmawiać?

Zostaw numer, a oddzwonię. Opowiesz, jak dziś pracujesz z bazą danych, a ja szczerze powiem, czy ten kurs ma dla Ciebie sens. Jeśli nie ma, też to usłyszysz.

Albo zadzwoń sam: +48 609 336 448

Dzwonię w ciągu jednego dnia roboczego.

Mistrzowska Szkoła Programowania · Łódź, ul. Miernicza 6 · NIP 7732494488