걷기 시작한 Coding Novice

SQL

Join (Left Join / Inner Join)

Spell 2022. 5. 22. 23:25

Join이란? 두 테이블의 공통된 정보(key값)를 기준으로 테이블을 연결해서 한 테이블처럼 보는 것을 의미한다.

예를 들어 user_id 필드를 기준으로 users 테이블과 orders 테이블을 연결해서 한 눈에 보고 싶어! 같은 거다.

 

그럴 때를 대비해서 무언가 연결된 정보가 있을 때, user_id처럼 동일한 이름과 정보가 담긴 필드를 두 테이블에 똑같이 담아 놓는다. 이런 필드를 두 테이블을 연결시켜주는 열쇠라는 의미로 'key'라고 부른다는 걸 잊지 말자!

 


Left Join

왼쪽에 있는 테이블을 기준으로 테이블을 붙인다는 의미이다.

여기서 A와 B는 각각의 테이블을 의미하고, 둘 사이의 겹치는 부분은 테이블 A와 B의 key 값이 연결되는 부분이다.

 


Inner Join

여기서도 A와 B는 각각의 테이블을 의미하고, 두 테이블의 교집합을 이야기하고 있다.

 


직접 join 사용해보기

아래의 사진은 현재 실습하고 있는 데이터의 테이블들이다.

여기서 users테이블과 point_users테이블을 함께 붙여볼꺼다.

 

users테이블 부터 확인해보자. 별칭은 u로 주었다.

select *
from users u

 

point_users테이블도 확인해보자. 별칭은 pu로 주었다.

select *
from point_users pu

 

두 테이블에 함께[ 있는 필드는 user_id가 있네? 이를 기점으로 연결해주면 좋겠지?

select *
from users u
left join point_users pu
on u.user_id = pu.user_id

별칭을 줌으로써 알아보기 쉽게 작성했고, 풀이해보자면 "left join으로 point_users테이블로 left join을 한다고 작성했다. 무엇을 기준으로? u.user_id와 pu.user_id로 연결하자." 라는 의미이다.

(별칭으로 인하여 u.user_id는 users테이블의 user_id, pu_user_id는 point_users테이블의 user_id라는 뜻이다)

이 안에 null값들은 "비어있다, 매칭이 안된다" 라는 뜻읻다. 모든 유저가 포인트를 가지고 있는게 아니기에 해당 정보가 비어 있는 것이다.

 

여기서 left join을 inner join으로 변경하면?

select *
from users u
inner join point_users pu
on u.user_id = pu.user_id

inner join은 교집합을 뜻하기에, poin가 존재하는 user_id를 기준으로 결과값을 보여준다.