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
| Operator | Znaczenie |
|---|---|
= | 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 bjest równoważne>= a AND <= b
6. LIKE – wyszukiwanie wzorców tekstowych
| Symbol | Znaczenie |
|---|---|
% | 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
- Wyświetl wszystkie zielone samochody.
- Wyświetl samochody Opel w kolorze zielonym.
- Wyświetl pracowników działu KSIEGOWOSC z pensją powyżej 1300.
- Wyświetl samochody z silnikiem od 1100 do 1400 (użyj BETWEEN).
- Wyświetl klientów, których nazwisko zaczyna się na literę "M".
- Wyświetl klientów z firm (pole FIRMA nie jest NULL).
- 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