본문 바로가기
🗄️ DB_이야기/# ⚡SQL

🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 맞는 도서 리스트 출력하기(SELECT)

by gwon_s 2026. 4. 13.

👇 조건에 맞는 도서 리스트 출력하기

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

🔓 문제 설명

BOOK 테이블에서 2021년에 출판된 '인문' 카테고리에 속하는 도서 리스트를 찾아서 도서 ID(BOOK_ID), 출판일 (PUBLISHED_DATE)을 출력하는 SQL문을 작성해주세요.
결과는 출판일을 기준으로 오름차순 정렬해주세요.

 

예시 문제 데이터(BOOK)

BOOK_ID CATEGORY AUTHOR_ID PRICE PUBLISHED_DATE
1 인문 1 10,000 2020-01-01
2 경제 2 9,000 2021-02-05
3 인문 2 11,000 2021-04-11
4 인문 3 10,000 2021-03-15
5 생활 1 12,000 2021-01-10

 


⚡SQL Query

SELECT BOOK_ID, TO_CHAR(PUBLISHED_DATE, 'YYYY-MM-DD') AS PUBLISHED_DATE
FROM BOOK
WHERE CATEGORY = '인문'
  AND PUBLISHED_DATE BETWEEN TO_DATE('2021-01-01', 'YYYY-MM-DD') 
                         AND TO_DATE('2021-12-31', 'YYYY-MM-DD')
ORDER BY PUBLISHED_DATE ASC;

🔎 풀이 설명

1. 날짜 범위 지정: BETWEEN 연산자를 사용하여 2021년의 데이터를 필터링했습니다.


💡인사이트

1. 날짜 인덱스 효율성

  • WHERE TO_CHAR(PUBLISHED_DATE, 'YYYY') = '2021' 과 같이 컬럼을 가공하면 인덱스를 타지 못해서 우변의 상수값을 가공하여 Index Range Scan이 가능합니다.

 

2. 결합 인덱스 구성

  • 위 쿼리에서 최적화된 인덱스는 [CATEGORY + PUBLISHED_DATE] 순서입니다.
  • CATEGORY등치(=) 조건으로 선행 컬럼으로 두어 스캔 범위를 크게 줄여주고, PUBLISHED_DATE범위(BETWEEN) 조건이자 정렬 조건이므로 후행 컬럼에 배치하면 Sort Order By 연산 생략까지 노릴 수 있습니다.