[SQL] SQL Join에 대한 이해
# Table A
select * from A
/*--------------------------------------------------------
id username
1 홍길동
2 일지매
3 강감찬
--------------------------------------------------------*/
# Table B
select * from B
/*--------------------------------------------------------
no user_id school
1 1 서울대
2 2 부산대
3 2 동아대
--------------------------------------------------------*/
# Table C
select * from C
/*--------------------------------------------------------
no user_id school
1 1 전자과
2 2 화학과
3 3 무역과
4 3 기계과
--------------------------------------------------------*/
# A와 B의 id가 같은(즉, 공통부분만) Row
select
A.id,A.username,B.school
from
A join B on A.id = B.user_id
-- 중요한것은 B에 user_id가 같은 것이 여러개 있다면 id가 같은 Row가 여러개 나온다
/*--------------------------------------------------------
id username school
1 홍길동 서울대
2 일지매 부산대
2 일지매 동아대
--------------------------------------------------------*/
# 모든 A의 Row - 기준 테이블(A)에 B정보를 붙임
select
A.id,A.username,B.school
from
A left join B on A.id = B.user_id
-- 중요한것은 B에 user_id가 같은 것이 여러개 있다면 id가 같은 Row가 여러개 나온다
/*--------------------------------------------------------
id username school
1 홍길동 서울대
2 일지매 부산대
2 일지매 동아대
3 강감찬 NULL
--------------------------------------------------------*/
# 모든 B의 Row - 기준 테이블(B)에 A정보를 붙임
select
A.id,A.username,B.school
from
A right join B on A.id = B.user_id
-- 중요한것은 B에 user_id가 같은 것이 여러개 있다면 id가 같은 Row가 여러개 나온다
/*--------------------------------------------------------
id username school
1 홍길동 서울대
2 일지매 부산대
2 일지매 동아대
--------------------------------------------------------*/
# 모든 B의 Row
select
A.id,A.username,B.school
from
A inner join B on A.id = B.user_id
-- join 과 동일 (inner join = join)
-- 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용됩니다.
-- 아래처럼 표현할수도 있다면
select
A.id,A.username,B.school
from
A , B
where
A.id = B.user_id
/*--------------------------------------------------------
id username school
1 홍길동 서울대
2 일지매 부산대
2 일지매 동아대
--------------------------------------------------------*/
SELECT a.id,a.username,b.school,c.major
from
A as a
left join B as b ON a.id = b.user_id
left join C as c ON a.id = c.user_id
/*--------------------------------------------------------
id username school major
1 홍길동 서울대 전자과
2 일지매 부산대 화학과
2 일지매 동아대 화학과
3 강감찬 NULL 무역과
3 강감찬 NULL 기계과
--------------------------------------------------------*/