하위 쿼리 연산자

이 항목에서는 Snowflake에서 지원되는 하위 쿼리 연산자에 대한 참조 정보를 제공합니다. 하위 쿼리는 다른 쿼리 내의 쿼리입니다.

이 항목의 내용:

ALL / ANY

ALL 및 ANY 키워드를 사용해 (두 개 이상의 행을 반환할 수 있는) 하위 쿼리로 생성된 값에 비교 연산자를 적용할 수 있습니다.

구문

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

여기서:

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

사용법 노트

  • 이 연산자로 식을 하위 쿼리가 반환하는 각각의 값과 비교합니다.

    • ANY가 지정된 경우, 결과는 하위 쿼리의 한 행이라도 조건을 충족하면 TRUE이고 그렇지 않으면 FALSE를 반환합니다.

    • ALL이 지정된 경우, 결과는 하위 쿼리의 모든 행이 조건을 충족하면 TRUE이고 그렇지 않으면 FALSE를 반환합니다.

  • ANY/ALL 하위 쿼리는 현재 WHERE 절에서만 지원됩니다.

  • ANY/ALL 하위 쿼리는 OR 연산자에 대한 인자로 나타날 수 없습니다.

  • 하위 쿼리는 SELECT 목록에 하나의 항목만 포함해야 합니다.

직원이 없는 부서를 찾으려면 != ALL 하위 쿼리를 사용하십시오.

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

[ NOT ] EXISTS

EXISTS 하위 쿼리는 WHERE 또는 HAVING 절이나 부울 식에서 작동하는 모든 함수에서 나타날 수 있는 부울 식입니다.

  • EXISTS 식은 하위 쿼리로 생성되는 행이 있는 경우 TRUE로 계산됩니다.

  • NOT EXISTS 식은 하위 쿼리로 생성되는 행이 없는 경우 TRUE로 계산됩니다.

구문

[ NOT ] EXISTS ( <query> )
Copy

사용법 노트

  • 상관 관계가 있는 EXISTS 하위 쿼리는 현재 WHERE 절에서만 지원됩니다.

  • 상관 관계가 있는 EXISTS 하위 쿼리는 OR 연산자에 대한 인자로 나타날 수 없습니다.

  • 상관 관계가 없는 EXISTS 하위 쿼리는 부울 식이 허용되는 곳이면 어디서든 지원됩니다.

직원이 없는 부서를 찾으려면 상관 관계가 있는 NOT EXISTS 하위 쿼리를 사용하십시오.

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

[ NOT ] IN

IN 및 NOT IN 연산자는 하위 쿼리에서 반환하는 값에 식이 포함되어 있는지 검사합니다.

구문

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

사용법 노트

  • IN은 = ANY 의 축약형으로, ANY 하위 쿼리와 똑같은 제한 사항이 적용됩니다.

  • NOT IN은 != ALL 의 축약형으로, ALL 하위 쿼리와 똑같은 제한 사항이 적용됩니다.

  • [NOT] IN 은 하위 쿼리를 포함하지 않는 식에서 연산자로 사용할 수도 있습니다. 자세한 내용은 [ NOT ] IN 섹션을 참조하십시오.

(이 항목의 앞부분에 있는) != ALL 하위 쿼리 예와 똑같은 NOT IN 하위 쿼리를 사용합니다.

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