동일한 쿼리에서 HAVING 및 WHERE 절 사용(Visual Database Tools)
적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)
경우에 따라 그룹 전체에 조건을 적용하기 전에(HAVING
절 사용) 특정 개별 행을 그룹에서 제외할 수도 있습니다(WHERE
절 사용).
HAVING
절은 WHERE
절과 비슷하지만 그룹 전체에만(즉, 그룹을 나타내는 결과 집합의 행에) 적용되는 반면 WHERE
절은 개별 행에 적용됩니다. 쿼리는 WHERE
절과 HAVING
절을 모두 포함할 수 있습니다. 이 경우 다음을 수행합니다.
WHERE
절은 다이어그램 창의 테이블 또는 테이블 반환 개체의 개별 행에 먼저 적용됩니다.WHERE
절의 조건을 충족하는 행만 그룹화됩니다.그런 다음 결과 집합의 행에
HAVING
절이 적용됩니다.HAVING
조건을 충족하는 그룹만 쿼리 출력에 표시됩니다. GROUP BY 절 또는 집계 함수에도 표시되는 열에만HAVING
절을 적용할 수 있습니다.
조인된 두 테이블에 WHERE 및 HAVING 절 지정
참고 항목
이 문서에서 사용되는 데이터베이스는 pubs
데이터베이스로, GitHub의 Microsoft SQL Server용 Northwind 및 pubs 샘플 데이터베이스에서 제공됩니다.
예를 들어 titles
및 publishers
테이블을 조인하여 여러 출판사의 평균 도서 가격을 표시하는 쿼리를 만드는 경우를 생각해 볼 수 있습니다. 캘리포니아주에 있는 출판사 등과 같이 특정 출판사 집합에 대해서만 평균 가격을 표시하고, 그중에서도 평균 가격이 $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 조건 지정
쿼리의 그룹을 지정합니다. 자세한 내용은 쿼리 결과 행 그룹화(Visual Database Tools)를 참조하세요.
WHERE
조건의 기반으로 삼을 열이 아직 조건 창에 없으면 이 열을 추가합니다.데이터 열이 GROUP BY 절의 일부이거나 집계 함수에 포함되지 않는 한 출력 열을 지웁니다.
필터 열에서
WHERE
조건을 지정합니다. 쿼리 및 뷰 디자이너에서 SQL 문의HAVING
절에 조건을 추가합니다.참고 항목
이 프로시저에 대한 예시에 표시된 쿼리는 두 테이블(
titles
및publishers
)을 조인합니다.HAVING
절은 쿼리의 다음 지점에서 SQL 문에 포함되어 있습니다.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'
Group By 열의 그룹 및 요약 옵션 목록에서 Where을 선택합니다. 쿼리 및 뷰 디자이너에서 SQL 문의
HAVING
절에 있던 조건이 제거되고WHERE
절에 조건이 추가됩니다.대신
WHERE
절을 포함하도록 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;