어디 절 데 사이의 차이점은 무엇입니까?

이 문서에서는 언제 어디서 사용하고 있는지 알아 봅니다. 둘 다 비슷한 기능을 수행하지만 다른 목적을 위해!이 문서는 기계 번역되었으므로 어휘,구문 또는 문법에서 오류가 있을 수 있습니다 내 가이드를 사용하여 이러한 무료 도구를 사용하여 시작할 수 있습니다.

어디서 어떻게 다릅니 까?

더 고급 쿼리로 작업 할 때 어디 절과 갖는 절을 사용하는 것이 합리적인지 불분명 할 수 있습니다.

두 절 모두 동일한 작업을 수행하는 것처럼 보이지만 다른 방식으로 수행합니다. 사실,그들의 기능은 서로를 보완합니다.

  • 절이 사용되는 곳은 결과의 필터 레코드입니다. 필터는 그룹화가 이루어지기 전에 발생합니다.
  • 갖는 절은 그룹의 값을 필터링하는 데 사용됩니다.

우리가 더 가기 전에 의는 입력의 형식을 검토 할 수 있습니다. 그것은

SELECTFROMWHEREGROUP BYHAVING

일을 똑바로 유지하는 데 도움이 나는 위에서 아래로 명령문의 실행 순서를 생각하고 싶다. 즉,결과에 절이 먼저 적용된 다음 나머지 행은 그룹 기준에 따라 요약됩니다.

여기서

절은 결과에서 행을 필터링하는 데 사용됩니다. 예를 들어

SELECT COUNT(SalesOrderID)FROM Sales.SalesOrderDetail

는 카운트로 121,317 을 반환하지만 쿼리

SELECT COUNT(SalesOrderID)FROM Sales.SalesOrderDetailWHERE UnitPrice > 200

는 카운트로 48,159 를 반환합니다. 이 때문에 어디 절 필터 73,158 판매 주문 세부 정보 누구의 단가 보다 작거나 같은 200 결과에서.

절이 있는

절이 있는 절은 그룹의 값을 기준으로 필터링하는 데 사용됩니다. 이러한 그룹을 사용하여

SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderIDHAVING SalesOrderID > 50000

와 같은 그룹을 필터링 할 수 있지만 실제 힘은 집계 함수 결과를 기반으로 비교하고 필터링하는 능력에 있습니다. 예를 들어,다음을 초과하는 모든 주문을 선택할 수 있습니다$10,000

SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderIDHAVING SUM(UnitPrice * OrderQty) > 10000

위치 절의 가시성은 한 번에 하나의 행이므로 모든 판매 주문의 합계를 평가할 수 있는 방법이 없습니다.

둘의 결합:

여기서 절과 절이 둘 다 있는 경우 절이 먼저 적용된 다음 결과가 그룹화되고 마지막으로 절에 따라 필터링 된 그룹을 명심하십시오.

대부분의 경우

SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderIDHAVING SUM(UnitPrice * OrderQty) > 10000 AND SalesOrderID > 50000

SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS TotalPriceFROM Sales.SalesOrderDetailWHERE SalesOrderID > 50000GROUP BY SalesOrderIDHAVING SUM(UnitPrice * OrderQty) > 10000

와 같이 갖는 절에 조건을 배치 할 수 있습니다. 이 쿼리 만 사용할 수 있습니까?

SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS TotalPriceFROM Sales.SalesOrderDetailGROUP BY SalesOrderIDHAVING SUM(UnitPrice * OrderQty) > 10000 AND LineTotal > 10

실제로 해당 쿼리는 오류를 생성합니다. 열 선 합계는 그룹 기준 필드 목록이나 집계 합계의 결과가 아닙니다.

유효하려면 갖는 절은 집계 함수 또는 그룹의 열 부분의 결과 만 비교할 수 있습니다.

유효하려면 쿼리를

SELECT SalesOrderID, SUM(UnitPrice * OrderQty) AS TotalPriceFROM Sales.SalesOrderDetailWHERE LineTotal > 100GROUP BY SalesOrderIDHAVING SUM(UnitPrice * OrderQty) > 10000

로 다시 작성하여 위치와 갖는 것의 차이를 요약해야 합니다:

  • 그룹화가 수행되기 전에 레코드를 필터링하는 데 사용되는 위치입니다.
  • 값을 그룹화한 후에 필터링하는 데 사용됩니다. 그룹의 열 또는 식만 절의 조건…

답글 남기기

이메일 주소는 공개되지 않습니다.

More: