ЛЕКЦІЯ 8

Фільтрація даних: WHERE

Основи баз даних

VTFK • 2025

Що вже вивчили

Лекція 7: SELECT та функції

  • Рядкові та математичні функції
  • COUNT, SUM, AVG
  • Перейменування AS

План лекції

  • WHERE для фільтрації
  • Оператори порівняння
  • Різні типи фільтрів
  • Практика комбінування умов

Фокус: отримувати тільки потрібні рядки

Навіщо WHERE

WHERE clause

WHERE

Умова, яка фільтрує рядки перед SELECT; повертаються тільки рядки де умова TRUE.

Аналогія: Як сито: більшість падає, залишається тільки релевантне

Хід WHERE у запиті

Виконання кроків

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart LR All[(Таблиця
100 рядків)] All -->|1: FROM| Read[Прочитай всі] Read -->|2: WHERE| Filter[Перевір умову] Filter -->|TRUE| Keep[Залишити] Filter -->|FALSE| Drop[Вилучити] Keep -->|3: SELECT| Project[Вибери колонки] Project --> Result[Результат
20 рядків]

Базовий WHERE

SELECT column1, column2 FROM table WHERE condition;
condition — вираз TRUE/FALSE
= — дорівнює
> — більше
< — менше
condition — вираз TRUE/FALSE
= — дорівнює
> — більше
< — менше
condition — вираз TRUE/FALSE
= — дорівнює
> — більше
< — менше
condition — вираз TRUE/FALSE
= — дорівнює
> — більше
< — менше

Оператори порівняння

Оператор Назва Приклад
= дорівнює age = 25
!= не дорівнює status != 'inactive'
> більше price > 100
< менше age < 65
>= більше або рівно salary >= 50000
<= менше або рівно quantity <= 10

Приклади WHERE

Різні умови

-- Точна вибір
SELECT * FROM users WHERE age = 25;

-- Діапазон
SELECT * FROM products WHERE price > 100;

-- Рядкова умова
SELECT * FROM users WHERE status != 'inactive';

-- Дата
SELECT * FROM orders WHERE created_at > '2025-01-01';

Типи значень у WHERE

Спеціальні оператори

BETWEEN, IN, LIKE

Розширені фільтри

-- Діапазон
SELECT * FROM users WHERE age BETWEEN 18 AND 65;

-- Один з варіантів
SELECT * FROM orders WHERE status IN ('shipped', 'delivered');

-- Патерн тексту
SELECT * FROM users WHERE email LIKE '%gmail.com';
SELECT * FROM products WHERE name LIKE 'Product%';

Міні-вікторина

Як вибрати користувачів від 18 до 65 років?

  • WHERE age = 18 AND age = 65
  • WHERE age BETWEEN 18 AND 65
  • WHERE age > 18 OR age < 65
✅ Правильна відповідь: WHERE age BETWEEN 18 AND 65
💡 Пояснення:

BETWEEN включає обидва краї (18 і 65).

Логіка BETWEEN

Включена або виключена границя

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart LR Age[age значення] Age -->|18 ≤ age ≤ 65| Yes[BETWEEN TRUE] Age -->|інакше| No[BETWEEN FALSE] Yes --> Include[Включити рядок] No --> Exclude[Виключити рядок]

Помилка: неправильна логіка

⚠️ ЗАСТЕРЕЖЕННЯ

AND vs OR змінюють результат

❌ Неправильно

SELECT * FROM users
WHERE age > 18 OR age < 65;
-- це включить ВСІХ!

OR означає 'будь-яке з двох'. Тут всі вікові значення задовольняють

✓ Правильно

SELECT * FROM users
WHERE age >= 18 AND age <= 65;
-- Правильний діапазон

AND означає обидві умови мають бути TRUE

Еволюція фільтрації

Від простих до складних

1974

WHERE básico

= > < only

1992

SQL-92

BETWEEN, IN, LIKE

2003

SQL:2003

CASE для складної логіки

2025

JSON filtering

WHERE на JSON полях

Best practices WHERE

Міні ТЗ: фільтрація замовлень

Комплексний WHERE

Кілька умов разом

SELECT id, user_id, amount, created_at
FROM orders
WHERE 
  amount > 50
  AND created_at >= DATE_SUB(now(), INTERVAL 30 DAY)
  AND status IN ('shipped', 'delivered')
  AND user_id IS NOT NULL;

Підсумки

  • WHERE скорочує результати перед SELECT
  • Оператори: =, >, <, >=, <=, !=
  • BETWEEN, IN, LIKE для складних умов

Далі — AND/OR/NOT для комбінування умов

Домашнє завдання

Наступна лекція:

Лекція 9: AND/OR/NOT

📚 Корисні ресурси:

📚 Корисні ресурси:

Дякую за увагу! 💾

← Повернутися до списку лекцій