As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Condição IN
Uma IN condição testa um valor para associação em um conjunto de valores ou em 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.
- EM | NOT EM
-
IN retornará verdadeiro se a expressão for membro da lista de expressões ou consulta. NOT IN retornará verdadeiro se a expressão não for um membro. IN e NOT IN retornam NULL e nenhuma linha é retornada nos seguintes casos: Se a expressão gerar nulo; ou se não houver valores correspondentes de expr_list ou table_subquery e pelo menos uma dessas linhas de comparação gerar 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 comSMALLINT,INTEGER,BIGINT,REAL, DOUBLEPRECISION,BOOLEAN,CHAR,VARCHAR, DATETIMESTAMP, e tipos de TIMESTAMPTZ dados.
Veja a EXPLAIN saída da consulta para ver o efeito dessa 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)