SQL 데이터 필터링: WHERE 절과 HAVING 절의 차이점
SQL의 HAVING 및 WHERE 절은 모두 데이터를 필터링하는 데 사용되지만 기능은 다릅니다. WHERE 절은 개별 행에 대해 작동하는 반면 HAVING 절은 집계된 결과에 대해 작동합니다.
차이예
Lecturers
과 Lecturers_Specialization
라는 두 개의 테이블이 있고, 가장 많은 전문 분야를 갖춘 강사를 찾고 싶다고 가정해 보겠습니다.
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 절이 단일 행을 필터링하고 COUNT(S.Expertise) >= ALL
비교가 단일 행에 적용될 수 없기 때문입니다.
올바른 쿼리에서는 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 절은 집계된 결과에 따라 비교가 각 강사의 전문 분야 수에 적용되도록 합니다.
경험 법칙 및 최적화
일반적으로 WHERE 절은 GROUP BY 절 앞에 사용되어 개별 행을 필터링하고, HAVING 절은 GROUP BY 절 뒤에 사용되어 집계 결과를 필터링합니다.
또한 L, S θ 조인 구문 대신 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>
위 내용은 SQL HAVING과 WHERE: 데이터 필터링을 위해 각 절을 언제 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!