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