Приоритеты операций: скобки для управления порядком условий

Почему порядок условий важен? 🧐

Когда SQL обрабатывает условия в WHERE, он делает это не просто слева направо, а по строгим правилам приоритета операций. Без скобок вы можете получить совершенно неожиданные результаты!

-- Пример: хотим найти активных пользователей из Москвы ИЛИ администраторов
SELECT * FROM users 
WHERE is_active = TRUE AND city = 'Москва' OR is_admin = TRUE;

Казалось бы, запрос простой. Но база прочитает его так:
(is_active AND city) OR is_admin — и вернёт всех админов, даже неактивных из других городов!

Как скобки меняют логику запроса 🔄

Скобки — это мощный инструмент управления приоритетом. Они работают так же, как в математике: сначала вычисляется то, что внутри.

Исправим наш пример:

-- Теперь условие работает как задумано!
SELECT * FROM users 
WHERE is_active = TRUE AND (city = 'Москва' OR is_admin = TRUE);

Теперь логика чёткая:
is_active AND (любое из условий в скобках).

Практикуемся на реальных сценариях 🛠️

Пример 1: Фильтрация заказов
Нужно найти все «горячие» заказы: либо дороже 10 000, либо срочные, но только за последний месяц.

SELECT * FROM orders
WHERE (amount > 10000 OR is_urgent = TRUE) 
  AND created_at >= NOW() - INTERVAL '1 month';

Пример 2: Поиск по категориям
Ищем книги: должны быть или бестселлерами, или новинками, но только в жанре «Фантастика».

SELECT * FROM books
WHERE genre = 'Фантастика' 
  AND (is_bestseller = TRUE OR is_new_release = TRUE);

Главные правила приоритета в SQL 🏆

  1. Сначала NOT — инверсия выполняется до других операций.
  2. Потом AND — имеет более высокий приоритет, чем OR.
  3. Затем OR — выполняется в последнюю очередь.

Без скобок запрос A AND B OR C превращается в (A AND B) OR C.

Продвинутый лайфхак: вложенные скобки 🌀

Скобки можно комбинировать для сложной логики:

SELECT * FROM products
WHERE category = 'Электроника'
  AND (
      (price < 500 AND rating >= 4) 
      OR 
      (is_flash_sale = TRUE AND stock > 0)
  );

Здесь мы ищем:
- электронику, которая либо дешёвая и с высоким рейтингом,
- либо участвует в распродаже при наличии на складе.

Как избежать ошибок: 3 совета от Данилы Бежина ✅

  1. Всегда рисуйте логику на бумаге перед написанием условия.
  2. Проверяйте через EXPLAIN — иногда скобки влияют на оптимизацию запроса.
  3. Тестируйте на крайних случаях — например, когда одно из условий всегда TRUE.

👉 Подробнее о тонкостях оптимизации — в разборе сложных запросов от профессионала.

Итог: скобки = контроль 💪

Без скобок SQL сам решает, в каком порядке вычислять условия. Со скобками вы берёте управление на себя. Запоминаем:

  • AND без скобок «перетягивает» OR
  • Вложенные скобки = сложная логика
  • Тестируйте, тестируйте и ещё раз тестируйте!
-- Финальный пример: ищем либо активных москвичей, либо любого админа
SELECT username FROM users
WHERE (is_active = TRUE AND city = 'Москва') OR is_admin = TRUE;

Теперь ваши запросы будут работать именно так, как вы задумали! 🎉

Скрыть рекламу навсегда

🎥 YouTube: программирование простым языком

Канал, где я спокойно и по шагам объясняю сложные темы — без заумных терминов и лишней теории.

Подходит, если раньше «не заходило», но хочется наконец понять.

▶️ Смотреть курсы на YouTube