TOP

Lekcja SQL 4. Filtrowanie danych (WHERE)

W większości przypadków konieczne jest otrzymanie nie wszystkich rekordów, a jedynie tych, które spełniają określone kryteria. Dlatego w SQL istnieje specjalny operator WHERE do filtrowania próbkowania.


1. Proste filtrowanie za pomocą operatora WHERE.

Wybierzmy z naszej tabeli np. rekordy, które dotyczą tylko określonego produktu. W tym celu podajemy dodatkowy parametr selekcji, który będzie filtrował wartości po kolumnie Produkt.

Przykład zapytania o wybranie wartości tekstowych:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes'

Jak widać, warunek wyboru jest ujęty w pojedynczy cudzysłów, co jest obowiązkowe przy filtrowaniu wartości tekstowych. Cudzysłowy nie są wymagane podczas filtrowania wartości liczbowych.

Przykład zapytania o wybranie wartości liczbowych:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 
ORDER BY Amount

W tym przykładzie wybraliśmy rekordy, w których przychód ze sprzedaży przekroczył 40 000 USD i dodatkowo posortowaliśmy wszystkie rekordy w kolejności rosnącej według pola Kwota.

Poniższa tabela zawiera instrukcje warunkowe obsługiwane przez SQL:

Знак операції Значення
= Дорівнює
<> Не дорівнює
< Менше
<= Менше або рівне
> Більше
>= Більше або рівне
BETWEEN Між двома значеннями
IS NULL Відсутній запис

2. Filtrowanie według zakresu wartości (BETWEEN)

Operator BETWEEN służy do selekcji danych znajdujących się w określonym przedziale. W kolejnym zapytaniu zostaną wybrane wszystkie wartości mieszczące się w przedziale od 1000 do 2000 dolarów włącznie w polu Kwota.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount BETWEEN 1000 AND 2000

Kolejność sortowania będzie zależała od kolejności pól w zapytaniu. Oznacza to, że w naszym przypadku dane zostaną najpierw posortowane według kolumny Kwota, a następnie według City.

3. Wybór pustych rekordów (IS NULL)

W języku SQL istnieje specjalny operator służący do wybierania pustych rekordów (zwany NULL). Pusty wpis to dowolna komórka w tabeli, w której nie wprowadzono żadnego znaku. Jeżeli w komórce zostanie wpisane 0 lub spacja, uważa się, że pole jest wypełnione.

SELECT * 
FROM Sumproduct 
WHERE Amount IS NULL

W powyższym przykładzie celowo usunęliśmy dwie wartości z pola Kwota, aby zademonstrować działanie operatora NULL.

4. Zaawansowane filtrowanie (AND, OR)

Język SQL nie ogranicza się do filtrowania według jednego warunku, na własne potrzeby można zastosować dość złożone konstrukcje, aby selekcjonować dane jednocześnie według wielu kryteriów. W tym celu SQL ma dodatkowe operatory, które rozszerzają możliwości operatora WHERE. Takimi operatorami są: AND, OR, IN, NOT. Podamy kilka przykładów działania tych operatorów.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount > 40000 AND City = 'Toronto'
Run SQLSELECT * 
FROM Sumproduct 
WHERE Month = 'April' OR Month = 'March'

Połączmy operatory AND i OR. W tym celu dokonamy selekcji rowerów (Bikes) i łyżew (Skates), które zostały sprzedane w marcu.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes' OR Product = 'Skates' AND Month = 'March'

Widzimy, że w naszej próbie znalazło się wiele wartości (oprócz marca także styczeń, luty i kwiecień). Jaki jest powód? Oraz fakt, że SQL ma priorytety wykonywania poleceń. Oznacza to, że operator AND ma wyższy priorytet niż operator OR, więc jako pierwsze zostały wybrane rekordy z rolkami sprzedanymi w marcu, a następnie wszystkie rekordy związane z rowerami.

Aby więc uzyskać prawidłowe próbkowanie, musimy zmienić priorytety wykonywania poleceń. W tym celu użyjemy nawiasów, jak w matematyce. Następnie najpierw zostaną przetworzone operatory w nawiasach, a potem cała reszta.

Run SQLSELECT * 
FROM Sumproduct 
WHERE (Product = 'Bikes' OR Product = 'Skates') AND Month = 'March'

5. Filtrowanie zaawansowane (operator IN)

Run SQLSELECT * 
FROM Sumproduct 
WHERE ID IN (4, 12, 58, 67)

Operator IN pełni tę samą funkcję co OR, ale ma kilka zalet:

  • Podczas pracy z długimi listami łatwiej jest przeczytać zdania zawierające IN;
  • Używa się mniej operatorów, co przyspiesza przetwarzanie żądań;
  • Najważniejszą zaletą IN jest to, że w jego konstrukcji można zastosować dodatkową konstrukcję SELECT, która
  • відкриває великі можливості для створення складних підзапитів.

    6. Filtrowanie zaawansowane (operator NOT)

    Run SQLSELECT * 
    FROM Sumproduct 
    WHERE NOT City IN ('Toronto', 'Montreal')
    

    Słowo kluczowe NOT pozwala usunąć niepotrzebne wartości z próbki. Jego cechą jest również to, że jest on umieszczany przed nazwą kolumny objętej filtrowaniem, a nie po.