-- 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;
id INT PK, nazwa VARCHAR(200), cena DECIMAL(10,2), kategoria VARCHAR(100), ilosc INT
-- 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.
| Operator | Opis | Przykład |
|---|---|---|
= | Równość | WHERE kategoria = 'Elektronika' |
<> lub != | Różność | WHERE kategoria <> 'Sport' |
<, > | Mniejszy/większy | WHERE cena > 100 |
<=, >= | Mniejszy/większy lub równy | WHERE cena <= 500 |
BETWEEN a AND b | Zakres (włącznie z granicami) | WHERE cena BETWEEN 10 AND 50 |
IN (lista) | Wartość z listy | WHERE kategoria IN ('Sport','Dom') |
LIKE wzorzec | Dopasowanie wzorca tekstowego | WHERE nazwa LIKE 'Lap%' |
IS NULL | Wartość pusta (NULL) | WHERE opis IS NULL |
IS NOT NULL | Wartość niepusta | WHERE 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;
| Znak | Znaczenie | Przykład | Pasuje do |
|---|---|---|---|
% | Dowolna liczba dowolnych znaków (0 lub więcej) | LIKE 'Lap%' | Laptop, Lapbook, Lap |
% | Dowolna liczba znaków w środku | LIKE '%USB%' | Kabel USB, USB-C Hub |
_ | Dokładnie jeden dowolny znak | LIKE '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!
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.
Tabela produkty ma 100 wierszy i 8 różnych kategorii. Co zwróci zapytanie SELECT DISTINCT kategoria FROM produkty;?
Dobierz odpowiedni operator SQL do każdego opisu warunku:
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':
SELECT col FROM tabela; — wybiera konkretne kolumny; SELECT * — wszystkiecol AS nazwa — zmiana nazwy kolumny w wynikachSELECT DISTINCT — usuwa duplikaty z wyników=, <>, <, >, BETWEEN, IN, LIKE, IS NULL% = dowolna liczba znaków, _ = dokładnie jeden znakIS NULL / IS NOT NULL, nigdy = NULL