SQL 기초 문법 정리 (2)

김지수·2025년 7월 6일

예제문제

  • "ex4_member", "ex4_review" 라는 이름의 테이블에는 각각 회원에 대한 정보와, 회원이 남긴 리뷰에 대한 정보가 담겨있음
  • ex4_member 테이블과 ex4_review 테이블을 사용하여 리뷰를 가장 많이 남긴 회원의 리뷰를 조회
  • 회원 이름, 리뷰 텍스트, 리뷰 작성일이 포함되어 있어야 하고 오름차순 정렬

첫 번째 방식 (WITH 구문 사용)

# 각 멤버 별로 몇 번의 리뷰를 남겼는지 확인하기, 상위 1명만 출력 
WITH ReviewCounts AS (
	SELECT MEMBER_ID, COUNT(MEMBER_ID) AS membercount
    FROM hardy-aleph-464902-v8.modulabs.ex4_review
    GROUP BY MEMBER_ID
    ORDER BY membercount DESC
    LIMIT 1
)
# r 데이터와 m 데이터 JOIN
# 그 데이터를 ReviewCounts와 JOIN. 가장 많은 리뷰를 남긴 KEVIN만 남음
# 리뷰 작성일을 기준으로 오름차순 정렬 
SELECT MEMBER_NAME, REVIEW_TEXT, REVIEW_DATE
FROM hardy-aleph-464902-v8.modulabs.ex4_review AS r
JOIN hardy-aleph-464902-v8.modulabs.ex4_member AS m
ON r.MEMBER_ID = m.MEMBER_ID
JOIN ReviewCounts AS rc
ON r.MEMBER_ID = rc.MEMBER_ID
ORDER BY r.REVIEW_DATE

두 번째 방식 (서브쿼리 방식)

SELECT MEMBER_NAME,REVIEW_TEXT, REVIEW_DATE
FROM hardy-aleph-464902-v8.modulabs.ex4_review AS r
JOIN hardy-aleph-464902-v8.modulabs.ex4_member AS m
ON r.MEMBER_ID = m.MEMBER_ID
JOIN (
  SELECT MEMBER_ID, COUNT(MEMBER_ID) AS membercount
  FROM hardy-aleph-464902-v8.modulabs.ex4_member 
  GROUP BY MEMBER_ID
  ORDER BY membercount DESC
  LIMIT 1
) AS rc
ON r.MEMBER_ID = rc.MEMBER_ID
ORDER BY r.REVIEW_DATE

WITH 구문과 서브쿼리 방식의 차이

  • 공통점: 임시 테이블의 역할
  • 차이점
  1. WITH 구문
  • 쿼리 맨 앞에 WITH절 선언
  • 여러 번 재사용 가능
  • 중간 데이터를 여러 번 사용해야 할 때 사용
  1. 서브쿼리 방식
  • FROM / JOIN 안에 바로 SELECT문
  • 1회성
  • 간단히 한번만 필요할 때 사용
profile
오늘 배운 것을 기록하며, 나만의 지식으로 만들어가는 성장 일지 💪🍀

0개의 댓글