В этом руководстве вы узнаете, как использовать оператор 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, чтобы проверить, соответствует ли значение какому-либо значению в списке или возвращается ли оно подзапросом.