프로그래밍 숲

HAVING 절과 EXISTS 연산자가 있는 복잡한 SQL문 분석해보기 본문

프로그래밍_인포/데이터베이스&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
반응형
Comments