집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 HAVING과 WHERE: 집계를 위해 언제 각 절을 사용해야 합니까?
SQL 집계 쿼리에서 HAVING 절과 WHERE 절의 차이점
집계된 데이터로 작업할 때는 HAVING 절과 WHERE 절의 차이점을 이해하는 것이 중요합니다. 이 문서에서는 일반적인 쿼리 시나리오를 자세히 살펴보고 한 메서드는 올바른 결과를 반환하고 다른 메서드는 그렇지 않은 이유를 설명합니다.
쿼리 컨텍스트
다음 표는 다음과 같습니다.
가장 전문적인 강사를 찾는 것이 목표입니다.
WHERE 절 사용 시도 실패
실패한 쿼리는 WHERE 절을 사용하여 전공 수에 따라 결과를 필터링하려고 시도합니다.
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L, Lecturers_Specialization S WHERE L.LectID = S.LectID AND COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);</code>
WHERE 절이 집계 값에 조건을 적용하는 데 적합하지 않기 때문에 이 쿼리는 예상한 결과를 생성하지 못했습니다.
HAVING 절을 사용한 쿼리 성공
성공적인 쿼리는 대신 HAVING 절을 사용합니다.
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L, Lecturers_Specialization S WHERE L.LectID = S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise) >= ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID);</code>
HAVING이 성공하는 이유
HAVING 절은 특히 집계 쿼리 결과를 필터링하는 데 사용됩니다. GROUP BY 연산 후 조건을 적용하여 강사별 전공 수를 확인할 수 있습니다.
경험 법칙
일반적으로 GROUP BY 앞에 WHERE를 사용하여 개별 행을 필터링하고, GROUP BY 뒤에 HAVING을 사용하여 집계 결과를 필터링합니다.
ANSI JOIN을 사용하여 향상된 쿼리
ANSI JOIN 구문을 사용하는 대체 쿼리 버전도 제공됩니다.
<code class="language-sql">SELECT L.LectID, Fname, Lname FROM Lecturers L JOIN Lecturers_Specialization S ON L.LectID=S.LectID GROUP BY L.LectID, Fname, Lname HAVING COUNT(S.Expertise)>=ALL (SELECT COUNT(Expertise) FROM Lecturers_Specialization GROUP BY LectID)</code>
이 버전에서는 조인 조건에 WHERE를 사용하지 않고 대신 JOIN을 사용합니다.
위 내용은 SQL의 HAVING과 WHERE: 집계를 위해 언제 각 절을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!