Kong Eunho

복합 쿼리 예제 - 2

2025년 08월 08일 21시
카테고리 - TIL, sqld, 3_SQL_기본


복합 쿼리 예제 - 2

여러 테이블을 연결하는 복합 쿼리를 하나 살펴본다. 이 예제에서는 도서관 대출시스템에서 도서별로 처음 기록된 대출의 도서명, 출판사, 대출시작일자, 대출종료일자를 조회하는 쿼리를 살펴본다.

도서 테이블 생성 :

CREATE TABLE 도서 (
    도서ID NUMBER CONSTRAINT PK_도서 PRIMARY KEY,
    도서명 NVARCHAR2(100)
);

… 예시 데이터 입력 …

데이터가 입력된 테이블 :

도서
도서ID 도서명
12001 SQLD 모든 것
12002 자료구조
12003 운영체제


출판사 테이블 생성 :

CREATE TABLE 출판사 (
    출판사ID NUMBER CONSTRAINT PK_출판사 PRIMARY KEY,
    출판사명 NVARCHAR2(100)
);

… 예시 데이터 입력 …

데이터가 입력된 테이블 :

출판사
출판사ID 출판사명
1001 아이리포
1002 생능
1003 한빛


대출 테이블 생성 :

CREATE TABLE 대출 (
    대출번호 NUMBER CONSTRAINT PK_대출 PRIMARY KEY,
    도서ID NUMBER CONSTRAINT FK_도서_대출_REL11 FOREIGN KEY
    REFERENCES 도서(도서ID),
    출판사ID NUMBER NOT NULL CONSTRAINT FK_출판사_대출_REL21 FOREIGN KEY
    REFERENCES 출판사(출판사ID),
    대출시작일자 DATE,
    대출종료일자 DATE
);

… 예시 데이터 입력 …

데이터가 입력된 테이블 :

대출
대출번호 도서ID 출판사ID 대출시작일자 대출종료일자
101 12001 1001 2025-06-03 2025-06-13
102 12001 1001 2025-07-11 2025-07-21
103 12002 1002 2025-08-02 2025-08-12
104 12002 1002 2025-07-15 2025-07-25
105 12003 1003 2025-07-16 2025-07-26
106 12003 1003 2025-06-29 2025-07-08


쿼리 전문 :

SELECT B.도서명, C.출판사명,
    TO_CHAR(A.대출시작일자, ‘YYYY-MM-DD’) AS 대출시작일자,
    TO_CHAR(A.대출종료일자, ‘YYYY-MM-DD’) AS 대출종료일자
FROM 대출 A, 도서 B, 출판사 C,
    (SELECT 도서ID, MIN(대출시작일자) AS 대출시작일자
    FROM 대출
    GROUP BY 도서ID) D
WHERE A.대출시작일자 = D.대출시작일자
    AND B.도서ID = D.도서ID
    AND A.도서ID = B.도서ID
    AND A.출판사ID = C.출판사ID
ORDER BY B.도서명;


실행 순서 :

① SELECT(서브쿼리) -> ② WHERE -> ③ SELECT -> ④ ORDER BY

실행결과
도서명 출판사명 대출시작일자 대출종료일자
SQLD 모든 것 아이리포 2025-06-03 2025-06-13
운영체제 한빛 2025-06-29 2025-07-08
자료구조 생능 2025-07-15 2025-07-25
◀ 이전 글 TIL, sqld, 3_SQL_기본
복합 쿼리 예제 - 1
2025-08-07
목록으로 다음 글 ▶ TIL, sqld, 3_SQL_기본
Chapter 3 출제예상문제
2025-08-09