SQLD/2과목 : SQL 기본 및 활용

2.9 복합 쿼리 예제 2

qordnswnd123 2025. 7. 3. 09:51

📘 2.9 복합 쿼리 예제 2

🧩 문제 요약

  • 목표: 도서별 최초 대출 이력에 대해 도서명, 출판사명, 최초 대출일자 출력
  • 데이터베이스 활용 요소:
    • 여러 테이블의 조인
    • 서브쿼리 활용 (FROM 절 내부)
    • 그룹함수 (MIN)
    • 문자열 변환 함수 (TO_CHAR)
    • 날짜 처리출력 포맷 조작
  • 출제유형: 복합 커리의 논리적 실행 순서 및 결과 해석

🧱 테이블 구조 및 관계

테이블 간 관계:

  • 도서 ↔ 대출: 1 : N (도서 1권이 여러 번 대출됨)
  • 도서 ↔ 출판사: N : 1 (한 도서는 한 출판사에 소속)

🔁 SQL 실행 순서 및 분석

 

1. 서브쿼리 (FROM 안의 SELECT) – 최초 대출일 찾기

 
SELECT 도서ID, MIN(대출시작일자)
FROM 대출
GROUP BY 도서ID
  • 도서별 최초 대출일자 추출
  • 핵심 포인트:
    • MIN(대출시작일자)는 그룹 내 가장 빠른 날짜
    • 이 결과를 가상 테이블로 활용

👉 시험 포인트:

"도서별로 가장 빠른 날짜" → GROUP BY + MIN() 패턴 기억

 

2. 메인 쿼리 JOIN 및 WHERE 절 구성

FROM 도서 A, 대출 B, 출판사 C, (서브쿼리) D
WHERE
    A.도서ID = B.도서ID
    AND B.도서ID = D.도서ID
    AND B.대출시작일자 = D.대출시작일자
    AND A.출판사ID = C.출판사ID
  • 4개 테이블을 조인:
    • 도서정보(A), 대출정보(B), 출판사(C), 최초대출 서브쿼리(D)
  • 조건:
    • B와 D에서 도서ID와 대출일자 둘 다 매칭 → 최초 대출 건 식별
    • A, C는 도서ID와 출판사ID로 연결

👉 시험 포인트:

서브쿼리와의 JOIN은 두 개 이상 조건으로 매칭해야 정확

 

3. SELECT 절 – 필요한 컬럼 출력 및 데이터 가공

SELECT
    A.도서명,
    C.출판사명,
    TO_CHAR(B.대출시작일자, 'YYYY-MM-DD') AS 대출시작일,
    TO_CHAR(B.대출종료일자, 'YYYY-MM-DD') AS 대출종료일
  • 출력값:
    • 도서명: 도서 테이블
    • 출판사명: 출판사 테이블
    • 대출시작/종료일: 대출 테이블 → 문자열로 변환하여 깔끔하게 표현
  • TO_CHAR(날짜, 포맷):
    • 날짜를 사람이 읽기 쉬운 형식으로 변환
    • YYYY: 4자리 연도, MM: 월, DD: 일

👉 시험 포인트:

날짜 포맷 출력은 TO_CHAR() + 포맷 문자 암기 필수!

 

4. ORDER BY 절 – 정렬 처리

ORDER BY A.도서명
  • 정렬 기준: 도서명
  • 기본값은 오름차순(ASC)

 

🔢 날짜 포맷 문자 암기 요약

👉 시험 포인트: TO_CHAR()의 포맷 문자는 단골 출제 항목

 

🧠 암기어법: SQL 실행 순서

왜 구했어? (FWGHSO)

  • F: FROM
  • W: WHERE
  • G: GROUP BY
  • H: HAVING
  • S: SELECT
  • O: ORDER BY

 

✅ 시험 대비 실전 포인트 요약