AND и OR в SQL: как правильно соединять условия

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

И здесь на помощь приходят два основных логических оператора: AND и OR.

AND и OR в SQL: как правильно соединять условия

Что делают AND и OR

  • AND — «и». Все условия должны быть выполнены одновременно.Пример: выбрать из холодильника молоко и яйца, чтобы приготовить омлет:
SELECT * FROM fridge WHERE product = 'milk' AND product = 'eggs';

(Да, в реальности одной строки с молоком и яйцом не будет, но идея ясна: оба условия должны выполняться вместе.)

  • OR — «или». Достаточно, чтобы выполнено было хотя бы одно условие.Пример: выбрать продукты, которые нужно купить или молоко, или яйца:
SELECT * FROM shopping_list WHERE product = 'milk' OR product = 'eggs';

Где могут использоваться

Эти операторы обычно используют в блоке WHERE, чтобы фильтровать данные.Также можно применять их в:

  • HAVING — фильтрация агрегатов после GROUP BY
  • JOIN ON — комбинирование условий соединения таблиц

Пример с HAVING:

SELECT category, COUNT(*) FROM fridge GROUP BY category HAVING COUNT(*) > 5 AND AVG(expiry_date) < '2025-08-01';

Особенности и нюансы:

  • Порядок выполнения важенAND имеет более высокий приоритет, чем OR.Если смешиваете их, всегда используйте скобки для точного порядка:
SELECT * FROM fridge WHERE (product = 'milk' OR product = 'eggs') AND expiry_date < '2025-08-01';
  • AND «сжимает» результат, OR «расширяет» результат

    AND оставляет меньше строк, OR — больше

Частые ошибки

  • Забыли скобки и получили слишком большой или слишком маленький результат
  • Использовали AND там, где нужен OR (или наоборот)
  • Смешали NULL значения: NULL AND TRUE и NULL OR TRUE могут вести себя неожиданно

Представим, что мама проверяет холодильник:

  • У неё есть список продуктов, которые могут испортиться: молоко, яйца, йогурт
  • Она хочет приготовить что-то, если и молоко, и яйца в наличии → AND
  • Она хочет перекусить, если есть молоко или йогурт → OR

В SQL это выглядит так:

-- Для приготовления омлета SELECT * FROM fridge WHERE product = 'milk' AND product = 'eggs'; -- Для перекуса SELECT * FROM fridge WHERE product = 'milk' OR product = 'yogurt';

AND и OR — это простые, но мощные инструменты фильтрации. Правильное использование скобок и понимание приоритета операторов помогает избежать ошибок и выбирать точно те данные, которые нужны.

А в своем канале На связи: SQL я публикую информацию с особенностями и нюансами в языке SQL, разбираю аналитические запросы и подходы работы с данными. Канал создала недавно с нулем подписчиков, но там уже есть интересная информация для работы аналитиков. Подписывайся!

1 комментарий