Оператор 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))