> 데이터 베이스 > MySQL 튜토리얼 > SQL HAVING과 WHERE: 데이터 필터링을 위해 각 절을 언제 사용해야 합니까?

SQL HAVING과 WHERE: 데이터 필터링을 위해 각 절을 언제 사용해야 합니까?

Linda Hamilton
풀어 주다: 2025-01-21 09:56:09
원래의
947명이 탐색했습니다.

SQL HAVING vs. WHERE: When to Use Each Clause for Data Filtering?

SQL 데이터 필터링: WHERE 절과 HAVING 절의 차이점

SQL의 HAVING 및 WHERE 절은 모두 데이터를 필터링하는 데 사용되지만 기능은 다릅니다. WHERE 절은 개별 행에 대해 작동하는 반면 HAVING 절은 집계된 결과에 대해 작동합니다.

차이예

LecturersLecturers_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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿