В этом руководстве вы узнаете, как использовать оператор IN SQL Server для проверки соответствия значения какому-либо значению в списке.
Обзор оператора SQL Server IN
Оператор IN — это логический оператор, позволяющий проверить, соответствует ли значение какому-либо значению в списке.
Ниже показан синтаксис оператора IN SQL Server:
column | expression IN( v1, v2, v3, ...)
В этом синтаксисе:
- Сначала укажите столбец или выражение для проверки.
- Во-вторых, укажите список значений для проверки. Все значения должны иметь тот же тип, что и тип столбца или выражения.
Если значение в столбце или выражении равно любому значению в списке, результатом оператора IN будет ИСТИНА.
Оператор IN эквивалентен нескольким операторам OR, поэтому следующие предикаты эквивалентны:
column IN(v1, v2, v3) column = v1 OR column = v2 OR column = v3
Чтобы отменить оператор IN, используйте оператор NOT IN следующим образом:
column | expression NOT IN( v1, v2, v3, ...)
Результатом оператора NOT IN является значение ИСТИНА, если столбец или выражение не равно ни одному значению в списке.
В дополнение к списку значений вы можете использовать подзапрос, который возвращает список значений с оператором IN, как показано ниже:
column | expression IN(subquery)
В этом синтаксисе подзапрос представляет собой оператор SELECT, который возвращает список значений одного столбца.
Обратите внимание, что если список содержит NULL, результат IN или NOT IN будет UNKNOWN.
Примеры оператора IN для SQL Server
Мы будем использовать следующую таблицу production.products из примера базы данных.

1) Пример базового оператора SQL Server IN
В следующем операторе оператор IN используется для поиска продуктов, цена по прейскуранту которых равна одному из следующих значений: 89,99, 109,99 и 159,99:
SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price IN(89.99, 109.99, 159.99)
ORDER BY
list_price;

Приведенный выше запрос эквивалентен следующему запросу, в котором вместо него используется оператор ИЛИ :
SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price = 89.99 OR list_price = 109.99 OR list_price = 159.99
ORDER BY
list_price;
Чтобы найти продукты, цены по прейскуранту которых не являются одной из цен 89.99, 109.99 и 159.99, используйте оператор NOT IN. Например:
SELECT
product_name,
list_price
FROM
production.products
WHERE
list_price NOT IN(89.99, 109.99, 159.99)
ORDER BY
list_price;

2) Пример использования оператора IN SQL Server с подзапросом
Следующий запрос возвращает список идентификационных номеров продуктов, расположенных в магазине с идентификатором 1 и имеющих количество больше или равное 30:
SELECT
product_id
FROM
production.stocks
WHERE
store_id = 1 AND quantity >= 30;

Вы можете использовать приведенный выше запрос в качестве подзапроса, как показано в следующем запросе:
SELECT
product_name,
list_price
FROM
production.products
WHERE
product_id IN(
SELECT
product_id
FROM
production.stocks
WHERE
store_id = 1 AND quantity >= 30
)
ORDER BY
product_name;

В этом примере:
- Сначала подзапрос вернул список идентификаторов продуктов.
- Во-вторых, внешний запрос извлекает названия продуктов и прайс-листы тех продуктов, идентификатор продукта которых соответствует любому значению, возвращаемому подзапросом.
Более подробную информацию о подзапросе можно найти в руководстве по подзапросам.
Краткое содержание
- Используйте оператор SQL Server IN, чтобы проверить, соответствует ли значение какому-либо значению в списке или возвращается ли оно подзапросом.




