ЛЕКЦІЯ 11

Пріоритет операторів та коментарі

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

VTFK • 2025

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

Лекція 10: NULL обробка

  • IS NULL, COALESCE, NULLIF
  • NULL у логічних операціях
  • Безпека дилема NULL

План лекції

  • Порядок операцій (BODMAS для SQL)
  • Дужки змінюють порядок
  • Коментарі для читабельності
  • Практика з прикладами

Фокус: чітко сформулювати складні запити

Пріоритет операторів

Operator Precedence

Precedence

Порядок у якому SQL виконує операції, якщо немає дужок.

Аналогія: Як математика: спочатку дужки, потім * і /, потім + та -

Дерево пріоритету

Від найвищого до найнижчого

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% graph TB Root[Порядок операцій] Root --> L1[Рівень 1: Дужки ()] Root --> L2[Рівень 2: NOT] Root --> L3[Рівень 3: Порівняння] Root --> L4[Рівень 4: AND] Root --> L5[Рівень 5: OR] L1 --> Ex1[A OR B AND C
= A OR (B AND C)] L5 --> Ex2[(A AND B) OR C
виконується спочатку AND]

Повна таблиця пріоритету

Рівень Оператор Приклад
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;

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

Який порядок виконання: A OR B AND C?

  • (A OR B) AND C
  • A OR (B AND C)
  • Залежить від БД
✅ Правильна відповідь: A OR (B AND C)
💡 Пояснення:

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

1600s

Математика

BODMAS встановлена

1974

SQL-74

Впровадження пріоритету

1992

SQL-92

Стандартизація

2025

Сьогодні

Єдиний стандарт

Best practices для пріоритету

Міні ТЗ: складна фільтрація

Блок-схема логіки

Представлення умови

%%{init: {"theme": "neutral", "mermaid": {"version": "11.12.2"}}}%% flowchart TD Check{age >= 18 AND
status='active' AND
subscription='premium'
OR role='admin'?} Check -->|Yes| Include[Include user] Check -->|No| Exclude[Exclude user]

Комплексний запит з коментарями

Докладна документація

-- ТЗ: отримати активних преміум-користувачів або адміністраторів
SELECT 
  id,
  name,
  email,
  subscription,
  role
FROM users
WHERE 
  -- Перша група: активні дорослі з преміум
  (
    age >= 18
    AND status = 'active'
    AND subscription = 'premium'
  )
  -- ІЛИ адміністратори (будь-якого статусу)
  OR role = 'admin';

Підсумки

  • Пріоритет: дужки > NOT > AND > OR
  • Дужки змінюють порядок операцій
  • Коментарі роблять запити зрозумілішими

Далі — NoSQL и MongoDB

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

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

Лекція 12: NoSQL MongoDB CRUD

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

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

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

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