하위 쿼리 연산자

하위 쿼리 는 다른 쿼리 내의 쿼리입니다. 하위 쿼리 연산자는 하위 쿼리에서 생성된 값에 대한 작업을 수행합니다.

Snowflake는 다음과 같은 하위 쿼리 연산자를 지원합니다.

ALL / ANY

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

구문

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

여기서:

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

사용법 노트

  • 식은 하위 쿼리가 반환하는 각 값에 대한 연산자와 비교됩니다.

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

    • ANY 가 지정된 경우, 결과는 하위 쿼리의 한 행이라도 조건을 충족하면 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