[오늘의 문제] 조건에 맞는 도서와 저자 리스트 출력하기

shlim55·2025년 8월 17일

코딩테스트

목록 보기
123/223

출처: https://school.programmers.co.kr/learn/courses/30/lessons/144854?language=oracle

문제 설명
다음은 어느 한 서점에서 판매중인 도서들의 도서 정보(BOOK), 저자 정보(AUTHOR) 테이블입니다.

BOOK 테이블은 각 도서의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

Column name Type Nullable Description
BOOK_ID INTEGER FALSE 도서 ID
CATEGORY VARCHAR(N) FALSE 카테고리 (경제, 인문, 소설, 생활, 기술)
AUTHOR_ID INTEGER FALSE 저자 ID
PRICE INTEGER FALSE 판매가 (원)
PUBLISHED_DATE DATE FALSE 출판일
AUTHOR 테이블은 도서의 저자의 정보를 담은 테이블로 아래와 같은 구조로 되어있습니다.

Column name Type Nullable Description
AUTHOR_ID INTEGER FALSE 저자 ID
AUTHOR_NAME VARCHAR(N) FALSE 저자명
문제
'경제' 카테고리에 속하는 도서들의 도서 ID(BOOK_ID), 저자명(AUTHOR_NAME), 출판일(PUBLISHED_DATE) 리스트를 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

예시
예를 들어 BOOK 테이블과 AUTHOR 테이블이 다음과 같다면

BOOK_ID CATEGORY AUTHOR_ID PRICE PUBLISHED_DATE
1 인문 1 10000 2020-01-01
2 경제 1 9000 2021-04-11
3 경제 2 11000 2021-02-05
AUTHOR_ID AUTHOR_NAME
1 홍길동
2 김영호
'경제' 카테고리에 속하는 도서는 도서 ID가 2, 3인 도서이고, 출판일을 기준으로 오름차순으로 정렬하면 다음과 같은 결과가 나와야 합니다.

BOOK_ID AUTHOR_NAME PUBLISHED_DATE
3 김영호 2021-02-05
2 홍길동 2021-04-11
주의사항
PUBLISHED_DATE의 데이트 포맷이 예시와 동일해야 정답처리 됩니다.

내가 작성한 코드문

-- 코드를 입력하세요
-- '경제' 카테고리에 속하는 도서는 도서 ID가 2, 3인 도서이고, 출판일을 기준으로 오름차순으로 정렬

SELECT B.BOOK_ID, A.AUTHOR_NAME, TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK B
INNER JOIN AUTHOR A
ON B.AUTHOR_ID = A.AUTHOR_ID
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE

그냥 내 생각대로 하니 딱 됐다.

✅ 1. USING 절 활용
AUTHOR_ID 컬럼명이 두 테이블에 동일하므로 USING을 쓸 수 있다.

SELECT B.BOOK_ID, A.AUTHOR_NAME, TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK B
JOIN AUTHOR A USING (AUTHOR_ID)
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE;

✅ 2. NATURAL JOIN (컬럼명이 같을 때 자동 조인)
컬럼명이 동일하면 자연조인도 가능하다.
다만 실무에서는 명시적인 조인을 더 권장한다.

SELECT B.BOOK_ID, A.AUTHOR_NAME, TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK B
NATURAL JOIN AUTHOR A
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE;

✅ 3. 서브쿼리 활용
저자 이름을 미리 뽑아서 조인하지 않고 SELECT 절에서 서브쿼리로 가져오는 방식이다.

SELECT B.BOOK_ID,
       (SELECT A.AUTHOR_NAME
        FROM AUTHOR A
        WHERE A.AUTHOR_ID = B.AUTHOR_ID) AS AUTHOR_NAME,
       TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK B
WHERE B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE;

✅ 4. ANSI JOIN 대신 오라클 전통 조인 방식
구 오라클 스타일 조인(WHERE 절 사용)도 가능하다.

SELECT B.BOOK_ID, A.AUTHOR_NAME, TO_CHAR(B.PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK B, AUTHOR A
WHERE B.AUTHOR_ID = A.AUTHOR_ID
  AND B.CATEGORY = '경제'
ORDER BY B.PUBLISHED_DATE;
profile
A Normal Programmer

0개의 댓글