MySql - HAPING vs WHERE
이 두 가지 질문의 차이점은 무엇입니까?
SELECT f.name,
u.name,
u.id
FROM families f
JOIN units u
ON f.unit_id = u.id
HAVING u.id IN( 43, 413, 22 )
그리고:
SELECT f.name,
u.name,
u.id
FROM families f
JOIN units u
ON f.unit_id = u.id
WHERE u.id IN( 43, 413, 22 )
이 두 쿼리의 결과는 정확히 동일합니다.그렇다면 그 차이는 어디에 있습니까?
WHERE
처리 중인 원본 테이블의 데이터를 선택하는 데 사용됩니다.
HAVING
쿼리에 의해 생성된 결과 집합의 데이터를 필터링하는 데 사용됩니다.즉, 에 있는 집계 값 및 별칭을 참조할 수 있습니다.SELECT
절
예를 들어 다음과 같이 쓸 수 있습니다.
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
HAVING diff > 10
이것은 사용해서는 안 됩니다.WHERE
왜냐면diff
는 원래 테이블 열 중 하나가 아닌 별칭입니다.대신에 다음과 같이 쓸 수 있습니다.
SELECT t1.val - t2.val diff
FROM t1 JOIN t2 ON (some expression)
WHERE t1.val - t2.val > 10
그러나 모든 감산을 두 번 수행해야 할 수도 있습니다. 선택을 위해 한 번, 결과 집합을 생성하기 위해 한 번.
sql의 haveing과 where 절의 차이점은 where 절은 aggregate와 함께 사용할 수 없지만 haveing 절은 사용할 수 있다는 것입니다.haveing 절은 where 절에 추가 필터가 되는 것입니다.
어느 쪽이 더 나을까 : 클릭
이 쿼리에는 아무것도 없습니다.하지만 만약 당신이 a를 사용한다면,GROUP BY
당신은 차이를 보게 될 겁니다만약 당신이 a를 사용한다면.GROUP BY
그HAVING
그룹에 적용될 것인 반면에WHERE
에 적용될 것입니다.SELECT
데이터를 그룹화하기 전에.
언급URL : https://stackoverflow.com/questions/16155937/mysql-having-vs-where
'programing' 카테고리의 다른 글
중앙 하나와 오른쪽/왼쪽 정렬 다른 플렉스박스 요소 (0) | 2023.10.11 |
---|---|
MySQL: 보기 대 저장 프로시저 (0) | 2023.10.11 |
RequireJS를 사용하여 백본 및 언더스코어 로드 (0) | 2023.10.06 |
Powershell을 사용하여 정규 분포식 결과의 하위 섹션 교체 (0) | 2023.10.06 |
라라벨 - 상태(플래그)를 저장할 위치?모델, 클래스 또는 구성 폴더? (0) | 2023.10.06 |