👇 조건에 맞는 도서 리스트 출력하기
프로그래머스
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 연산 생략까지 노릴 수 있습니다.
'🗄️ DB_이야기 > # ⚡SQL' 카테고리의 다른 글
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 3월에 태어난 여성 회원 목록 출력하기(SELECT) (1) | 2026.04.13 |
|---|---|
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 흉부외과 또는 일반외과 의사 목록 출력하기(SELECT) (0) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 과일로 만든 아이스크림 고르기(SELECT) (0) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 12세 이하인 여자 환자 목록 출력하기(SELECT) (1) | 2026.04.13 |
| 🚀[SQL 알고리즘 문제 풀이] Programmers : 인기있는 아이스크림(SELECT) (0) | 2026.04.10 |