Condição IN
Uma condição IN testa um valor para associação em um conjunto de valores ou uma subconsulta.
Sintaxe
expression [ NOT ] IN (expr_list | table_subquery)
Argumentos
- expressão
-
Uma expressão numérica, de caractere ou de data e hora que é avaliada em relação a expr_list ou table_subquery e deve ser compatível com o tipo de dados daquela lista ou subconsulta.
- expr_list
-
Uma ou várias expressões delimitadas por vírgula ou um ou mais conjuntos de expressões delimitadas por vírgula entre parênteses.
- table_subquery
-
Uma subconsulta que avalia em uma tabela com uma ou mais linhas, mas é limitada a somente uma coluna em sua lista de seleção.
- IN | NOT IN
-
IN retorna verdadeiro se a expressão é um membro da lista de expressão ou consulta. NOT IN retorna verdadeiro se a expressão não é um membro. IN e NOT IN retornam null e nenhuma linha é retornada nos seguintes casos: Se a expressão resulta em nulo; ou se não há valores expr_list ou table_subquery correspondentes e pelo menos uma dessas linhas de comparação resulta em null.
Exemplos
As seguintes condições são verdadeiras somente para os valores listados:
qtysold in (2, 4, 5) date.day in ('Mon', 'Tues') date.month not in ('Oct', 'Nov', 'Dec')
Otimização para grandes listas IN
Para otimizar a performance da consulta, uma lista IN que inclua mais do que 10 valores é internamente avaliada como uma matriz escalar. Listas IN com menos do que 10 valores são avaliadas como uma série de predicados OR. Essa otimização é compatível com os tipos de dados SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, BOOLEAN, CHAR, VARCHAR, DATE, TIMESTAMP e TIMESTAMPTZ.
Observe a saída EXPLAIN para a consulta para visualizar o efeito desta otimização. Por exemplo:
explain select * from sales QUERY PLAN -------------------------------------------------------------------- XN Seq Scan on sales (cost=0.00..6035.96 rows=86228 width=53) Filter: (salesid = ANY ('{1,2,3,4,5,6,7,8,9,10,11}'::integer[])) (2 rows)