나에게 가장 큰 차이점 HAVING
은 SQL 언어에서 제거되면 인생은 이전과 거의 비슷할 것입니다. 확실히, 소수 쿼리는 파생 테이블, CTE 등을 사용하여 다시 작성해야하지만 결과적으로 이해하고 유지하기가 더 쉬울 것입니다. 아마도이를 해결하기 위해 공급 업체의 최적화 코드를 다시 작성해야 할 수도 있습니다.
이제 WHERE
언어에서 잠시 제거 하십시오. 이번에 는 존재 하는 대부분 의 쿼리를 명백한 대체 구문없이 다시 작성해야합니다. 코더는 이전 절 을 시뮬레이트하기 위해 절을 DUAL
사용하여 정확히 하나의 행을 포함하는 것으로 알려진 테이블에 대한 내부 조인 (예 : Oracle에서)을 창의적으로 가져야합니다 . 그러한 구조는 고안 될 것이다. 언어에서 빠진 것이 있다는 것은 명백 할 것이며 결과적으로 상황은 더 나빠질 것입니다.ON
WHERE
TL; DR 우리는 HAVING
내일 잃을 수 있고 상황은 더 나쁘지 않을 것입니다 WHERE
.
여기의 답변에서 많은 사람들은 HAVING
절이 절없이 사용될 수 있음을 깨닫지 못하는 것 같습니다 GROUP BY
. 이 경우, HAVING
절은 전체 테이블 표현식에 적용되며 절에 상수 만 나타나도록 요구합니다 SELECT
. 일반적으로이 HAVING
절에는 집계가 포함됩니다.
이것은 소리보다 더 유용합니다. 예를 들어,이 쿼리를 사용 name
하여 T
다음의 모든 값에 대해 열이 고유한지 테스트하십시오 .
SELECT 1 AS result
FROM T
HAVING COUNT( DISTINCT name ) = COUNT( name );
가능한 결과는 두 가지뿐입니다. HAVING
절이 true이면 결과가 value를 포함하는 단일 행이 1
되며 결과가 없으면 빈 세트가됩니다.
HAVING
반면, 포스트 응집 필터 인WHERE
예비 응집 필터이다.