SQLLab
Теория· 5 мин· 10 XP

Скобки и приоритет операторов

Зачем это нужно

Когда в запросе несколько логических операторов — результат зависит от порядка их выполнения. Неверный приоритет = неверный результат, и ошибка может быть незаметной: запрос выполняется, но возвращает не те строки.

Порядок выполнения

код
1. NOT
2. AND
3. OR

Пример без скобок — ловушка

sql
WHERE category = 'Книги' OR category = 'Спорт' AND price < 1000

Это читается как:

код
category = 'Книги'
OR
(category = 'Спорт' AND price < 1000)

Результат: все книги (любой цены) + спорт дешевле 1000 ₽.

Пример со скобками — явный смысл

sql
WHERE (category = 'Книги' OR category = 'Спорт') AND price < 1000

Результат: из категорий «Книги» и «Спорт» только те, что дешевле 1000 ₽.

Правило

Если в одном WHERE есть и AND и OR — всегда расставляйте скобки.

Практический пример

sql
SELECT name, category, price
FROM products
WHERE (category = 'Электроника' OR category = 'Книги')
  AND price < 5000
ORDER BY category, price;

Запомни

Скобки в SQL — это не только математика, но и документация намерений. Расставляйте их всегда, когда смешиваете AND и OR.


Микро-практика

Что вернёт запрос:

sql
WHERE category = 'A' OR category = 'B' AND price > 100

Как исправить, чтобы получить (A или B) с ценой > 100?

Ответ

Без скобок: все A (любой цены) + B с ценой > 100.

Исправленный вариант:

sql
WHERE (category = 'A' OR category = 'B') AND price > 100

Прочитайте урок до конца — прогресс засчитается автоматически