프로그래밍_인포/데이터베이스&SQL
HAVING 절과 EXISTS 연산자가 있는 복잡한 SQL문 분석해보기
jjscript
2023. 5. 30. 21:14
728x90
반응형
SELECT
m.MemberID,
m.MemberName,
m.Email
FROM
Member m
WHERE
EXISTS (
SELECT
'x'
FROM
Event e
INNER JOIN SendMail sm ON e.EventID = sm.EventID
WHERE
e.StartDate >= '2014-10-01'
AND m.MemberID = sm.MemberID
GROUP BY
e.EventID
HAVING
COUNT(*) < (
SELECT
COUNT(*)
FROM
Event
WHERE
StartDate >= '2014-10-01'
)
)
위 SQL문은 이벤트 시작일자가 '2014.10.01.'과 같거나 큰 이벤트를 기준으로 단 한차례라도 이메일 발송이 누락된 멤버를 추출하는 SQL 문장입니다.
HAVING 절
내부 서브쿼리
SELECT COUNT(*)
FROM Event
WHERE StartDate >= '2014-10-01'
StartDate가 2014년 10월 1일 이후인 Event 테이블에서 이벤트 수를 검색합니다.
외부 HAVING 절
HAVING COUNT(*) < (subquery)
여기서 'COUNT(*)'는 이전 'EXISTS' 하위 쿼리 내의 특정 멤버에 대한 이벤트 수를 나타냅니다. 해당 구성원과 관련된 이벤트 수를 나타냅니다.
'COUNT(*) < (subquery)' 비교는 특정 멤버의 이벤트 수가 2014년 10월 1일 이후에 시작하는 이벤트가 있는 모든 멤버의 이벤트 수보다 적은지 확인합니다.
728x90
반응형