새벽코딩

[PostgresDB-2] 13. 테이블 조인 (LEFT JOIN) 본문

Programming/Postgres DB

[PostgresDB-2] 13. 테이블 조인 (LEFT JOIN)

midnightcoder 2022. 12. 21. 14:49

- LEFT JOIN은 두 테이블의 공통 데이터 (교집합) 뿐만 아니라, 좌측 TABLE의 모든 데이터를 가져오는 문법

 

1) 먼저 공통된 부분을 JOIN 하고

2) 추가로 나머지 값들 (왼쪽 TABLE의 나머지)을 가져와서

3) 빈값인 NULL로 채움

 

- QUERY 실습

=============================문제 time ===========================

 

A. 모든 사진의 "파일명"을 조회하시오. 게시자가 있다면 "닉네임"도 함께 가져올 것.

 

SELECT
	*
FROM
	photos
JOIN users ON
	users.id = photos.user_id
;

위 쿼리의 결과는 아래 그림의 위에 Table이다. 

즉, 두 테이블(users와 photos)의 JOIN된 부분만 나타낸다.

 

모든 사진의 파일명을 조회하려면 LEFT JOIN을 하면 되는데, 쿼리는 아래와 같다

 

SELECT
	*
FROM
	photos
LEFT JOIN users ON
	users.id = photos.user_id
;

위와 아래 Table 비교 : 아래 Table에 모든 filename이 추가되고, JOIN이 되지 않은 부분은 NULL로 채워짐

그리고 파일명과 닉네임만 조회를 하기 위해서 SELECT 부분을 수정한다

 

SELECT
	photos.filename,
	users.nickname
FROM
	photos
LEFT JOIN users ON
	users.id = photos.user_id
;

결과

B. 모든 댓글 "내용"을 조회하시오. 단, 댓글이 달린 사진의 "파일명"도 함께 가져올 것

SELECT
	comments.body,
	photos.filename
FROM
	comments
LEFT JOIN photos ON
	comments.photo_id = photos.id
;

출처 : 홍팍의 'SQL 데이터 분석, 활용!'