Filtrowanie WHERE: operatory porównań i logiki
Filtruj wiersze za pomocą =, <>, , AND, OR i NOT oraz poznaj kolejność wykonywania operatorów i działanie nawiasów.
Filtrowanie WHERE: operatory porównań i logiki to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.
Rola WHERE
WHERE filtruje wiersze przed grupowaniem lub agregacją. Zwracane są tylko wiersze, dla których predykat ma wartość TRUE.
Operatory porównania
Standardowe porównania działają dla wszystkich typów, które można porównywać:
SELECT * FROM products WHERE price > 100;
SELECT * FROM products WHERE price >= 100;
SELECT * FROM products WHERE price < 50;
SELECT * FROM products WHERE price <= 50;
SELECT * FROM products WHERE category = 'books';
SELECT * FROM products WHERE category <> 'books'; -- != also worksAND, OR, NOT
Predykaty można łączyć za pomocą operatorów logicznych:
-- Both true:
SELECT * FROM products
WHERE category = 'books' AND price < 50;
-- Either true:
SELECT * FROM products
WHERE category = 'books' OR category = 'music';
-- Negation:
SELECT * FROM products
WHERE NOT (category = 'books');Priorytet operatorów
Priorytet (od najwyższego do najniższego): NOT → AND → OR. Złożone predykaty należy zawsze ujmować w nawiasy, aby zwiększyć czytelność:
-- Without parens — almost certainly wrong:
SELECT * FROM orders
WHERE status = 'open' OR status = 'pending' AND total > 100;
-- means: status = open OR (status = pending AND total > 100)
-- With parens — clearer:
SELECT * FROM orders
WHERE (status = 'open' OR status = 'pending') AND total > 100;IN i NOT IN
Skrócony zapis wielu operatorów OR:
SELECT * FROM users
WHERE country IN ('US', 'CA', 'GB', 'AU');
-- Equivalent to:
SELECT * FROM users
WHERE country = 'US' OR country = 'CA' OR country = 'GB' OR country = 'AU';BETWEEN
Sprawdzanie zawartości włącznie z końcami zakresu:
SELECT * FROM orders
WHERE total BETWEEN 100 AND 500;
-- Equivalent to: total >= 100 AND total <= 500Filtry bezpieczne dla NULL
Porównania z NULL zwracają NULL (nie FALSE), a wiersze z wartością NULL są odrzucane przez WHERE. W razie potrzeby należy jawnie używać IS NULL / IS NOT NULL:
-- Returns users where deleted_at is unknown:
SELECT * FROM users WHERE deleted_at IS NULL;
-- IS DISTINCT FROM treats NULL as a comparable value:
SELECT * FROM events WHERE status IS DISTINCT FROM 'closed';Kolumny logiczne
Kolumna BOOLEAN nie wymaga porównania:
SELECT * FROM tasks WHERE done; -- = TRUE
SELECT * FROM tasks WHERE NOT done; -- = FALSE or NULL
SELECT * FROM tasks WHERE done IS NOT TRUE; -- FALSE or NULL onlyDopasowywanie wzorców za pomocą LIKE
% dopasowuje dowolny ciąg znaków, a _ dopasowuje dokładnie jeden znak:
SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM products WHERE sku LIKE 'A_-___';
-- Case-insensitive in PostgreSQL:
SELECT * FROM users WHERE email ILIKE '%@GMAIL.com';Filtrowanie i wydajność
To właśnie w klauzulach WHERE indeksy pokazują swoją wartość. Filtry równości (=) i zakresu (<, BETWEEN) na indeksowanych kolumnach zamieniają pełne skanowanie tabeli na wyszukiwanie wyników w milisekundach.
Kolejność ewaluacji
Logicznie baza danych wykonuje operacje w kolejności: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT. Dlatego WHERE operuje na surowych wierszach, a aliasy kolumn z SELECT nie są jeszcze zdefiniowane.
-- This fails — alias not visible in WHERE:
SELECT total * 0.9 AS discounted
FROM orders WHERE discounted > 100; -- ERROR
-- Repeat the expression instead, or wrap in a subquery.Podsumowanie
WHERE jest podstawowym narzędziem wybierania wierszy.
- Standardowe operatory porównania i logiczne
- Proszę stosować nawiasy przy połączeniu AND/OR
- Proszę używać IS NULL — nigdy = NULL
- WHERE na indeksowanych kolumnach działa szybko
Szybki test
Który predykat pozostawia tylko wiersze, w których wiek jest większy lub równy 18, a kraj to US?
Często zadawane pytania
Czy lekcja „Filtrowanie WHERE: operatory porównań i logiki” jest bezpłatna?
Tak — pełny tekst „Filtrowanie WHERE: operatory porównań i logiki” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Filtrowanie WHERE: operatory porównań i logiki”?
Filtruj wiersze za pomocą =, <>, , AND, OR i NOT oraz poznaj kolejność wykonywania operatorów i działanie nawiasów. Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć SQL Academy?
Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „Filtrowanie WHERE: operatory porównań i logiki”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?
Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wybieranie kolumn i wyrażeń
- Filtrowanie WHERE: operatory porównań i logiki
- ORDER BY dla jednej i wielu kolumn
- Podstawy LIMIT, OFFSET i paginacji