Галерея
7757 8119 8300 8698 8817 9504 9722 9937
Интересные записи
Топовые новости
Новое

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

Источник