programing

MySql - HAPING vs WHERE

lovejava 2023. 10. 6. 20:48

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 BYHAVING그룹에 적용될 것인 반면에WHERE에 적용될 것입니다.SELECT데이터를 그룹화하기 전에.

언급URL : https://stackoverflow.com/questions/16155937/mysql-having-vs-where