ВГОРУ

SQL-Урок 4. Фільтрування даних (WHERE)

В більшості випадків необхідно отримувати не всі записи, а лише ті, які відповідають певним критеріям. Тому для здійснення фільтрації вибірки в SQL є спеціальний оператор WHERE.


1. Просте фільтрування оператором WHERE.

Давайте з нашої таблиці, наприклад, відберемо записи, які стосуються лише певного товару. Для цього ми зазначимо додатковий параметр відбору, який фільтруватиме значення по колонці Product.

Приклад запиту для відбору текстових значень:

Run SQLSELECT * 
FROM Sumproduct 
WHERE Product = 'Bikes'

Як бачимо, умова відбору взята в одинарні лапки, що є обов'язковим при фільтруванні текстових значень. При фільтруванні числових значень лапки не потрібні.

Приклад запиту для відбору числових значень:

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

В цьому прикладі ми відібрали записи, в яких виручка від реалізації становила більше 40 тис. $ та, додатково, всі записи посортували по зростанню по полю Amount.

В таблиці нижче, зазначено перелік умовних операторів, які підтримуються SQL:

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

2. Фільтрування по діапазону значень (BETWEEN)

Для відбору даних, які лежать в певному діапазоні, використовується оператор BETWEEN. В наступному запиті будуть відібрані усі значення, які лежать в межах від 1000$ до 2000$ включно, в полі Amount.

Run SQLSELECT * 
FROM Sumproduct 
WHERE Amount BETWEEN 1000 AND 2000

Черговість сортування буде залежати від порядку розташування полів в запиті. Тобто, в нашому випадку спочатку дані будуть посортовані по колонці Amount, а потім по City.

3. Вибірка порожніх записів (IS NULL)

В SQL існує спеціальний оператор для вибірки порожніх записів (називаєьбся NULL). Порожнім записом вважається будь-яка комірка в таблиці, в яку не введено жодного символу. Якщо в комірку введено 0 або пробіл, то вважається, що поле заповнене.

SELECT * 
FROM Sumproduct 
WHERE Amount IS NULL

В прикладі вище, ми навмисне видалили два значення в полі Amount, щоб продемонструвати роботу оператора NULL.

4. Розширене фільтрування (AND, OR)

Мова SQL не обмежується фільтруванням по одній умові, для власних цілей ви можете викоритсовувати досить складні конструкції для вибірки даних одночасно по багатьом критеріям. Для цього в SQL є додаткові оператори, які розширюють можливості оператора WHERE. Такими операторами являються: AND, OR, IN, NOT. Наведемо кілька прикладів роботи даних операторів.

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

Давайте об'єднаємо оператори AND та OR. Для цього зробимо вибірку велосипедів (Bikes) та ковзанів (Skates), які були продані в березні (March).

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

Бачимо, що в нашу вибірку попало за багато значень (крім березня (March), також січень (January), лютий (February) та квітень (April)). В чому ж причина? А в тому, що SQL має пріоритети виконання команд. Тобто оператор AND має вищий пріоритет, ніж оператор OR, тому спочатку було відібрано записи з ковзанами, що продані в березні, а потім усі записи, що стосувалися велосипедів.

Отже, щоб отримати правильну вибірку, нам потрібно змінити пріоритети виконання команд. Для цього використаємо дужки, як в математиці. Тоді, спочатку будуть опрацьовані оператори в дужках, а потім - всі решта.

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

5. Розширене фільтрування (оператор IN)

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

Оператор IN виконує ту ж саму функцію, що і OR, проте має ряд переваг:

  • При роботі з довгими списками, речення з IN легше читати;
  • Використовується менша кількість операторів, що пришвидшує обробку запиту;
  • Найважливіша перевага IN в тому, що в його конструкції можна використовувати додаткову конструкцію SELECT, що
  • відкриває великі можливості для створення складних підзапитів.

    6. Розширене фільтрування (оператор NOT)

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

    Ключове слово NOT дозволяє забрати непотрібні значення із вибірки. Також його особливістю є те, що воно проставляється перед назвою стовпця, який бере участь у фільтруванні, а не після.