집 >데이터 베이스 >MySQL 튜토리얼 >SQL의 WHERE와 HAVING: 언제 각 절을 사용해야 합니까?
SQL 쿼리의 WHERE 및 HAVING 절 이해
SQL 개발자는 WHERE 절과 HAVING 절을 구별하는 데 어려움을 겪는 경우가 많습니다. 이 문서에서는 SQL 쿼리에서의 다양한 사용법을 명확히 하는 것을 목표로 합니다.
WHERE를 사용하는 경우
HAVING을 사용하는 경우
예: 전공 최다 강사
이 차이점을 설명하려면 다음 표를 참조하세요.
<code>1. Lecturers (LectID, Fname, Lname, degree) 2. Lecturers_Specialization (LectID, Expertise)</code>
전공이 가장 많은 강사를 찾는 것이 목표입니다.
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 쿼리는 WHERE를 사용하여 집계 함수(COUNT(S.Expertise))를 기반으로 필터링하려고 시도하므로 작동하지 않습니다. WHERE 절은 결과를 집계하는 것이 아니라 개별 행을 필터링하는 데 사용됩니다.
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 쿼리는 GROUP BY 연산 후 집계된 데이터(COUNT(S.Expertise))에 조건을 설정하므로 올바른 결과를 성공적으로 검색합니다.
ANSI 연결 버전(권장)
ANSI 조인 구문을 사용하면 쿼리를 다음과 같이 다시 작성할 수 있습니다.
<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 절이 제거되어 더 효율적이고 표준을 준수하는 쿼리가 가능해졌습니다.
위 내용은 SQL의 WHERE와 HAVING: 언제 각 절을 사용해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!