- Categorias:
[ NOT ] IN¶
Testa se seu argumento é ou não um dos membros de uma lista explícita ou o resultado de uma subconsulta.
Nota
Na forma de subconsulta, IN é equivalente a = ANY
e NOT IN é equivalente a <> ALL
.
Dica
Você pode usar o serviço de otimização de pesquisa para melhorar o desempenho de consultas que chamam essa função. Para obter mais detalhes, consulte Serviço de otimização de pesquisa.
Sintaxe¶
Para comparar valores individuais:
<value> [ NOT ] IN ( <value_1> [ , <value_2> ... ] )
Para comparar construtores ROW (listas de valores entre parênteses):
( <value_A> [, <value_B> ... ] ) [ NOT ] IN ( ( <value_1> [ , <value_2> ... ] ) [ , ( <value_3> [ , <value_4> ... ] ) ... ] )
Para comparar um valor com os valores retornados por uma subconsulta:
<value> [ NOT ] IN ( <subquery> )
Parâmetros¶
value
O valor a ser pesquisado.
value_A
,value_B
Os elementos de um construtor ROW pelos quais procurar.
Garanta que cada valor à direita de
IN
(por exemplo,(value3, value4)
) tenha o mesmo número de elementos que o valor à esquerda deIN
(por exemplo,(value_A, value_B)
).value_#
Um valor com o qual
value
deve ser comparado.Se os valores a serem comparados são construtores ROW, então cada
value_#
é um elemento individual de um construtor ROW.subquery
Uma subconsulta que retorna uma lista de valores aos quais
value
pode ser comparado.
Notas de uso¶
Como na maioria dos contextos, NULL não é igual a NULL. Se
value
for NULL, então o valor de retorno da função é NULL, quer a lista ou subconsulta contenha ou não NULL.Por exemplo, o seguinte retorna NULL, e não TRUE:
SELECT NULL IN (1, 2, NULL) AS RESULT;
Sintaticamente,
IN
é tratado como um operador e não como uma função. O exemplo abaixo mostra a diferença entre usarIN
como operador e chamarf()
como função:SELECT f(a, b), x IN (y, z) ...
Você não pode utilizar a sintaxe da função com
IN
. Por exemplo, não se pode reescrever o exemplo anterior como:SELECT f(a, b), IN(x, (y, z)) ...
IN
também é considerado um operador de subconsulta.
Detalhes do agrupamento¶
Arguments with collation specifications are currently not supported.
Exemplos¶
Uso de IN
com literais simples¶
Os exemplos seguintes mostram como usar IN
e NOT IN
com literais simples:
SELECT 1 IN (1, 2, 3) AS RESULT; +--------+ | RESULT | |--------| | True | +--------+SELECT 4 NOT IN (1, 2, 3) AS RESULT; +--------+ | RESULT | |--------| | True | +--------+
Uso de IN
com uma subconsulta¶
SELECT 'a' IN ( SELECT column1 FROM VALUES ('b'), ('c'), ('d') ) AS RESULT; +--------+ | RESULT | |--------| | False | +--------+
Uso de IN
com uma tabela¶
Estes exemplos mostram como usar IN
com uma tabela. A instrução abaixo cria a tabela usada nos exemplos.
CREATE TABLE my_table (col_1 INTEGER, col_2 INTEGER, col_3 INTEGER); INSERT INTO my_table (col_1, col_2, col_3) VALUES (1, 1, 1), (1, 2, 3), (4, 5, NULL);
Este exemplo mostra como usar IN
com uma única coluna de uma tabela:
SELECT col_1, col_2, col_3 FROM my_table WHERE (col_1) IN (1, 10, 100, 1000) ORDER BY col_1, col_2, col_3; +-------+-------+-------+ | COL_1 | COL_2 | COL_3 | |-------+-------+-------| | 1 | 1 | 1 | | 1 | 2 | 3 | +-------+-------+-------+
Este exemplo mostra como usar IN
com várias colunas de uma tabela:
SELECT col_1, col_2, col_3 FROM my_table WHERE (col_1, col_2, col_3) IN ( (1,2,3), (4,5,6) ); +-------+-------+-------+ | COL_1 | COL_2 | COL_3 | |-------+-------+-------| | 1 | 2 | 3 | +-------+-------+-------+
Este exemplo mostra como usar IN
com uma subconsulta que lê várias colunas de uma tabela:
SELECT (1, 2, 3) IN ( SELECT col_1, col_2, col_3 FROM my_table ) AS RESULT; +--------+ | RESULT | |--------| | True | +--------+
Uso de NULL¶
Lembre-se de que NULL != NULL. Nenhuma das consultas seguintes retorna uma correspondência quando o valor à esquerda ou à direita de IN
contém um NULL:
SELECT NULL IN (1, 2, NULL) AS RESULT; +--------+ | RESULT | |--------| | NULL | +--------+SELECT (4, 5, NULL) IN ( (4, 5, NULL), (7, 8, 9) ) AS RESULT; +--------+ | RESULT | |--------| | NULL | +--------+