동일한 쿼리에서 HAVING 및 WHERE 절 사용(Visual Database Tools)Use HAVING and WHERE Clauses in the Same Query (Visual Database Tools)

경우에 따라서는 HAVING 절을 사용하여 그룹 전체에 조건을 적용하기 전에 WHERE 절을 사용하여 그룹에서 개별 행을 제외해야 할 수도 있습니다.In some instances, you might want to exclude individual rows from groups (using a WHERE clause) before applying a condition to groups as a whole (using a HAVING clause).

HAVING 절은 WHERE 절과 비슷하지만 그룹 전체 즉, 그룹을 나타내는 결과 집합의 행에만 적용된다는 점에서 차이가 있습니다. 반면, WHERE 절은 개별 행에 적용됩니다.A HAVING clause is like a WHERE clause, but applies only to groups as a whole (that is, to the rows in the result set representing groups), whereas the WHERE clause applies to individual rows. 쿼리에는 WHERE 절과 HAVING 절이 모두 포함될 수 있습니다.A query can contain both a WHERE clause and a HAVING clause. 이 경우 다음을 수행합니다.In that case:

  • 다이어그램 창에서 테이블이나 테이블 반환 개체의 개별 행에 WHERE 절이 먼저 적용됩니다.The WHERE clause is applied first to the individual rows in the tables or table-valued objects in the Diagram pane. WHERE 절의 조건에 맞는 행만 그룹화됩니다.Only the rows that meet the conditions in the WHERE clause are grouped.

  • 그런 다음 결과 집합의 행에 HAVING 절이 적용됩니다.The HAVING clause is then applied to the rows in the result set. HAVING 조건에 맞는 그룹만 쿼리 출력에 표시됩니다.Only the groups that meet the HAVING conditions appear in the query output. 집계 함수나 GROUP BY 절에도 나타나는 열에만 HAVING 절을 적용할 수 있습니다.You can apply a HAVING clause only to columns that also appear in the GROUP BY clause or in an aggregate function.

예를 들어 titlespublishers 테이블을 조인하여 여러 출판사의 평균 도서 가격을 표시하는 쿼리를 만드는 경우를 생각해 볼 수 있습니다.For example, imagine that you are joining the titles and publishers tables to create a query showing the average book price for a set of publishers. 캘리포니아 주에 있는 출판사 등과 같이 특정 출판사 집합에 대해서만 평균 가격을 표시하고,You want to see the average price for only a specific set of publishers — perhaps only the publishers in the state of California. 그 중에서도 평균 가격이 $10.00 이상인 경우로만 결과를 제한하려고 합니다.And even then, you want to see the average price only if it is over $10.00.

평균 가격을 계산하기 전에 캘리포니아에 있지 않은 출판사는 모두 제외하도록 WHERE 절을 사용하여 첫 번째 조건을 설정할 수 있습니다.You can establish the first condition by including a WHERE clause, which discards any publishers that are not in California, before calculating average prices. 두 번째 조건은 데이터를 그룹화하고 요약한 결과를 기반으로 해야 하므로 이 조건에는 HAVING 절이 필요합니다.The second condition requires a HAVING clause, because the condition is based on the results of grouping and summarizing the data. 결과 SQL 문은 다음과 같습니다.The resulting SQL statement might look like this:

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  

HAVING 절과 WHERE 절을 모두 조건 창에서 만들 수 있습니다.You can create both HAVING and WHERE clauses in the Criteria pane. 기본적으로 열에 대한 검색 조건을 지정하면 이 조건이 HAVING 절의 일부가 됩니다.By default, if you specify a search condition for a column, the condition becomes part of the HAVING clause. 그러나 이 조건이 WHERE 절에 사용되도록 변경할 수도 있습니다.However, you can change the condition to be a WHERE clause.

동일한 열을 대상으로 WHERE 절과 HAVING 절을 만들 수 있습니다.You can create a WHERE clause and HAVING clause involving the same column. 이렇게 하려면 조건 창에 열을 두 번 추가한 다음 한 인스턴스는 HAVING 절의 일부로 지정하고 다른 인스턴스는 WHERE 절의 일부로 지정해야 합니다.To do so, you must add the column twice to the Criteria pane, then specify one instance as part of the HAVING clause and the other instance as part of the WHERE clause.

집계 쿼리에서 WHERE 조건을 지정하려면To specify a WHERE condition in an aggregate query

  1. 쿼리의 그룹을 지정합니다.Specify the groups for your query. 자세한 내용은 쿼리 결과 행 그룹화(Visual Database Tools)를 참조하세요.For details, see Group Rows in Query Results (Visual Database Tools).

  2. WHERE 조건의 기반으로 삼을 열이 아직 조건 창에 없으면 이 열을 추가합니다.If it is not already in the Criteria pane, add the column on which you want to base the WHERE condition.

  3. 데이터 열이 GROUP BY 절의 일부가 아니거나 집계 함수에 포함되지 않은 경우 출력 열을 지웁니다.Clear the Output column unless the data column is part of the GROUP BY clause or included in an aggregate function.

  4. 필터 열에서 WHERE 조건을 지정합니다.In the Filter column, specify the WHERE condition. 쿼리 및 뷰 디자이너에서 SQL 문의 HAVING 절에 조건을 추가합니다.The Query and View Designer adds the condition to the HAVING clause of the SQL statement.

    참고

    이 절차의 예제로 나와 있는 쿼리에서는 titles 테이블과 publishers테이블을 조인합니다.The query shown in the example for this procedure joins two tables, titles and publishers.

    HAVING 절은 쿼리의 다음 지점에서 SQL 문에 포함되어 있습니다.At this point in the query, the SQL statement contains a HAVING clause:

    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. 그룹화 방법 열의 그룹 및 요약 옵션 목록에서 Where 를 선택합니다.In the Group By column, select Where from the list of group and summary options. 쿼리 및 뷰 디자이너에서 SQL 문의 HAVING 절에 있던 조건이 제거되고 WHERE 절에 조건이 추가됩니다.The Query and View Designer removes the condition from the HAVING clause in the SQL statement and adds it to the WHERE clause.

    다음과 같이 WHERE 절이 대신 포함되도록 SQL 문이 변경됩니다.The SQL statement changes to include a WHERE clause instead:

    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  
    

참고 항목See Also

쿼리 결과 정렬 및 그룹화(Visual Database Tools)Sort and Group Query Results (Visual Database Tools)
쿼리 결과 요약(Visual Database Tools)Summarize Query Results (Visual Database Tools)