Найти тему
ОбоВсем

Оператор IN

Оглавление

Оператор IN позволяет указать список значений либо введенный явным образом, либо при помощи подзапроса и сравнить некое значение с этим списком в предложении WHERE или HAVING. Иными словами, вы можете спросить: «Есть значение А в этом списке значений?»

СИНТАКСИС SQL 2003

{WHERE | HAVING | {AND | OR}} значение [NOT] IN ({сравнит_знач1, сравнит_знач2 [, …] | подзапрос})

КЛЮЧЕВЫЕ СЛОВА

{WHERE HAVING (AND | OR}} значение

Разрешается использовать либо с предложением WHERE, либо с предложением HAVING. Сравнение, входящее в предложение IN, -также может использоваться в предложении AND или OR предложений WHERE или HAVING с несколькими условиями. Параметр значение может относиться к любому типу данных, но обычно представляет собой имя столбца, на который ссылается транзакция, или, возможно, хост-переменную, если значение используется программно.

NOT

Дополнительное предложение, которое заставляет составлять результирующий набор из значений, не входящих в список.

IN ({вычисляемое_знач1, вычисляемое_знач2 [, …] | подзапрос})

Определяется список сравнительных значений, по которым будет вестись сравнение. Каждое сравнительное значение должно относиться к тому же или совместимому типу, что и исходное значение. Эти значения подчиняются стандартным правилам для типов данных. Например, строковые значения должны быть заключены в кавычки, а целочисленные значения - не должны. В качестве альтернативы указанию конкретных значений вы можете написать в скобках подзапрос, который возвращает одно или несколько значений совместимого типа данных.

В следующем примере для SQL Server мы ищем в таблице employee базы данных HR всех служащих, которые живут в штатах Джорджия, Теннеси, Алабама или Кентукки.

SELECT *
FROM employee
WHERE home_state IN ('AL', 'GA', 'TN', 'KY');

Также мы можем найти в таблице employee базы данных HR всех служащих, которые упоминаются в качестве авторов в базе данных PUBS.

SELECT *
FROM employee
WHERE emp_id IN (SELECT au_id FROM authors);

Вы также можете использовать ключевое слово NOT для создания результирующего набора на основе отсутствия какого-то значения. В следующем примере штаб-квартира компании находится в Нью-Йорке, и многие сотрудники приезжают из соседних штатов. Мы хотим увидеть всех таких сотрудников.

SELECT *
FROM employee
WHERE home_state NOT IN ('NY', 'NJ', 'MA', 'CT', 'RI', 'DE', 'NH');

Обратите внимание, что Oracle, полностью поддерживая функциональность стандарта ANSI, расширяет возможности оператора IN, позволяя сравнивать несколько аргументов. Например, в Oracle допустимо использование следующей инструкции: SELECT… WHERE…IN.

SELECT *
FROM employee e
WHERE (e.emp_id, e.emp_dept) IN ((242, 'sales'), (442, 'mfg'), (747, 'mkt))