Основи баз даних
VTFK • 2025
Лекція 10: NULL обробка
Фокус: чітко сформулювати складні запити
Порядок у якому SQL виконує операції, якщо немає дужок.
Аналогія: Як математика: спочатку дужки, потім * і /, потім + та -
Від найвищого до найнижчого
| Рівень | Оператор | Приклад |
|---|---|---|
| 1 | Дужки () | (a OR b) AND c |
| 2 | Функції ROUND(), UPPER() | ROUND(price, 2) |
| 3 | NOT | NOT (status = 'deleted') |
| 4 | Арифметика *, / | price * quantity |
| 5 | Арифметика +, - | 100 + 50 - 25 |
| 6 | Порівняння =, <, > | age > 18 |
| 7 | AND | a > 10 AND b < 20 |
| 8 | OR | a = 1 OR b = 2 |
Як читається запит
-- Це виконується як: (age > 18 AND status = 'active') OR country = 'USA'
SELECT * FROM users
WHERE age > 18 AND status = 'active' OR country = 'USA';
-- Явні дужки роблять намір явним
SELECT * FROM users
WHERE (age > 18 AND status = 'active') OR country = 'USA';
-- Або альтернативна логіка
SELECT * FROM users
WHERE age > 18 AND (status = 'active' OR country = 'USA');
Документуємо запити
-- Отримуємо активних дорослих користувачів
SELECT
id, -- унікальний ID
name, -- повне ім'я
email -- контактна пошта
FROM users
WHERE
age >= 18 -- дорослі
AND status = 'active' -- активні
/* та без бану */
AND banned_at IS NULL;
AND має більший пріоритет, тому B AND C обчислюється першим.
Неправильний пріоритет - неправильні результати
-- Хочу активних дорослих з Франції або деактивованих (будь-якого віку)
SELECT * FROM users
WHERE age >= 18 AND status = 'active' AND country = 'France'
OR status = 'inactive';
Це дає: (18+ AND active AND France) OR inactive - деактивовані всіх віків!
SELECT * FROM users
WHERE (age >= 18 AND status = 'active' AND country = 'France')
OR status = 'inactive';
Дужки роблять логіку явною
Від математики до SQL
BODMAS встановлена
Впровадження пріоритету
Стандартизація
Єдиний стандарт
Представлення умови
Докладна документація
-- ТЗ: отримати активних преміум-користувачів або адміністраторів
SELECT
id,
name,
email,
subscription,
role
FROM users
WHERE
-- Перша група: активні дорослі з преміум
(
age >= 18
AND status = 'active'
AND subscription = 'premium'
)
-- ІЛИ адміністратори (будь-якого статусу)
OR role = 'admin';
Далі — NoSQL и MongoDB
Лекція 12: NoSQL MongoDB CRUD
Дякую за увагу! 💾