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 |
'DB > DB 문제풀이' 카테고리의 다른 글
[프로그래머스] Lv.1 인기있는 아이스크림 (0) | 2024.07.20 |
---|---|
[프로그래머스] Lv.1 흉부외과 또는 일반외과 의사 목록 출력하기 (0) | 2024.07.20 |
[프로그래머스] Lv.2 3월에 태어난 여성 회원 목록 출력하기 (0) | 2024.07.20 |
[프로그래머스] Lv.1 조건에 맞는 도서 리스트 출력하기 (0) | 2024.07.20 |
[프로그래머스] Lv.1 동물의 아이디와 이름 (0) | 2024.07.19 |