문제
이 문제는 2022년 10월에 작성된 글들에 대한 정보와 그 글의 댓글 정보를 출력하는 문제입니다.
풀이
- 게시글 제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 출력합니다.
- 댓글 작성일을 기준으로 오름차순 정렬합니다. 댓글 작성일이 같다면 게시글 제목을 기준으로 오름차순 정렬합니다.
- USED_GOODS_BOARD 테이블의 BOARD_ID와 USED_GOODS_REPLY 테이블의 BOARD_ID가 같은 행을 연결시킵니다.
- 연결한 테이블에서 2022년 10월에 작성된 게시글의 정보와 댓글 정보를 출력합니다.
SELECT ARTICLE.TITLE,
ARTICLE.BOARD_ID,
REPLY.REPLY_ID,
REPLY.WRITER_ID,
REPLY.CONTENTS,
DATE_FORMAT(REPLY.CREATED_DATE, '%Y-%m-%d') AS CREATED_DATE
FROM USED_GOODS_BOARD ARTICLE
INNER JOIN USED_GOODS_REPLY REPLY
ON ARTICLE.BOARD_ID = REPLY.BOARD_ID
WHERE SUBSTRING(ARTICLE.CREATED_DATE, 1, 7) = '2022-10'
ORDER BY REPLY.CREATED_DATE ASC, ARTICLE.TITLE ASC;
자세히 알아보기
동등 조인, 내부 조인
동등 조인(equi join)과 내부 조인(inner join)은 조건 값이 정확하게 일치할 때 행을 가져오는 조인입니다.
위 풀이를 통해 살펴보면 USED_GOOD_BOARD와 USED_GOODS_REPLY 테이블에서 BOARD_ID가 일치하는 행만 가져와 이 테이블들을 연결합니다.
DATE_FORMAT
DATE_FORMAT은 날짜 서식을 지정할 수 있는 단일 행 함수입니다. 이 함수는 DATE_FORMAT(날짜, '날짜서식')
의 형태로 사용할 수 있습니다.
날짜 서식 문자열 | 의미 | 결과 |
%Y | 네 자리 연도 | 2024 |
%c | 숫자 월 | 4 |
%m | 숫자 두 자리 월 | 04 |
%e | 일자 | 28 |
%d | 두 자리 일자 | 28 |
%I | 12시간제 시간 | 06 |
%H | 24시간제 시간 | 18 |
%i | 두 자리 분 | 29 |
%s, %S | 두 자리 초 | 03 |
%T | hh:mm:ss | 18:29:03 |
SUBSTRING
SUBSTRING은 문자열 일부를 취할 수 있는 단일 행 함수입니다. 이 함수는 SUBSTR(문자열, 시작점, 길이)
, SUBSTRING(문자열, 시작점, 길이)
의 형태로 사용할 수 있습니다. 문자열의 시작점은 0이 아닌 1부터 시작합니다.
SELECT SUBSTRING('무궁화 삼천리 화려강산', -4);
은 뒤에서 4번째인 화부터 끝까지의 문자열입니다.SELECT SUBSTRING('무궁화 삼천리 화려강산' FROM -4);
는 위와 같습니다.SELECT SUBSTRING('무궁화 삼천리 화려강산', -8, 3);
은 뒤에서 8번째인 삼부터 세 글자를 취한 문자열입니다.SELECT SUBSTRING('무궁화 삼천리 화려강산' FROM -8 FOR 3);
은 위와 같습니다.