📝 Language: Oracle
1
2
3
4
5
6
7
8
9
10
11
12
13
|
SELECT B.TITLE,
B.BOARD_ID,
R.REPLY_ID,
R.WRITER_ID,
R.CONTENTS,
TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') CREATED_DATE
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE TO_CHAR(B.CREATED_DATE, 'YYYY-MM') = '2022-10'
ORDER BY R.CREATED_DATE, B.TITLE
;
|
🙂 확인 사항
1. USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블
2. 2022년 10월에 작성된
3. 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회
4. 댓글 작성일을 기준으로 오름차순 정렬 → 게시글 제목을 기준으로 오름차순 정렬
🚨 문자열 비교는 날짜 비교보다 느릴 수 있음
😮 이 외의 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SELECT B.TITLE,
B.BOARD_ID,
R.REPLY_ID,
R.WRITER_ID,
R.CONTENTS,
TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') CREATED_DATE
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE EXTRACT(YEAR FROM B.CREATED_DATE) = 2022
AND EXTRACT(MONTH FROM B.CREATED_DATE) = 10
ORDER BY R.CREATED_DATE, B.TITLE
;
|
EXTRACT 사용
🚨 모든 행을 스캔하여 연도와 월을 추출한 다음 비교하는 형태로 인덱스를 효과적으로 사용하지 못할 수 있음
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SELECT B.TITLE,
B.BOARD_ID,
R.REPLY_ID,
R.WRITER_ID,
R.CONTENTS,
TO_CHAR(R.CREATED_DATE, 'YYYY-MM-DD') CREATED_DATE
FROM USED_GOODS_BOARD B
JOIN USED_GOODS_REPLY R
ON B.BOARD_ID = R.BOARD_ID
WHERE B.CREATED_DATE >= DATE '2022-10-01'
AND B.CREATED_DATE < DATE '2022-11-01'
ORDER BY R.CREATED_DATE, B.TITLE
;
|
DATE 리터럴을 사용하여 'YYYY-MM-DD' 형식으로 날짜를 직접 지정
⭐ DATE 리터럴을 사용한 방법이 일반적으로 가장 효율적
- 가독성이 좋음
- SQL 표준에 가까운 형태
- 범위 기반의 조건을 사용하면 인덱스를 유용하게 활용할 수 있음
🔗 소스 코드
GitHub
'Computer > Algorithm_SQL' 카테고리의 다른 글
[Programmers] 고양이와 개는 몇 마리 있을까 (Success) (0) | 2023.09.19 |
---|---|
[Programmers] 최솟값 구하기 (Success) (0) | 2023.09.18 |
[Programmers] 특정 옵션이 포함된 자동차 리스트 구하기 (Success) (0) | 2023.09.16 |
[Programmers] 자동차 대여 기록에서 장기/단기 대여 구분하기 (Success) (0) | 2023.09.15 |
[Programmers] 평균 일일 대여 요금 구하기 (Success) (0) | 2023.09.14 |