Логические операторы: AND, OR, NOT
🔍 Что такое логические операторы?
Логические операторы в SQL — это инструменты, которые позволяют комбинировать несколько условий в запросах. Они помогают фильтровать данные более гибко и точно. Основные операторы:
AND— И (все условия должны быть истинными)OR— ИЛИ (хотя бы одно условие должно быть истинным)NOT— НЕ (инверсия условия)
🧩 Оператор AND: строгий фильтр
Используется, когда нужно, чтобы все указанные условия выполнялись одновременно.
-- Пример: найти сотрудников из отдела IT с зарплатой больше 5000
SELECT name, department, salary
FROM employees
WHERE department = 'IT' AND salary > 5000;
📌 Важно: AND работает как жесткий фильтр. Если хотя бы одно условие не выполняется, строка не попадет в результат.
🎲 Оператор OR: гибкий выбор
Применяется, когда достаточно выполнения хотя бы одного из условий.
-- Пример: найти сотрудников из отдела Sales ИЛИ Marketing
SELECT name, department
FROM employees
WHERE department = 'Sales' OR department = 'Marketing';
⚠️ Особенность: OR может возвращать больше строк, чем вы ожидаете, поэтому важно точно формулировать условия.
🔄 Оператор NOT: инверсия условия
Позволяет исключить строки, соответствующие указанному условию.
-- Пример: все сотрудники, НЕ работающие в IT
SELECT name, department
FROM employees
WHERE NOT department = 'IT';
💡 Совет: NOT можно заменить оператором != или <>, но иногда NOT читается лучше, особенно в сложных условиях.
🧠 Комбинирование операторов
Логические операторы можно сочетать для создания сложных условий. Используйте скобки для группировки!
-- Пример: сотрудники из IT с зарплатой > 5000 ИЛИ из Sales с зарплатой > 7000
SELECT name, department, salary
FROM employees
WHERE (department = 'IT' AND salary > 5000)
OR (department = 'Sales' AND salary > 7000);
📌 Правило приоритета: NOT > AND > OR. Скобки меняют порядок вычислений.
🚀 Практика: реалистичные примеры
Пример 1: Фильтрация заказов
-- Заказы стоимостью от 100 до 500 ИЛИ от 1000, но только не от клиента ID 5
SELECT order_id, customer_id, amount
FROM orders
WHERE (amount BETWEEN 100 AND 500 OR amount >= 1000)
AND NOT customer_id = 5;
Пример 2: Поиск пользователей
-- Найти активных пользователей из Москвы ИЛИ Санкт-Петербурга,
-- но не администраторов
SELECT username, city, is_admin
FROM users
WHERE (city = 'Москва' OR city = 'Санкт-Петербург')
AND is_active = TRUE
AND NOT is_admin = TRUE;
💡 Полезные советы
- Всегда проверяйте логику сложных условий — рисуйте схемы или тестируйте на небольших данных.
- Используйте скобки для явного указания порядка операций, даже если приоритет вам кажется очевидным.
- Для лучшей читаемости форматируйте сложные запросы с отступами, как в примерах выше.
- Помните, что
WHERE NOT condition— это то же самое, чтоWHERE condition = FALSE(для булевых значений).
📌 Итоги
Логические операторы — мощный инструмент для точной фильтрации данных:
ANDтребует выполнения всех условийORдопускает выполнение любого из условийNOTинвертирует условие
Комбинируйте их с умом, используйте скобки для сложных условий, и ваши запросы станут намного выразительнее!