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

🚀[SQL 알고리즘 문제 풀이] Programmers : 조건에 부합하는 중고거래 댓글 조회하기(SELECT)

by gwon_s 2026. 4. 13.

👇 조건에 부합하는 중고거래 댓글 조회하기

 

프로그래머스

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

programmers.co.kr

 

🔓 문제 설명

USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요.

결과는 댓글 작성일을 기준으로 오름차순 정렬해주시고,

댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬해주세요.

 

예시 문제 데이터

[MEMBER_PROFILE]

BOARD_ID TITLE CREATED_DATE
B0001 반려견 배변패드 팝니다 2022-10-01
B0002 국내산 볶음참깨 2022-10-02

 

[USED_GOODS_REPLY]

REPLY_ID BOARD_ID CONTENTS CREATED_DATE
R000000001 B0001 구매하겠습니다... 2022-10-02
R000000002 B0002 쪽지 주세요. 2022-10-03

⚡SQL Query

SELECT B.TITLE, 
       B.BOARD_ID, 
       R.REPLY_ID, 
       R.WRITER_ID, 
       R.CONTENTS, 
       TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') AS CREATED_DATE
FROM USED_GOODS_BOARD B
INNER JOIN USED_GOODS_REPLY R ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE BETWEEN TO_DATE('2022-10-01', 'YYYY-MM-DD') 
                         AND TO_DATE('2022-10-31', 'YYYY-MM-DD')
ORDER BY R.CREATED_DATE ASC, B.TITLE ASC;

🔎 풀이 설명

1. 테이블 조인: PK로 예상되는 BOARD_ID를 기준으로 조인 하였습니다.

2. 게시글 작성일 조건: 좌변 항수를 두고 우변 항수를 DATE 형식으로 바꿔 조건을 작성하였습니다.

3. 날짜 포맷 및 정렬


💡인사이트

1. 선행 테이블 선택

  • B.CREATED_DATE에 인덱스가 있다면, 2022년 10월 데이터를 먼저 필터링할 수 있는 USED_GOODS_BOARD 테이블이 선행 테이블이 되는 것이 유리합니다.. 

 

2. NL 조인 효율성

  • USED_GOODS_REPLY 테이블의 BOARD_ID 컬럼에 인덱스가 반드시 있어야 게시글 하나 당 전체 댓글 테이블을 다 뒤지는 불상사(Full Table Scan)를 막을 수 있습니다.