0Pricing
SQL Academy · Lekcja

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 works

AND, 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 <= 500

Filtry 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 only

Dopasowywanie 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

  1. Wybieranie kolumn i wyrażeń
  2. Filtrowanie WHERE: operatory porównań i logiki
  3. ORDER BY dla jednej i wielu kolumn
  4. Podstawy LIMIT, OFFSET i paginacji
← Powrót do SQL Academy