Przejdź do głównej zawartości

Moduł 4 – Praktyka: Filtrowanie danych

Klauzula WHERE

Klauzula WHERE ogranicza wyniki do rekordów spełniających podany warunek.

SELECT kolumny FROM tabela WHERE warunek;

1. Operatory porównania

OperatorZnaczenie
=równy
<> lub !=różny
>większy niż
<mniejszy niż
>=większy lub równy
<=mniejszy lub równy
-- Wyświetl wszystkich sprzedawców
SELECT IMIE, NAZWISKO FROM PRACOWNICY WHERE STANOWISKO = 'sprzedawca';

-- Wyświetl wszystkie samochody firmy Fiat
SELECT * FROM SAMOCHODY WHERE MARKA = 'Fiat';

-- Samochody o przebiegu powyżej 50000
SELECT MARKA, TYP, PRZEBIEG FROM SAMOCHODY WHERE PRZEBIEG > 50000;

-- Pracownicy z pensją co najmniej 1500
SELECT IMIE, NAZWISKO, PENSJA FROM PRACOWNICY WHERE PENSJA >= 1500;

2. Operator AND – oba warunki muszą być spełnione

-- Fiaty model Seicento
SELECT * FROM SAMOCHODY WHERE MARKA = 'Fiat' AND TYP = 'Seicento';

-- Niebieskie Fordy
SELECT * FROM SAMOCHODY WHERE MARKA = 'Ford' AND KOLOR = 'niebieski';

-- Samochody o pojemności silnika od 1400 do 1800
SELECT MARKA, POJ_SILNIKA FROM SAMOCHODY
WHERE POJ_SILNIKA >= 1400 AND POJ_SILNIKA <= 1800;

3. Operator OR – przynajmniej jeden warunek musi być spełniony

-- Fiaty LUB samochody w kolorze zielonym
SELECT MARKA, KOLOR FROM SAMOCHODY
WHERE MARKA = 'Fiat' OR KOLOR = 'Zielony';

-- Klienci z Warszawy lub Wrocławia
SELECT IMIE, NAZWISKO, MIASTO FROM KLIENCI
WHERE MIASTO = 'Warszawa' OR MIASTO = 'Wroclaw';

4. Łączenie AND i OR z nawiasami

Nawiasy są kluczowe! Bez nich AND ma pierwszeństwo przed OR.

-- Kierownicy z działu technicznego LUB obsługi klienta
SELECT IMIE, NAZWISKO, STANOWISKO, DZIAL FROM PRACOWNICY
WHERE STANOWISKO = 'kierownik'
AND (DZIAL = 'techniczny' OR DZIAL = 'obsluga klienta');

Bez nawiasów zapytanie miałoby inne znaczenie:

-- BŁĘDNE – zwróci wszystkich z działu obsługa klienta
WHERE STANOWISKO = 'kierownik' AND DZIAL = 'techniczny'
OR DZIAL = 'obsluga klienta';

5. BETWEEN – zakres wartości (włącznie)

-- Samochody o pojemności silnika od 1400 do 1800 (włącznie)
SELECT MARKA, POJ_SILNIKA FROM SAMOCHODY
WHERE POJ_SILNIKA BETWEEN 1400 AND 1800;

-- Pracownicy z pensją między 1200 a 1800
SELECT IMIE, NAZWISKO, PENSJA FROM PRACOWNICY
WHERE PENSJA BETWEEN 1200 AND 1800;

BETWEEN a AND b jest równoważne >= a AND <= b


6. LIKE – wyszukiwanie wzorców tekstowych

SymbolZnaczenie
%dowolny ciąg znaków (0 lub więcej)
_dokładnie jeden dowolny znak
-- Nazwiska kończące się na "ski"
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO LIKE '%ski';

-- Nazwiska zaczynające się na "K"
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO LIKE 'K%';

-- Nazwiska zawierające "k", a na dalszej pozycji "a"
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO LIKE '%k%a';

-- Nazwiska z drugą literą "o"
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO LIKE '_o%';

-- Nazwiska z trzecią literą "c"
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO LIKE '__c%';

7. NOT LIKE – wykluczanie wzorców

-- Nazwiska NIE zaczynające się na "k"
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO NOT LIKE 'k%';

-- Nazwiska NIE zaczynające się na "k" ani "d"
SELECT IMIE, NAZWISKO FROM KLIENCI
WHERE NAZWISKO NOT LIKE 'k%' AND NAZWISKO NOT LIKE 'd%';

8. IN – lista wartości

-- Samochody marek Fiat, Ford lub Opel
SELECT MARKA, TYP FROM SAMOCHODY
WHERE MARKA IN ('Fiat', 'Ford', 'Opel');

-- Odpowiednik z OR:
-- WHERE marka = 'Fiat' OR marka = 'Ford' OR marka = 'Opel'

9. IS NULL / IS NOT NULL

-- Klienci bez karty kredytowej
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NR_KARTY_KREDYT IS NULL;

-- Klienci z kartą kredytową
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NR_KARTY_KREDYT IS NOT NULL;

-- Wypożyczenia bez daty oddania (aktualnie trwające)
SELECT * FROM WYPOZYCZENIA WHERE DATA_ODD IS NULL;

Ćwiczenia

  1. Wyświetl wszystkie zielone samochody.
  2. Wyświetl samochody Opel w kolorze zielonym.
  3. Wyświetl pracowników działu KSIEGOWOSC z pensją powyżej 1300.
  4. Wyświetl samochody z silnikiem od 1100 do 1400 (użyj BETWEEN).
  5. Wyświetl klientów, których nazwisko zaczyna się na literę "M".
  6. Wyświetl klientów z firm (pole FIRMA nie jest NULL).
  7. Wyświetl mechaników lub kasjerów.
Rozwiązania
-- 1
SELECT * FROM SAMOCHODY WHERE KOLOR = 'Zielony';

-- 2
SELECT * FROM SAMOCHODY WHERE MARKA = 'Opel' AND KOLOR = 'Zielony';

-- 3
SELECT IMIE, NAZWISKO, PENSJA FROM PRACOWNICY
WHERE DZIAL = 'KSIEGOWOSC' AND PENSJA > 1300;

-- 4
SELECT MARKA, TYP, POJ_SILNIKA FROM SAMOCHODY
WHERE POJ_SILNIKA BETWEEN 1100 AND 1400;

-- 5
SELECT IMIE, NAZWISKO FROM KLIENCI WHERE NAZWISKO LIKE 'M%';

-- 6
SELECT IMIE, NAZWISKO, FIRMA FROM KLIENCI WHERE FIRMA IS NOT NULL;

-- 7
SELECT IMIE, NAZWISKO, STANOWISKO FROM PRACOWNICY
WHERE STANOWISKO = 'mechanik' OR STANOWISKO = 'kasjer';

Poprzedni moduł: Podstawy SELECT Następny moduł: Złączenia tabel