🎯 Cele lekcji

🔍

1. Podstawowa składnia SELECT

-- Wybór konkretnych kolumn
SELECT nazwa, cena, kategoria
FROM produkty;

-- Wybór wszystkich kolumn (gwiazdka)
SELECT *
FROM produkty;

-- Aliasy kolumn (AS) — zmiana nazwy w wynikach
SELECT nazwa AS Produkt,
       cena AS 'Cena PLN',
       ilosc AS stan_magazynowy
FROM produkty;

-- Wyrażenia w SELECT
SELECT nazwa,
       cena,
       cena * 1.23 AS cena_brutto,
       cena * ilosc AS wartosc_magazynu
FROM produkty;
Tabela przykładowa produkty: id INT PK, nazwa VARCHAR(200), cena DECIMAL(10,2), kategoria VARCHAR(100), ilosc INT

DISTINCT — unikalne wartości:

-- Wszystkie unikalne kategorie (bez powtórzeń)
SELECT DISTINCT kategoria
FROM produkty;

-- DISTINCT na kilku kolumnach — unikalne kombinacje
SELECT DISTINCT kategoria, ROUND(cena, 0) AS cena_zaokr
FROM produkty;
SELECT * jest wygodne w eksploracji, ale w kodzie aplikacji zawsze wymieniaj kolumny jawnie — oszczędza transfer danych i chroni przed problemami przy zmianach struktury tabeli.
⚙️

2. Klauzula WHERE — operatory porównania

OperatorOpisPrzykład
=RównośćWHERE kategoria = 'Elektronika'
<> lub !=RóżnośćWHERE kategoria <> 'Sport'
<, >Mniejszy/większyWHERE cena > 100
<=, >=Mniejszy/większy lub równyWHERE cena <= 500
BETWEEN a AND bZakres (włącznie z granicami)WHERE cena BETWEEN 10 AND 50
IN (lista)Wartość z listyWHERE kategoria IN ('Sport','Dom')
LIKE wzorzecDopasowanie wzorca tekstowegoWHERE nazwa LIKE 'Lap%'
IS NULLWartość pusta (NULL)WHERE opis IS NULL
IS NOT NULLWartość niepustaWHERE email IS NOT NULL
-- Przykłady użycia WHERE
SELECT * FROM produkty WHERE cena BETWEEN 10 AND 50;
SELECT * FROM produkty WHERE kategoria IN ('Elektronika', 'Sport');
SELECT * FROM produkty WHERE nazwa LIKE '%laptop%';
SELECT * FROM produkty WHERE ilosc IS NULL;

-- Łączenie warunków AND / OR / NOT
SELECT nazwa, cena, kategoria
FROM produkty
WHERE kategoria = 'Elektronika'
  AND cena BETWEEN 100 AND 2000
  AND ilosc > 0;
🌀

3. Wzorce LIKE i wartości NULL

Znaki specjalne w LIKE:

ZnakZnaczeniePrzykładPasuje do
%Dowolna liczba dowolnych znaków (0 lub więcej)LIKE 'Lap%'Laptop, Lapbook, Lap
%Dowolna liczba znaków w środkuLIKE '%USB%'Kabel USB, USB-C Hub
_Dokładnie jeden dowolny znakLIKE 'A_B'AAB, AXB, ale NIE AB
-- LIKE — przykłady wzorców
SELECT * FROM produkty WHERE nazwa LIKE '%kabel%';   -- zawiera 'kabel'
SELECT * FROM produkty WHERE nazwa LIKE 'A%';         -- zaczyna się na A
SELECT * FROM produkty WHERE nazwa LIKE '%i';          -- kończy się na i
SELECT * FROM klienci  WHERE telefon LIKE '48_________'; -- 9 cyfr po 48

-- NULL — wartości puste (UWAGA: NULL != NULL!)
SELECT * FROM produkty WHERE opis IS NULL;        -- brak opisu
SELECT * FROM produkty WHERE opis IS NOT NULL;   -- mają opis

-- BŁĄD: nie wolno porównywać NULL operatorem =
SELECT * FROM produkty WHERE opis = NULL;  -- ❌ zawsze zwróci 0 wierszy!
Uwaga na NULL! Nigdy nie pisz WHERE kolumna = NULL — zawsze używaj IS NULL lub IS NOT NULL. NULL to brak wartości, nie jest równy niczemu — nawet samemu sobie.
✏️

Zadania interaktywne

Zadanie 1Quiz: Co zwraca SELECT DISTINCT?

Tabela produkty ma 100 wierszy i 8 różnych kategorii. Co zwróci zapytanie SELECT DISTINCT kategoria FROM produkty;?

  • 100 wierszy — wszystkie rekordy z kolumną kategoria
  • 8 wierszy — jedną nazwę kategorii na wiersz, bez powtórzeń
  • 1 wiersz — zsumowane wartości wszystkich kategorii
  • Błąd — DISTINCT można stosować tylko z COUNT()
Zadanie 2Dopasuj operator do warunku

Dobierz odpowiedni operator SQL do każdego opisu warunku:

Dopasowanie do wzorca tekstowego z % i _
Wartość mieści się w zakresie liczb (np. 10–50)
Wartość należy do listy konkretnych wartości
Pole nie zawiera żadnej wartości (puste)
Zadanie 3Napisz zapytania SELECT z WHERE

Korzystając z tabeli produkty(id, nazwa, cena, kategoria, ilosc), napisz SELECT który wybiera produkty w cenie od 10 do 50 PLN, z kategorii 'Elektronika':

📌 Zapamiętaj