[SQL] 테이블 JOIN의 개념과 예제

wijoonwu·2022년 8월 1일
0

SQL

목록 보기
4/4
post-thumbnail

Join 이란

join이란 인스타그램의 댓글창처럼, 유저의 아이디와 댓글의 내용을 동시에 보여줄 때처럼 서로 다른 각각의 테이블 속 데이터를 동시에 보여주려고 할 때 사용하는 SQL문이다.

JOIN의 종류

  • Inner Join
  • Outer Join

JOIN의 종류로는 Inner Join과, Outer Join이 있는데 위 예시에서 살펴본 JOIN은 Inner Join이다.

INNER JOIN

예시 문법

위와 같은 테이블이 존재할 때, Inner Join 의 sql 쿼리문은 아래와 같다.

(1) “사진#1”에 달린 모든 “댓글 내용”과 작성자 “닉네임”을 조회

SELECT
  comments.body,
  users.nickname
FROM
  comments
JOIN users ON
  users.id = comments.user_id
WHERE
  comments.photo_id = 1
;

(2) “사진#2”에 좋아요를 누른 사용자 “닉네임”과 대상 사진의 “파일명”을 조회

SELECT
  users.nickname,
  photos.filename
FROM
  likes
JOIN users ON
  users.id = likes.user_id
JOIN photos ON
  photos.id = likes.photo_id
WHERE
  photos.id = 2
;

OUTER JOIN

OUTER JOIN 의 종류

  • Left Join
  • Right Join
  • Full Join

Outer Join은 Inner Join과 달리 3가지 종류가 있으며, 그 이름처럼 교집합 외부에 존재하는 데이터를 가져올 때 사용한다.
이렇게 다양한 Join 중에서 LEFT 조인이 일반적으로 가장 많이 사용된다.

LEFT JOIN

먼저 Left Join은 좌측 테이블 데이터에 추가로 우측 정보를 조인하는 문법이다.
모든 좌측 테이블을 가져오되 조인 가능한 것은 붙이고, 조인 불가능한 것은 NULL로 채운다.

INNER 조인 vs LEFT 조인

INNER 조인의 경우 양측 모두에 존재하는 것만 결과로 만든다.
반면 LEFT 조인은 좌측 테이블 중 조인 불가능한 것들도 모두 결과로 만든다.
이때, 조인 불가능한 우측 테이블은 값은 NULL로 채워진다.

예시 문법

(1) 모든 사진의 "파일명", 게시자가 있다면 "닉네임"도 함께 조회

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

여기서 FROM 의 photos 테이블이 LEFT 조인이 된다.
LEFT JOIN 키워드를 쓰면 Join 되지 않는 나머지 데이터도 함께 출력 된다.

DATA OUTPUT

Left Join이 아니라 그냥 JOIN 을 하는 경우 Inner Join이 되며, Join 되지 않는 부분은 출력되지 않는다.

RIGHT JOIN

단순히 LEFT 조인을 뒤집은 개념으로, 우측 테이블을 모두 살린 채로 좌측 테이블을 붙이되 조건을 만족하는 데이터만 붙이는 것이다.

FULL JOIN

FULL JOIN은 좌측,우측 상관없이 데이터가 있는 것은 모두 가져오고 없는 것은 모두 Null 이 되는 것이다.

REFERENCE

0개의 댓글