Логические операторы — это инструменты, которые помогают объединять условия в запросах для более сложной фильтрации данных. Скорее всего вы уже сталкивались с ними в языках программирования. Если сравнить запросы с программой фильтрации спама в почтовом ящике, то логические операторы можно представить как правила, по которым письма отправляются в папку "Спам" или остаются в папке "Входящие".
SQL — это инструмент, который часто используется для выборки или анализа данных. Логические операторы (AND, OR, NOT) позволяют комбинировать несколько условий в одном запросе, чтобы отвечать на более сложные вопросы, такие как:
- Какие студенты старше 18 лет и имеют оценку "A"?
- Какие товары относятся к категории "Электроника" или "Бытовая техника"?
- Какие клиенты не совершали покупок?
Давайте разберём три главных логических оператора в SQL:
AND: оба условия должны быть истинными.OR: хотя бы одно из условий должно быть истинным.NOT: инвертирует (отрицает) условие.
Оператор AND: оба условия истинны
Оператор AND позволяет указать, что обе части условия должны быть выполнены для того, чтобы строка попала в результат.
Синтаксис
SELECT колонка1, колонка2
FROM таблица
WHERE условие AND условие2;
Пример 1: Фильтрация студентов старше 18 лет и с оценкой "A"
Предположим, у нас есть таблица students:
| id | name | age | grade |
|---|---|---|---|
| 1 | Alex | 20 | A |
| 2 | Maria | 19 | B |
| 3 | Otto | 17 | A |
| 4 | Anna | 22 | A |
Запрос:
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A';
Результат:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
Пример 2: Фильтрация сотрудников из департамента "HR" и с зарплатой выше 50000
SELECT name, department, salary
FROM employees
WHERE department = 'HR' AND salary > 50000;
Оператор OR: хотя бы одно условие истинно
Оператор OR используется, когда нужно выбрать строки, удовлетворяющие хотя бы одному из условий.
Синтаксис
SELECT колонка1, колонка2
FROM таблица
WHERE условие OR условие2;
Пример 1: Фильтрация студентов с оценкой "A" или "B"
SELECT name, age, grade
FROM students
WHERE grade = 'A' OR grade = 'B';
Результат:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Maria | 19 | B |
| Otto | 17 | A |
| Anna | 22 | A |
Пример 2: Товары из категории "Электроника" или с ценой меньше 100
Таблица products:
| product_id | name | category | price |
|---|---|---|---|
| 1 | Телевизор | Электроника | 300 |
| 2 | Утюг | Бытовая техника | 50 |
| 3 | Смартфон | Электроника | 700 |
| 4 | Чайник | Бытовая техника | 80 |
SELECT name, category, price
FROM products
WHERE category = 'Электроника' OR price < 100;
Результат:
| name | category | price |
|---|---|---|
| Телевизор | Электроника | 300 |
| Утюг | Бытовая техника | 50 |
| Чайник | Бытовая техника | 80 |
| Смартфон | Электроника | 700 |
Оператор NOT: инверсия условия
Если AND и OR задают условия, которые должны быть истинными, то NOT делает всё наоборот: он выбирает строки, для которых указанное условие ложно.
Синтаксис
SELECT колонка1, колонка2
FROM таблица
WHERE NOT условие;
Пример 1: Фильтрация студентов, у которых нет оценки "A"
SELECT name, age, grade
FROM students
WHERE NOT grade = 'A';
Результат:
| name | age | grade |
|---|---|---|
| Maria | 19 | B |
Пример 2: Извлечение товаров, которые не относятся к категории "Электроника"
SELECT name, category, price
FROM products
WHERE NOT category = 'Электроника';
Комбинация логических операторов
Логические операторы можно комбинировать для создания ещё более сложных условий. Например, если вы хотите выбрать студентов старше 18 лет и с оценкой "A" или "B", вы можете комбинировать AND и OR.
Синтаксис с комбинированием
SELECT колонка1, колонка2
FROM таблица
WHERE (условие1 AND условие2) OR условие3;
Пример: Студенты старше 18 лет с оценкой "A" или студенты с оценкой "B"
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR grade = 'B';
Результат:
| name | age | grade |
|---|---|---|
| Alex | 20 | A |
| Anna | 22 | A |
| Maria | 19 | B |
Приоритет выполнения операторов
Важно помнить, что SQL выполняет логические операторы в следующем порядке:
NOTANDOR
Вы можете использовать скобки для изменения порядка выполнения. Без скобок результат может быть неожиданным!
Пример: Сравнение с и без скобок
Что произойдёт в этом запросе?
SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';
Этот запрос выбирает студентов:
- Которые старше 18 лет и имеют оценку "A".
- Которые имеют оценку "B".
Приоритет выполнения операторов приводит к такому же результату, как и скобки:
SELECT name, age, grade
FROM students
WHERE (age > 18 AND grade = 'A') OR (grade = 'B');
Однако, если добавим скобки:
SELECT name, age, grade
FROM students
WHERE age > 18 AND (grade = 'A' OR grade = 'B');
Теперь будут выбраны студенты старше 18 лет с оценкой "A" или "B". Скобки действительно меняют всё!
Типичные ошибки при использовании логических операторов
- Забыты скобки. Это может привести к неожиданным результатам, особенно при комбинировании
ANDиOR. - Использование
NOTбез чёткого понимания, какие строки исключаются. - Неправильное использование логических операторов. Например,
ANDвместоORили наоборот. - Сложность условий. Очень длинные условия с несколькими
AND,OR,NOTбез комментариев могут стать трудночитаемыми.
Эти операторы — основа любых сложных запросов. Теперь вы готовы писать запросы, которые не только работают, но и находят ровно то, что нужно!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ