JavaRush /Курсы /SQL SELF /Логические операторы (AND, OR, NOT): комбинирование услов...

Логические операторы (AND, OR, NOT): комбинирование условий

SQL SELF
2 уровень , 2 лекция
Открыта

Логические операторы — это инструменты, которые помогают объединять условия в запросах для более сложной фильтрации данных. Скорее всего вы уже сталкивались с ними в языках программирования. Если сравнить запросы с программой фильтрации спама в почтовом ящике, то логические операторы можно представить как правила, по которым письма отправляются в папку "Спам" или остаются в папке "Входящие".

SQL — это инструмент, который часто используется для выборки или анализа данных. Логические операторы (AND, OR, NOT) позволяют комбинировать несколько условий в одном запросе, чтобы отвечать на более сложные вопросы, такие как:

  • Какие студенты старше 18 лет и имеют оценку "A"?
  • Какие товары относятся к категории "Электроника" или "Бытовая техника"?
  • Какие клиенты не совершали покупок?

Давайте разберём три главных логических оператора в SQL:

  1. AND: оба условия должны быть истинными.
  2. OR: хотя бы одно из условий должно быть истинным.
  3. 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 выполняет логические операторы в следующем порядке:

  1. NOT
  2. AND
  3. OR

Вы можете использовать скобки для изменения порядка выполнения. Без скобок результат может быть неожиданным!

Пример: Сравнение с и без скобок

Что произойдёт в этом запросе?

SELECT name, age, grade
FROM students
WHERE age > 18 AND grade = 'A' OR grade = 'B';

Этот запрос выбирает студентов:

  1. Которые старше 18 лет и имеют оценку "A".
  2. Которые имеют оценку "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". Скобки действительно меняют всё!

Типичные ошибки при использовании логических операторов

  1. Забыты скобки. Это может привести к неожиданным результатам, особенно при комбинировании AND и OR.
  2. Использование NOT без чёткого понимания, какие строки исключаются.
  3. Неправильное использование логических операторов. Например, AND вместо OR или наоборот.
  4. Сложность условий. Очень длинные условия с несколькими AND, OR, NOT без комментариев могут стать трудночитаемыми.

Эти операторы — основа любых сложных запросов. Теперь вы готовы писать запросы, которые не только работают, но и находят ровно то, что нужно!

2
Задача
SQL SELF, 2 уровень, 2 лекция
Недоступна
Использование оператора `AND` для фильтрации данных
Использование оператора `AND` для фильтрации данных
2
Задача
SQL SELF, 2 уровень, 2 лекция
Недоступна
Использование оператора `OR` для фильтрации данных
Использование оператора `OR` для фильтрации данных
Комментарии (2)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Сергей Третяк Уровень 14
30 сентября 2025
названия категорий должны быть в одинарных кавычках, хотелось бы, что бы это оговаривалось в правилах(уроках)
Anemon Уровень 13 Expert
24 июля 2025
🤓