다음을 통해 공유


동일한 쿼리에서 HAVING 및 WHERE 절 사용(Visual Database Tools)

적용 대상: Azure SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System(PDW)

경우에 따라 그룹 전체에 조건을 적용하기 전에(WHERE 절 사용) 그룹에서 개별 행을 제외할 수 있습니다(HAVING 절 사용).

HAVING 절은 WHERE 절과 같지만 그룹 전체에만 적용되는 반면(즉, 그룹을 나타내는 결과 집합의 행에) WHERE 절은 개별 행에 적용됩니다. 쿼리에는 WHERE 절과 HAVING 절이 모두 포함될 수 있습니다. 이 경우 다음을 수행합니다.

  • WHERE 절은 다이어그램 창의 테이블 또는 테이블 값 개체의 각 행에 먼저 적용됩니다. WHERE 절의 조건을 충족하는 행만 그룹화됩니다.

  • 그런 다음 HAVING 절이 결과 집합의 행에 적용됩니다. HAVING 조건을 충족하는 그룹만 쿼리 출력에 표시됩니다. GROUP BY 절 또는 집계 함수에도 표시되는 열에만 HAVING 절을 적용할 수 있습니다.

조인된 두 테이블에 WHERE 및 HAVING 구문 추가

메모

이 문서에서 사용되는 데이터베이스는 pubs 데이터베이스로, GitHub의 Microsoft SQL Server 대한 Northwind 및 pubs 샘플 데이터베이스에서 사용할 수 있습니다.

예를 들어 titlespublishers 테이블에 조인하여 게시자 집합의 평균 책 가격을 보여 주는 쿼리를 만들고 있다고 상상해 보십시오. 특정 게시자 집합, 즉 캘리포니아 주에 있는 게시자에 대한 평균 가격을 알아보고자 합니다. 그리고 그 때에도 평균 가격이 $10.00 이상인 경우에만 보고 싶을 것입니다.

평균 가격을 계산하기 전에 캘리포니아에 있지 않은 게시자를 삭제하는 WHERE 절을 포함하여 첫 번째 조건을 설정할 수 있습니다. 조건은 데이터를 그룹화하고 요약한 결과를 기반으로 하기 때문에 두 번째 조건에는 HAVING 절이 필요합니다. 결과 SQL 문은 다음과 같을 수 있습니다.

SELECT titles.pub_id, AVG(titles.price)
FROM titles INNER JOIN publishers
   ON titles.pub_id = publishers.pub_id
WHERE publishers.state = 'CA'
GROUP BY titles.pub_id
HAVING AVG(price) > 10;

SQL Server Management Studio의 Visual Database Tools에서 HAVING 창에서 WHERE 절과 절을 모두 만들 수 있습니다. 기본적으로 열에 대한 검색 조건을 지정하면 조건은 HAVING 절의 일부가 됩니다. 그러나 조건을 WHERE 절로 변경할 수 있습니다.

동일한 열과 관련된 WHERE 절 및 HAVING 절을 만들 수 있습니다. 이렇게 하려면 조건 창에 열을 두 번 추가한 다음 한 인스턴스를 HAVING 절의 일부로 지정하고 다른 인스턴스는 WHERE 절의 일부로 지정해야 합니다.

집계 쿼리에서 WHERE 조건 지정

  1. 쿼리에 대한 그룹을 지정합니다. 자세한 내용은 쿼리 결과(Visual Database Tools) 그룹 행을 참조하세요.

  2. 조건 창에 아직 없는 경우 WHERE 조건을 기반으로 할 열을 추가합니다.

  3. 데이터 열이 GROUP BY 절의 일부이거나 집계 함수에 포함되지 않는 한 출력 열을 지웁니다.

  4. 필터 열에서 WHERE 조건을 지정합니다. 쿼리 및 뷰 디자이너는 SQL 문의 HAVING 절에 조건을 추가합니다.

    메모

    이 프로시저 예제에 표시된 쿼리는 titlespublishers두 테이블을 조인합니다.

    쿼리의 이 시점에서 SQL 문에는 HAVING 절이 포함됩니다.

    SELECT titles.pub_id, AVG(titles.price)
    FROM titles INNER JOIN publishers
        ON titles.pub_id = publishers.pub_id
    GROUP BY titles.pub_id
    HAVING publishers.state = 'CA'
    
  5. 그룹별 열의 그룹 및 요약 옵션 목록에서 위치 선택합니다. 쿼리 및 뷰 디자이너는 SQL 문의 HAVING 절에서 조건을 제거하고 WHERE 절에 추가합니다.

    SQL 문은 대신 WHERE 절을 포함하도록 변경됩니다.

    SELECT titles.pub_id, AVG(titles.price)
    FROM titles INNER JOIN publishers
        ON titles.pub_id = publishers.pub_id
    WHERE publishers.state = 'CA'
    GROUP BY titles.pub_id;