Operadores de subconsulta¶
Uma subconsulta é uma consulta dentro de outra consulta. Os operadores de subconsulta executam operações nos valores produzidos pelas subconsultas.
O Snowflake oferece suporte aos seguintes operadores de subconsulta:
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> )
Onde:
comparisonOperator ::=
  { = | != | > | >= | < | <= }
Notas de uso¶
- A expressão é comparada com o operador para cada valor que a subconsulta retorna: - Se ALL for especificado, o resultado é TRUE se todas as linhas da subconsulta satisfazem a condição; caso contrário, retorna FALSE. 
- Se ANY for especificado, o resultado é TRUE se qualquer linha da subconsulta satisfaz 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 argumento de 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);
[ NOT ] EXISTS¶
Uma subconsulta EXISTS é uma expressão booliana que pode aparecer em uma cláusula WHERE ou HAVING, ou em qualquer função que opere em uma expressão booliana:
- 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> )
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 booliana é 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);
[ NOT ] IN¶
Os operadores IN e NOT IN verificam se uma expressão está inclusa nos valores produzidos por uma subconsulta.
Sintaxe¶
<expr> [ NOT ] IN ( <query> )
Notas de uso¶
- IN é a abreviatura de - = ANYe está sujeita às mesmas restrições que as subconsultas ANY.
- NOT IN é a abreviatura de - != ALLe está sujeita às mesmas restrições que as subconsultas ALL.
- [NOT] IN também pode ser usado como um operador em expressões que não envolvam uma subconsulta. Para obter mais detalhes, consulte [ NOT ] IN. 
Exemplos¶
Use uma subconsulta NOT IN que seja equivalente ao exemplo de subconsulta != ALL (anteriormente neste tópico) para encontrar os departamentos que não têm funcionários:
SELECT department_id
  FROM departments d
  WHERE d.department_id NOT IN (
    SELECT e.department_id
      FROM employees e);