Klauzula WHERE jako filtr wierszy tabeli oraz operatory porównania =, <>, <, >, <=, >= dla liczb i tekstu.
Samo zapytanie SELECT zwraca wszystkie wiersze tabeli. Przy dziesięciu wierszach da się to jeszcze przejrzeć wzrokiem, ale przy tysiącu – już nie. Klauzula WHERE rozwiązuje ten problem: zawęża wynik do wierszy, które spełniają podany warunek.
Kluczowa intuicja: WHERE to filtr wierszy, nie kolumn. Lista po SELECT decyduje, które kolumny zobaczysz. Warunek po WHERE decyduje, które wiersze w ogóle trafią do wyniku. To dwie niezależne decyzje i mylenie ich to jeden z częstszych błędów na starcie.
Jak to działa krok po kroku. Baza bierze pierwszy wiersz tabeli, podstawia jego wartości do warunku i sprawdza, czy wychodzi prawda. Jeśli tak – wiersz zostaje. Jeśli nie – wiersz jest odrzucany i nie pojawi się w wyniku. Potem to samo z drugim wierszem, trzecim i tak dalej, aż do końca tabeli. Wynik to zbiór wierszy, które przeszły ten test.
Warto to sobie raz przećwiczyć na kartce: wypisz tabelę, przejdź ją wiersz po wierszu i skreślaj te, które nie spełniają warunku. To, co zostało nieskreślone, jest dokładnie tym, co zwróci baza. Sekcja „Filtrowanie" niżej pozwala prześledzić dokładnie ten proces.
Porównywanie tekstu. Operatory < i > nie są zarezerwowane dla liczb – działają też na tekście, tyle że porównują alfabetycznie. Warunek nazwisko >= 'N' wybierze nazwiska od litery N do końca alfabetu. Tekst w warunku zawsze bierzemy w apostrofy ('3A'), liczb – nigdy (4.00).
Uwaga na = przy liczbach ułamkowych. Szukanie dokładnej równości średniej czy ceny bywa zawodne, bo wartość w bazie może mieć więcej miejsc po przecinku, niż widać na ekranie. W praktyce bezpieczniej pytać o zakres (>=, <=) niż o równość co do grosza.
Jeżeli w kolumnie mogą być wartości puste, pamiętaj, że nie da się ich znaleźć żadnym z powyższych operatorów – mają własny.
Gdy jeden warunek nie wystarcza, łączy się je operatorami logicznymi AND, OR i NOT. Kolejność wyświetlania wyniku ustawia się osobno – klauzulą ORDER BY.
SELECT nazwisko, klasa, srednia FROM uczniowie WHERE srednia >= 4.00
| nazwisko | klasa | srednia |
|---|---|---|
| Kowalska | 3A | 4.75 |
| Wiśniewski | 3A | 5.10 |
| Dąbrowski | 3B | 4.10 |
-- Tekst w warunku zawsze w apostrofach SELECT nazwisko, srednia FROM uczniowie WHERE klasa = '3A'
| nazwisko | srednia |
|---|---|
| Kowalska | 4.75 |
| Wiśniewski | 5.10 |
-- Operator <> wyklucza kategorię z wyniku SELECT nazwisko, klasa FROM uczniowie WHERE klasa <> '3B'
| nazwisko | klasa |
|---|---|
| Kowalska | 3A |
| Wiśniewski | 3A |
| Zając | 3C |
=
<>
<
>
<=
>=
| nazwisko | klasa | srednia |
|---|---|---|
| Kowalska | 3A | 4.75 |
| Nowak | 3B | 3.20 |
| Wiśniewski | 3A | 5.10 |
| Zając | 3C | 3.90 |
| Dąbrowski | 3B | 4.10 |
Wybierz warunek i naciśnij „Krok", żeby sprawdzać wiersz po wierszu.
Najczęstsza pułapka to granica przedziału. Polecenie „uczniowie ze średnią co najmniej 4,0" to >= 4.00, a nie > 4.00 – przy > wypada uczeń ze średnią dokładnie 4,0. Odwrotnie przy „poniżej 4,0": to < 4.00, bo „poniżej" nie obejmuje samej czwórki. Zanim napiszesz warunek, sprawdź w treści zadania, czy pada „co najmniej", „nie mniej niż", „powyżej", czy „mniej niż" – każde z nich to inny operator.
Druga pułapka to brak apostrofów wokół tekstu. Warunek klasa = 3A skończy się błędem albo pustym wynikiem; poprawnie jest klasa = '3A'. Odwrotny błąd – apostrofy wokół liczby (srednia >= '4.00') – bywa jeszcze groźniejszy, bo część baz porówna wtedy tekstowo i po cichu zwróci złe wiersze.
Trzecia rzecz: jeśli zadanie prosi o listę „posortowaną malejąco", samo WHERE nie wystarczy – dopisz ORDER BY. Filtrowanie i sortowanie to osobne polecenia i punkty zwykle są przyznawane za oba.
Nie. Kolejność klauzul w zapytaniu jest sztywna: najpierw SELECT, potem FROM, potem WHERE. Zapisanie ich w innej kolejności to błąd składni, nawet jeśli sens byłby oczywisty.
<> porównuje dwie wartości i sprawdza, czy są różne – działa na pojedynczej kolumnie. NOT odwraca cały warunek logiczny i przydaje się dopiero przy warunkach złożonych, opisanych w operatorach logicznych. Dla prostego przypadku klasa <> '3B' i NOT klasa = '3B' dają ten sam wynik.
Porównywanie tekstu zależy od ustawień sortowania w konkretnej bazie – litery ą, ć, ł mogą trafiać w innym miejscu alfabetu, niż się spodziewasz. Na maturze zwykle nie ma to znaczenia, ale warto wiedzieć, że wynik nazwisko >= 'N' na dwóch różnych bazach może się nieznacznie różnić.
Zagadnienia z tego samego obszaru matury – warto je powtórzyć razem: