Operadores de subconsulta

Este tópico fornece informações de referência sobre os operadores de subconsulta aceitos no Snowflake. Uma subconsulta é uma consulta dentro de outra consulta.

Neste tópico:

ALL / ANY

As palavras-chave ALL e ANY podem ser usadas para aplicar um operador de comparação aos valores produzidos por uma subconsulta (que pode retornar mais de uma linha).

Sintaxe

<expr> comparisonOperator { ALL | ANY} ( <query> )
Copy

Onde:

comparisonOperator ::=
  { = | != | > | >= | < | <= }
Copy

Notas de uso

  • A expressão é comparada com o operador para cada valor que a subconsulta retorna:

    • Se ANY for especificado, o resultado é TRUE se qualquer linha da subconsulta satisfaz a condição, caso contrário, retorna FALSE.

    • Se ALL for especificado, o resultado é TRUE se todas as linhas da subconsulta satisfazem a condição, caso contrário, retorna FALSE.

  • Subconsultas ANY / ALL são atualmente aceitas apenas em uma cláusula WHERE.

  • Subconsultas ANY / ALL não podem aparecer como um argumento para um operador OR.

  • A subconsulta deve conter apenas um item em sua lista SELECT.

Exemplos

Use uma subconsulta != ALL para encontrar os departamentos que não têm funcionários:

SELECT department_id
FROM departments d
WHERE d.department_id != ALL (SELECT e.department_id
                              FROM employees e);
Copy

[ NOT ] EXISTS

Uma subconsulta EXISTS é uma expressão booleana que pode aparecer em uma cláusula WHERE ou HAVING, ou em qualquer função que opere em uma expressão booleana:

  • Uma expressão EXISTS avalia como TRUE se alguma linha é produzida pela subconsulta.

  • Uma expressão NOT EXISTS avalia como TRUE se nenhuma linha é produzida pela subconsulta.

Sintaxe

[ NOT ] EXISTS ( <query> )
Copy

Notas de uso

  • Subconsultas EXISTS correlacionadas são atualmente aceitas apenas em uma cláusula WHERE.

  • Subconsultas EXISTS correlacionadas não podem aparecer como um argumento para um operador OR.

  • Subconsultas EXISTS não correlacionadas são aceitas em qualquer lugar em que uma expressão booleana é permitida.

Exemplos

Use uma subconsulta NOT EXISTS correlacionada para encontrar os departamentos que não têm funcionários:

SELECT department_id
FROM departments d
WHERE NOT EXISTS (SELECT 1
                  FROM employees e
                  WHERE e.department_id = d.department_id);
Copy

[ NOT ] IN

Os operadores IN e NOT IN verificam se uma expressão está incluída ou não nos valores retornados por uma subconsulta.

Sintaxe

<expr> [ NOT ] IN ( <query> )
Copy

Notas de uso

  • IN é a abreviatura de = ANY e está sujeita às mesmas restrições que as subconsultas ANY.

  • NOT IN é a abreviatura de != ALL e está sujeita às mesmas restrições que as subconsultas ALL.

  • [NOT] IN também pode ser usado como operador em expressões que não envolvam uma subconsulta. Para obter mais detalhes, consulte [ NOT ] IN.

Exemplos

Use uma subconsulta NOT IN equivalente ao exemplo da subconsulta != ALL (anteriormente neste tópico):

SELECT department_id
FROM departments d
WHERE d.department_id NOT IN (SELECT e.department_id
                              FROM employees e);
Copy