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를 기준으로 결과값을 보여준다.
'SQL' 카테고리의 다른 글
Join 연습해보기 2 (feat. Inner Join) (0) | 2022.05.23 |
---|---|
Join 연습해보기 (feat. Inner Join) (0) | 2022.05.23 |
Join을 왜 배우고 왜 써야하는가? (0) | 2022.05.22 |
별칭을 사용하여 group by, order by, where 연습해보기 (0) | 2022.05.22 |
SQL 별칭 기능 (Alias) (0) | 2022.05.22 |