본문 바로가기
DB/DB 문제풀이

[프로그래머스] Lv.1 조건에 부합하는 중고래 댓글 조회하기

by kKkKkKWJ 2024. 7. 20.

https://school.programmers.co.kr/learn/courses/30/lessons/164673

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

📌 문제

다음은 중고거래 게시판 정보를 담은 USED_GOODS_BOARD 테이블과

중고거래 게시판 첨부 파일 정보를 담은 USED_GOODS_REPLY 테이블입니다.

USED_GOODS_BOARD 테이블은 다음과 같으며

BOARD_ID, WRITER_ID, TITLE, CONTENTS, PRICE, CREATED_DATE, STATUS, VIEWS은

게시글 ID, 작성자 ID, 게시글 제목, 게시글 내용, 가격, 작성일, 거래상태, 조회수를 의미합니다.

 

USED_GOODS_REPLY 테이블은 다음과 같으며

REPLY_ID, BOARD_ID, WRITER_ID, CONTENTS, CREATED_DATE는

각각 댓글 ID, 게시글 ID, 작성자 ID, 댓글 내용, 작성일을 의미합니다.

 

USED_GOODS_BOARD와 USED_GOODS_REPLY 테이블에서 2022년 10월에 작성된 게시글의

제목, 게시글 ID, 댓글 ID, 댓글 작성자 ID, 댓글 내용, 댓글 작성일을 조회하는 SQL문을 작성해주세요.

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

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

 

📌 풀이

SELECT 
    A.TITLE, 
    A.BOARD_ID, 
    B.REPLY_ID, 
    B.WRITER_ID, 
    B.CONTENTS, 
    DATE_FORMAT(B.CREATED_DATE,'%Y-%m-%d')
FROM 
    USED_GOODS_BOARD A
INNER JOIN 
    USED_GOODS_REPLY B
ON
    A.BOARD_ID = B.BOARD_ID
WHERE 
    YEAR(A.CREATED_DATE)='2022' AND
    MONTH(A.CREATED_DATE)='10'
ORDER BY
    B.CREATED_DATE ASC,
    A.TITLE ASC;
 

📌 관련 개념 정리

- 조인(JOIN)

두 개 이상의 테이블을 합쳐서 테이블을 조회하는데 사용한다.

 

INNER JOIN, OUTER JOIN 등이 있다.

OUTER JOIN은 LEFT, RIGHT, FULL로 또 다시 나눌 수 있다.

 

아래의 예시로 각 JOIN을 설명해보자.

 

INNER JOIN

두 테이블에서 일치하는 행만 반환한다. 공통된 값을 기반으로 데이터를 결합한다.

SELECT A.*, B.*
FROM TableA A
INNER JOIN TableB B
ON A.common_column = B.common_column;
id name id city
1 Alice 1 New York

 

 

LEFT JOIN

왼쪽 테이블의 모든 행과 오른쪽 테이블의 일치하는 해을 반환한다.

일치하는 값이 없으면 NULL을 반환한다.

SELECT A.*, B.*
FROM TableA A
LEFT JOIN TableB B
ON A.common_column = B.common_column;
id name id city
1 Alice 1 New York
2 Bob NULL NULL

 

 

RIGHT JOIN

오른쪽 테이블의 모든 행과 왼쪽 테이블의 일치하는 해을 반환한다.

일치하는 값이 없으면 NULL을 반환한다.

SELECT A.*, B.*
FROM TableA A
RIGHT JOIN TableB B
ON A.common_column = B.common_column;
id name id city
1 Alice 1 New York
NULL NULL 3 London

 

 

FULL OUTER JOIN

두 테이블의 모든 행을 반환한다. 일치하지 않는 경우 NULL값을 포함한다.

LEFT JOIN과 RIGHT JOIN의 합이라고 생각하면 쉽다.

SELECT A.*, B.*
FROM TableA A
FULL OUTER JOIN TableB B
ON A.common_column = B.common_column;
id name id city
1 Alice 1 New York
2 Bob NULL NULL
NULL NULL 3 London