Rozwiązanie Zadania Domowego (z Lekcji 8)
Zadanie 1: Kategoryzacja klientów użyciem CASE
Zadanie: Napisz zapytanie, które wyświetli listę klientów (imie, nazwisko, miasto). Dodaj nową kolumnę Region. Jeśli miasto to 'Warszawa’, 'Kraków’ lub 'Gdańsk’, Region ma mieć wartość 'Metropolia’. W przeciwnym wypadku Region ma mieć wartość 'Inne’.
Rozwiązanie:
Trzeba było użyć operator IN wewnątrz CASE, co jest szybsze niż wielokrotne OR.
SQL
SELECT
imie,
nazwisko,
miasto,
CASE
WHEN miasto IN ('Warszawa', 'Kraków', 'Gdańsk') THEN 'Metropolia'
ELSE 'Inne'
END AS Region
FROM klienci;

Zadanie 2: Liczenie klientów w nowo utworzonych regionach (CASE + GROUP BY)
Zadanie: Używając zapytania z zadania 1 (skopiuj logikę CASE), policz (COUNT), ilu klientów mieszka w 'Metropolii’, a ilu w 'Innych’ regionach.
Rozwiązanie:
W tym zadaniu używamy całego wyrażenia CASE w klauzuli GROUP BY (a następnie ponownie w SELECT), aby pogrupować klientów na podstawie nowo zdefiniowanej kolumny.
SQL
SELECT
CASE
WHEN miasto IN ('Warszawa', 'Kraków', 'Gdańsk') THEN 'Metropolia'
ELSE 'Inne'
END AS Region,
COUNT(*) AS liczba_klientow
FROM klienci
GROUP BY Region;
(Uwaga: W większości silników SQL, jeśli nadaliśmy alias (AS Region) w SELECT, możemy go użyć w GROUP BY).

Zadanie 3: Trzech klientów, którzy wydali najwięcej (CTE)
Zadanie: Pokaż imię, nazwisko i łączną wartość zamówień tylko dla 3 klientów, którzy wydali najwięcej.
Rozwiązanie:
To było zadanie testujące zrozumienie CTE jako „wirtualnej tabeli” i sposobu łączenia kroków analitycznych.
SQL
WITH NajlepsiKlienci AS (
-- Krok 1: W CTE liczymy sumy, sortujemy i bierzemy top 3 ID
SELECT
klient_id,
SUM(wartosc_calkowita) AS laczna_wartosc
FROM zamowienia
GROUP BY klient_id
ORDER BY laczna_wartosc DESC
LIMIT 3
)
-- Krok 2: Odpytujemy CTE (jak zwykłą tabelę) i dołączamy imię i nazwisko
SELECT
k.imie,
k.nazwisko,
n.laczna_wartosc
FROM NajlepsiKlienci n
JOIN klienci k ON n.klient_id = k.klient_id
ORDER BY n.laczna_wartosc DESC;
To jest przykład na to, jak CTE pomaga uporządkować skomplikowany kod, zamieniając wieloetapowy problem w proste query.

Wstęp
Do tej pory w naszym kursie byliśmy jak klienci w bibliotece, mogliśmy przeglądać książki, układać je na stosy, liczyć i analizować. Ale nie mogliśmy napisać własnej książki ani zbudować nowej półki.
Dziś to się zmienia. Otrzymujesz klucze do magazynu.
Nauczysz się, jak:
- Tworzyć nowe tabele (budować strukturę).
- Wstawiać nowe dane (zapełniać strukturę).
- Aktualizować dane (poprawiać błędy lub zmieniać ceny).
- Usuwać dane (sprzątać).
W IT nazywamy to skrótem CRUD (Create, Read, Update, Delete). „Read” już znasz doskonale. Czas na pozostałe trzy litery!
Krok 1: CREATE – Budujemy nową tabelę (DDL)
Wyobraź sobie, że nasz sklep chce wprowadzić system promocji sezonowych. Nie mamy na to miejsca w obecnej bazie. Musimy stworzyć nową tabelę promocje.
Używamy do tego polecenia CREATE TABLE.
Składnia:
SQL
CREATE TABLE nazwa_tabeli (
nazwa_kolumny1 TYP_DANYCH OGRANICZENIA,
nazwa_kolumny2 TYP_DANYCH OGRANICZENIA,
...
);
W SQLite (którego używamy) najważniejsze typy danych to:
INTEGER– liczby całkowite (np. ID, ilość).TEXT– napisy (imiona, nazwy).REAL– liczby zmiennoprzecinkowe (ceny).
Zróbmy to w DBeaverze: Otwórz nowy skrypt SQL i wklej:
SQL
CREATE TABLE promocje (
id INTEGER PRIMARY KEY AUTOINCREMENT, -- Unikalny numer, sam się będzie nadawał
nazwa TEXT NOT NULL, -- Nazwa promocji (nie może być pusta)
rabat_procent INTEGER DEFAULT 0, -- Wysokość rabatu (domyślnie 0)
data_startu TEXT -- Data (w SQLite trzymamy daty jako tekst)
);
Kliknij „Wykonaj skrypt” (Alt+X). Następnie odśwież listę tabel po lewej stronie (F5). Powinna pojawić się nowa tabela promocje! Jest pusta, ale istnieje.

Aby zobaczyć nową tabelę w nawigatorze musisz kliknac prawym klawiszem na tables i wybrać refresh:


Krok 2: INSERT – Dodajemy dane (DML)
Mamy puste półki. Czas wstawić tam towary. Służy do tego INSERT INTO.
Piszemy w podstawowej wersji:
insert into NAZWA_TABELI (lista, kolumn, które, chcemy, dodać, oddzielone, przecinkiem)
values (wartości, dodane, do, poszczegolnych, kolumn);
Scenariusz: Dodajmy promocję „Black Friday” z rabatem 20% oraz „Wiosenne Wietrzenie” z rabatem 10% i specjalny rabat na dzień programisty..
SQL
-- Wersja 1: Podajemy kolumny, które chcemy wypełnić
INSERT INTO promocje (nazwa, rabat_procent, data_startu)
VALUES ('Black Friday', 20, '2025-11-29');
-- Wersja 2: Dodajemy wiele rekordów naraz (szybciej!)
INSERT INTO promocje (nazwa, rabat_procent, data_startu) VALUES
('Wiosenne Wietrzenie', 10, '2025-03-21'),
('Dzień Programisty', 15, '2025-09-13');

Sprawdźmy tabelę:
SQL
SELECT * FROM promocje;

Krok 3: UPDATE – Zmieniamy dane (i jak nie zniszczyć bazy)
To jest moment, w którym musisz się skupić. UPDATE pozwala modyfikować istniejące rekordy.
Scenariusz: Szef dzwoni i mówi: „Słuchaj, Wiosenne Wietrzenie ma mieć jednak 12% rabatu, a nie 10%!”.
Używamy polecenia UPDATE ... SET ... WHERE ....

ZŁOTA ZASADA BEZPIECZEŃSTWA DANYCH: Zanim uruchomisz
UPDATE, ZAWSZE najpierw napiszSELECTz tym samym warunkiemWHERE, żeby upewnić się, co zmieniasz.
Sprawdź SQL: SELECT * FROM promocje WHERE nazwa = 'Wiosenne Wietrzenie'; (Czy to na pewno ten rekord? Tak.)

Zmień DANE: UPDATE promocje SET rabat_procent = 12 WHERE nazwa = 'Wiosenne Wietrzenie';

Sprawdź wynik: SELECT * FROM promocje WHERE nazwa = 'Wiosenne Wietrzenie';

Co by się stało bez WHERE? Gdybyś napisał samo UPDATE promocje SET rabat_procent = 12;
WSZYSTKIE promocje w bazie zmieniłyby się na 12%. Black Friday też. To jeden z najczęstszych błędów początkujących (i zaawansowanych przed kawą 😉 ).
Krok 4: DELETE – Usuwamy dane (Ostrożnie!)
Ostatni element układanki. Promocja się skończyła albo była błędna. Usuwamy ją.
Scenariusz: Promocja „Dzień Programisty” została odwołana.
Podobnie jak przy UPDATE – klauzula WHERE jest święta. Bez niej wyczyścisz całą tabelę!
Sprawdź: SELECT * FROM promocje WHERE nazwa = 'Dzień Programisty';

Usuń: DELETE FROM promocje WHERE nazwa = 'Dzień Programisty';

Sprawdźmy wynik końcowy:
SQL
SELECT * FROM promocje;

Powinieneś widzieć tylko Black Friday i zaktualizowane Wiosenne Wietrzenie.
Zadanie Domowe (Lekcja 9)
Czas pobrudzić sobie ręce i zbudować coś własnego! Wykonaj te kroki po kolei:
- Stwórz tabelę
recenzjez kolumnami:id(liczba, klucz główny, autoincrement),autor(tekst),ocena(liczba całkowita),tresc(tekst).
- Wstaw do niej 3 wymyślone recenzje książek (np. „Super książka”, ocena 5; „Nuda”, ocena 2).
- Zaktualizuj jedną z recenzji: Zmień treść recenzji, gdzie ocena wynosiła 2, na „Jednak po drugim czytaniu jest OK” i podnieś ocenę na 4. Pamiętaj o
WHERE! - Usuń recenzję, która ma najwyższą ocenę (załóżmy, że była spamem).
Powodzenia! W następnej lekcji będziemy kontynuować temat i powiążemy dziś stworzone tabele na lekcji i w zadaniu domowym z reszta systemu, aktualizując nasze tabele przez ALTER TABLE i dodamy klucze obce.
Dodatkowo zajmiemy się sprzątaniem danych i funkcjami tekstowymi, bo w prawdziwym świecie dane rzadko są czyste i ładne!

0 komentarzy