SQL Server IN-оператор

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

Пример SQL Server IN

Приведенный выше запрос эквивалентен следующему запросу, в котором вместо него используется оператор ИЛИ :

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;

SQL Server НЕ В примере

2) Пример использования оператора IN SQL Server с подзапросом

Следующий запрос возвращает список идентификационных номеров продуктов, расположенных в магазине с идентификатором 1 и имеющих количество больше или равное 30:

SELECT
    product_id
FROM
    production.stocks
WHERE
    store_id = 1 AND quantity >= 30;

SQL Server IN — простой запрос

Вы можете использовать приведенный выше запрос в качестве подзапроса, как показано в следующем запросе:

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 с примером подзапроса

В этом примере:

  • Сначала подзапрос вернул список идентификаторов продуктов.
  • Во-вторых, внешний запрос извлекает названия продуктов и прайс-листы тех продуктов, идентификатор продукта которых соответствует любому значению, возвращаемому подзапросом.

Более подробную информацию о подзапросе можно найти в руководстве по подзапросам.

Краткое содержание

  • Используйте оператор SQL Server IN, чтобы проверить, соответствует ли значение какому-либо значению в списке или возвращается ли оно подзапросом.
Мирослав С.

Автор статей, ИБ-специалист