Кафедра ИТКафедра ИТ
Блог
Обучение
  • О кафедре
  • Направления подготовки
  • Друзья и партнеры
  • Структура кафедры
  • Обращение к студентам
  • Официальный сайт «ВШП»
GitHub
Блог
Обучение
  • О кафедре
  • Направления подготовки
  • Друзья и партнеры
  • Структура кафедры
  • Обращение к студентам
  • Официальный сайт «ВШП»
  • ОП.08 - 06 - Специальные операторы IN и BETWEEN. Составные условия запросов AND, OR, NOT. Модификатор запроса DISTINCT

  1. Главная
  2. Учебные материалы
  3. ОП.08 - Основы проектиро...
  4. Специальные операторы IN...

Примечание

ЭТО АРХИВНАЯ ВЕРСИЯ КУРСА!

Материалы предназначаются для пересдающих дисциплину "ОП.08 - Основы проектирования баз данных" в соответствии с учебными планами СПО годов набора ДО 2024-го. Для того чтобы ознакомиться с актуальным курсом "ИТ.03 - Основы проектирования баз данных" включающим интерактивные примеры, перейдите по ссылке.

Материалы были перенесены со старого сайта с минимальной доработкой, поэтому не все возможности курса могут работать как ожидается, где-то может слететь форматирование.

Домашние задания в рамках курса проверяться не будут!

ОП.08 - 06 - Специальные операторы IN и BETWEEN. Составные условия запросов AND, OR, NOT. Модификатор запроса DISTINCT

Примеры данной темы используют учебную БД:

orders_01.sql

orders_01.sql

Специальные операторы IN и BETWEEN

Оператор IN

Специальный оператор IN позволяет узнать входит ли проверяемое значение столбца в список определённых значений.

Выведем все данные о заказах которые находятся в статусе новых (new) или находятся в обработке (in_progress) из таблицы orders:

SELECT * FROM orders
WHERE status IN ('new', 'in_progress');

Также существует синтаксис [NOT] IN, который исключает данный набор значений.

SELECT * FROM orders
WHERE status NOT IN ('new', 'in_progress');

Оператор BETWEEN

Специальный оператор BETWEEN min AND max позволяет узнать расположено ли проверяемое значение столбца в интервале между min и max включительно.

Выведем все данные о заказах с ценой от 1000 до 8000 рублей из таблицы orders:

SELECT * FROM orders
WHERE sum BETWEEN 1000 AND 8000;

Также существует синтаксис [NOT] BETWEEN min AND max, который исключает данный диапазон.

SELECT * FROM orders
WHERE sum NOT BETWEEN 1000 AND 8000;

Составные условия запросов AND, OR, NOT

Условие AND

Оператор AND — общее значение выражения истинно, если они оба истинны

Например выберем из таблицы orders все заказы, у которых сумма (sum) от 2000 и выше и количество товаров (products_count) меньше пяти.

SELECT * FROM orders WHERE sum >= 2000 AND products_count < 5;

Условие OR

Оператор OR — общее значение выражения истинно, если хотя бы одно из них истинно.

Например выберем из таблицы orders все заказы, у которых сумма (sum) больше 1500 или количество товаров (products_count) больше одного:

SELECT * FROM orders WHERE sum > 1500 OR products_count > 1;

Также существует вариант оператора XOR (исключающее «или») — общее значение выражения истинно, если один и только один аргумент является истинным, но он поддерживается не всеми СУБД.

Условие NOT

Оператор NOT — меняет значение специального оператора на противоположный.

Например выберем из таблицы orders все заказы, кроме отмененных (cancelled) и находящихся в доставке (delivery):

SELECT * FROM orders WHERE status NOT IN ('cancelled', 'delivery');

Порядок комбинирования условий

Оператор NOT всегда имеет наивысший приоритет и относится непосредственно к конструкции которая идет за ним до любого другого оператора.

Условие AND имеет больший приоритет, и выполняется ПЕРЕД оператором OR, даже если стоит после него. При использовании нескольких операторов AND или OR рекомендуется не полагаться на порядок обработки по умолчанию, а всегда использовать скобки для его директивного определения. Это повысит читаемость и стабильность кода.

Например, нам необходимо вывести все заказы у которых больше одного товара кроме статусов отмененный и новый, либо все заказы содержащие меньше 5 товаров в статусе отмененный:

SELECT * FROM orders
WHERE
  ( products_count > 1 AND status NOT IN ('cancelled', 'new') )
  OR
  ( products_count < 5 AND status = 'cancelled' )

Модификатор запроса DISTINCT

Иногда возникают ситуации, в которых нужно получить только уникальные записи. Для этого вы можете использовать модификатор запроса DISTINCT.

Например, выведем список уникальных статусов которые могут быть у заказа в таблице orders:

SELECT DISTINCT status FROM orders;

И сравните результат с запросом без данного модификатора:

SELECT status FROM orders;

Задания для самопроверки

Задание 1

Выберите из таблицы orders все отмененные заказы. У отмененных заказов status равен "cancelled".

ОТВЕТ
SELECT * FROM orders WHERE status = 'cancelled';

Задание 2

Выберите из таблицы orders все заказы кроме отмененных. У отмененных заказов status равен "cancelled".

ОТВЕТ
SELECT * FROM orders WHERE status != 'cancelled';

Задание 3

Выберите из таблицы orders все заказы содержащие более 3 товаров (products_count). Вывести нужно только номер (id) и сумму (sum) заказа.

ОТВЕТ
SELECT id, sum FROM orders WHERE products_count > 3;

Задание 4

Выберите из таблицы orders все отмененные (cancelled) и возвращенные (returned) товары. Используйте IN.

ОТВЕТ
SELECT * FROM orders WHERE status IN ('cancelled', 'returned');

Задание 5

Выберите из таблицы orders все заказы, у которых сумма (sum) больше 3000 или количество товаров (products_count) от 3 и больше.

ОТВЕТ
SELECT * FROM orders WHERE sum > 3000 OR products_count >= 3;

Задание 6

Выберите из таблицы orders все заказы, у которых сумма (sum) от 3000 и выше, а количество товаров (products_count) меньше 3.

ОТВЕТ
SELECT * FROM orders WHERE sum >= 3000 AND products_count < 3;

Задание 7

Выберите из таблицы orders все отмененные заказы стоимостью от 3000 до 10000 рублей включительно. Используйте BETWEEN.

ОТВЕТ
SELECT * FROM orders WHERE status = 'cancelled' AND sum BETWEEN 3000 AND 10000;

Задание 8

Выберите из таблицы orders все отмененные заказы исключая заказы стоимостью от 3000 до 10000 рублей включительно.

ОТВЕТ
SELECT * FROM orders WHERE status = 'cancelled' AND NOT sum BETWEEN 3000 AND 10000;

Задание 9

Выберите из таблицы orders все существующие статусы, исключив повторения при помощи DISTINCT.

ОТВЕТ
SELECT DISTINCT status FROM orders;
Последнее обновление: 16.02.2026, 14:50
Предыдущая
ОП.08 - 05 - Базовый синтаксис SQL запроса на примере оператора SELECT. Условный оператор WHERE
Следующая
ОП.08 - 07 - Оператор LIKE. Сортировка ORDER BY. Группировка GROUP BY и агрегатные функции
© Кафедра информационных технологий ЧУВО «ВШП», 2026. Версия: 0.35.5
Материалы доступны в соответствии с лицензией: