Predicado IN

O predicado IN compara um valor ou valores com uma cobrança de valores.

Read syntax diagramSkip visual syntax diagramexpression1NOTIN(fullselect1)(,expression2)expression2row-value-expressionNOTIN(fullselect2)

A seleção completa deve identificar um número de colunas que é o mesmo que o número de expressões especificado à esquerda da palavra-chave IN (SQLSTATE 428C4). A seleção completa pode retornar qualquer número de linhas.

  • Um predicado IN do formulário:
       expression IN expression
    é equivalente a um predicado básico do formulário:
       expression = expression
  • Um predicado IN do formulário:
       expression IN (fullselect)
    é equivalente a um predicado quantificado da forma:
       expression = ANY (fullselect)
  • Um predicado IN do formulário:
       expression NOT IN (fullselect)
    é equivalente a um predicado quantificado da forma:
       expression <> ALL (fullselect)
  • Um predicado IN do formulário:
       expression IN (expressiona, expressionb, ..., expressionk)
    é equivalente a:
       expression = ANY (fullselect)
    onde fullselect no formulário de valores-cláusula é:
       VALUES (expressiona), (expressionb), ..., (expressionk)
  • Um predicado IN do formulário:
       (expressiona, expressionb,..., expressionk) IN (fullselect)
    é equivalente a um predicado quantificado da forma:
       (expressiona, expressionb,..., expressionk) = ANY (fullselect)
    Observe que o operando do lado esquerdo desta forma destes predicados é referido como uma linha-valor-expressão.

Os valores para expression1 e expression2 ou a coluna de fullselect1 no predicado IN devem ser compatíveis. Cada campo da linha-valor-expressão e sua coluna correspondente de fullselect2 no predicado IN deve ser compatível. As regras para tipos de dados de resultados podem ser usadas para determinar os atributos do resultado utilizado na comparação.

Os valores para as expressões no predicado IN (incluindo colunas correspondentes de um fullselect) podem ter páginas de código diferentes. Se uma conversão for necessária, a página de código será determinada aplicando regras para conversões de sequência para a lista IN primeiro, e depois para o predicado, usando a página de código derivada para a lista IN como segunda opere.

Exemplos

Exemplo 1: A seguinte condição avalia-se para true se o valor na linha sob avaliação na coluna DEPTNO contém D01, B01ou C01:
   DEPTNO IN ('D01', 'B01', 'C01')
Exemplo 2: A seguinte condição avalia-se para true apenas se o EMPNO (número do funcionário) no lado esquerdo corresponde ao EMPNO de um funcionário no departamento E11:
   EMPNO IN (SELECT EMPNO FROM EMPLOYEE WHERE WORKDEPT = 'E11')

Exemplo 3: Dado as informações a seguir, este exemplo avalia para true se o valor específico na linha da coluna COL_1 corresponde a qualquer um dos valores da lista:

Tabela 1. IN Predicate exemplo
Expressões Tipo Página de Códigos
COL_1 coluna 850
HV_2 variável de host 437
HV_3 variável de host 437
CON_1 constante 850
Ao avaliar o predicado:
   COL_1 IN (:HV_2, :HV_3, CON_4)
as duas variáveis de host serão convertidas para a página de código 850, com base nas regras para conversões de cordas.
Exemplo 4: A seguinte condição avalia-se para true se o ano especificado em EMENDATE (a data em que uma atividade de funcionário em um projeto terminou) corresponde a qualquer um dos valores especificados na lista (o ano corrente ou os dois anos anteriores):
   YEAR(EMENDATE) IN (YEAR(CURRENT DATE),
                      YEAR(CURRENT DATE - 1 YEAR),
                      YEAR(CURRENT DATE - 2 YEARS))
Exemplo 5: A seguinte condição avalia para true se ambos ID e DEPT no lado esquerdo coincidem MANAGER e DEPTNUMB respectivamente para qualquer linha da tabela ORG.
   (ID, DEPT) IN (SELECT MANAGER, DEPTNUMB FROM ORG)