No dobra, już wiemy jak używać komendy SELECT. Przynajmniej nauczyliśmy się wyciągać dane z bazy, wybierać potrzebne kolumny i tworzyć zapytania, które zaczynają zamieniać surowe dane w coś przydatnego. Czas dodać do naszej magicznej palety trochę "filtrów". Tak, dziś pogadamy o filtrowaniu danych za pomocą takich operatorów porównania jak =, >, < i <>.
Kiedy pracujesz z dużymi tabelami, raczej nie chcesz oglądać wszystkich danych (chyba że masz ochotę na chaos). Żeby wybrać tylko te wiersze, które Cię interesują, w SQL używamy słowa kluczowego WHERE. Pozwala ono ustalić warunki, które każdy wiersz musi spełnić, żeby trafić do wyników zapytania. A do tych warunków używamy operatorów porównania.
Składnia filtrowania z WHERE
SELECT kolumna1, kolumna2
FROM tabela
WHERE warunek;
Prosta struktura: dodajemy słowo WHERE po FROM i piszemy konkretne warunki, które muszą spełniać wiersze.
Na przykładzie wyciągniemy dane z tabeli students:
SELECT name, age
FROM students
WHERE age > 18;
To zapytanie wybiera tylko tych studentów (imiona i wiek), którzy mają więcej niż 18 lat. Proste, nie? Teraz zanurkujmy w świat operatorów porównania.
Podstawowe operatory porównania
W SQL mamy kilka operatorów porównania, które pomogą Ci przefiltrować dane tak, jak chcesz. W sumie znasz je z matmy, ale warto doprecyzować, jak to działa w SQL. Oto lista najczęściej używanych:
=— Równe.<>— Różne (alternatywa:!=w niektórych bazach, ale lepiej używać<>, bo to standard SQL).>— Większe.<— Mniejsze.>=— Większe lub równe.<=— Mniejsze lub równe.
Tabela operatorów porównania
| Operator | Znaczenie | Przykład | Wynik |
|---|---|---|---|
= |
Równe | age = 20 |
Zwraca wiersze, gdzie wiek to 20 |
<> |
Różne | age <> 20 |
Zwraca wiersze, gdzie wiek nie jest równy 20 |
> |
Większe | age > 18 |
Zwraca wiersze, gdzie wiek jest większy niż 18 |
< |
Mniejsze | age < 18 |
Zwraca wiersze, gdzie wiek jest mniejszy niż 18 |
>= |
Większe lub równe | age >= 18 |
Zwraca wiersze, gdzie wiek to 18 lub więcej |
<= |
Mniejsze lub równe | age <= 18 |
Zwraca wiersze, gdzie wiek to 18 lub mniej |
Przykłady użycia operatorów porównania
Przykład 1: Wyciąganie studentów starszych niż 20 lat
Oto nasza tabela:
| id | name | age |
|---|---|---|
| 1 | Alex Lin | 22 |
| 2 | Anna Song | 19 |
| 3 | Otto Art | 21 |
SELECT name, age
FROM students
WHERE age > 20;
Tutaj ustawiamy warunek age > 20, żeby wybrać tylko tych studentów, których wiek przekracza 20. Jeśli w tabeli jest student z wiekiem 19, niestety, nie pojawi się w wynikach.
W naszym przypadku dostaniemy taki wynik:
| name | age |
|---|---|
| Alex Lin | 22 |
| Otto Art | 21 |
Studentka Anna Song nie pojawiła się w wynikach, bo ma tylko 19 lat.
Przykład 2: Wyciąganie pracowników z pensją co najmniej 50 000
Oto nasza tabela employees:
| first_name | last_name | salary |
|---|---|---|
| Julia | Kim | 48000 |
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
A oto nasze zapytanie SQL:
SELECT first_name, last_name, salary
FROM employees
WHERE salary >= 50000;
To zapytanie zwróci wszystkich pracowników, którzy mają pensję równą 50 000 lub większą od tej kwoty. Równość też się liczy!
| first_name | last_name | salary |
|---|---|---|
| Marcus | Lee | 52000 |
| Anya | Patel | 50000 |
| Ethan | Zhou | 61000 |
Przykład 3: Wyciąganie produktów z ceną mniejszą niż 100
| product_name | price |
|---|---|
| USB Cable | 85 |
| Wireless Mouse | 150 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
SELECT product_name, price
FROM products
WHERE price < 100;
Jeśli masz sklep internetowy, takim zapytaniem możesz wybrać wszystkie produkty, które kosztują mniej niż 100 (np. na promocję "Wszystko za 99!").
| product_name | price |
|---|---|
| USB Cable | 85 |
| Notebook | 60 |
| Mechanical Pencil | 45 |
Przykład 4: Wykluczanie użytkowników z konkretnym id
SELECT id, username
FROM users
WHERE id <> 1;
To zapytanie wybiera wszystkich użytkowników oprócz tego, którego id to 1. Operator <> mówi "daj mi wszystkich, którzy nie mają tej wartości".
Tabela users:
| id | username |
|---|---|
| 1 | admin |
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Wynik zapytania:
| id | username |
|---|---|
| 2 | elena.gray |
| 3 | tom.bishop |
| 4 | aria.noble |
Typowe błędy przy filtrowaniu za pomocą operatorów porównania
Kiedy dopiero zaczynasz pisać zapytania z filtrowaniem, błędy zdarzają się często. Oto kilka popularnych przypadków, o których warto pamiętać:
Problem 1: Błąd w nazwie kolumny
Jeśli źle wpiszesz nazwę kolumny w zapytaniu, PostgreSQL wyrzuci błąd. Na przykład:
SELECT name, age
FROM students
WHERE ages > 18; -- Błąd: kolumna "ages" nie istnieje
Koniecznie sprawdzaj dokładne nazwy kolumn zanim napiszesz zapytanie.
Problem 2: Złe użycie operatora porównania
Czasem początkujący mogą przypadkowo pomylić operatory. Na przykład:
SELECT name, age
FROM students
WHERE age => 18; -- Błąd: nieprawidłowy operator
Poprawna składnia to >=, a nie =>.
Problem 3: Filtrowanie po wartościach, których nie ma
Jeśli próbujesz przefiltrować wiersze po wartości, której nie ma w tabeli, zapytanie się wykona, ale zwróci pusty wynik. Na przykład:
SELECT name
FROM students
WHERE age = 999; -- Wynik: 0 wierszy
To nie jest błąd składniowy, ale może być mylące, jeśli spodziewasz się zobaczyć dane.
Zastosowanie w praktyce
Filtrowanie danych za pomocą operatorów porównania przydaje się w różnych sytuacjach:
- Analiza danych: np. żeby wybrać wszystkich klientów, którzy wydali więcej niż 10 000 rupii.
- Raporty: wybieranie pracowników z pensją powyżej średniej.
- Monitoring: śledzenie użytkowników, którzy nie byli aktywni przez ostatni miesiąc.
SQL pozwala Ci szybko wyciągać potrzebne dane z ogromnych tabel, a operatory porównania to pierwszy krok na tej drodze.
GO TO FULL VERSION