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> )
Onde:
comparisonOperator ::= { = | != | > | >= | < | <= }
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);
[ 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> )
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);
[ 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> )
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);