Join이란
한개 또는 두개이상의 테이블을 공통된 컬럼을 기준으로 조합하여 결과를 출력하는 방법.
관계형 데이터베이스에서는 중복 데이터를 피하기 위해
가능한한 데이터를 나눠서 여러 테이블로 나눠서 저장한다.
이렇게 나누어 저장된 테이블에서 원하는 결과를
도출하기 위해서는 여러 테이블을 조합해야 하는 경우가 있다.
이때 관계형 데이터베이스에서는 조인(JOIN) 연산자를 사용하여
관련 있는 컬럼 기준으로 행을 합쳐서 결과를 출력할 수 있다.
MySQL Join의 종류

예제

1. Self join

self join은 하나의 테이블 내에서 join을 하는 형태다.
예제로 test1 테이블에서 friend과 name 컬럼을 공통컬럼으로 두고,
friend의 번호값을 출력하는 쿼리문을 작성해 보았다.
- 쿼리문
1
2
3
4
|
select old.id, old.name, old.friend, new.id as 'friend id'
from test1 as old
join test1 as new
on old.friend = new.name;
|
cs |
- 결과
2. Left join

left join은 왼쪽 테이블을 기준으로 왼쪽테이블의 모든 값을 출력하고,
오른쪽 테이블의 값은 조건에 부합하는 경우 출력하는 join이다.
예제로 test1 테이블을 기준으로, test2의 grade를 출력해 보았다.
- 쿼리문
1
2
3
4
5
|
select t1.id, t1.name, t2.grade
from test1 as t1
left join test2 as t2
on t1.name = t2.name
order by t1.id;
|
cs |
- 결과

3. Right join

right join은 left join과 반대로
오른쪽 테이블을 기준으로 오른쪽 테이블의 모든 값을 출력하고,
왼쪽 테이블의 값은 조건에 부합하는 경우 출력하는 join이다.
left join과 동일한 예제로 right join을 출력해 보았다.
- 쿼리문
1
2
3
4
5
|
select t1.id, t2.name, t2.grade
from test1 as t1
right join test2 as t2
on t1.name = t2.name
order by t1.id;
|
cs |
- 결과
4. Inner join

inner join은 join하는 두 테이블의 공통값만 출력하는 join이다.
예제로 test1 테이블과 test2 테이블간에 공통 데이터값이
있는 경우를 출력해 보았다.
- 쿼리문
1
2
3
4
5
|
select t1.id, t1.name, t2.grade
from test1 as t1
inner join test2 as t2
on t1.name = t2.name
order by t1.id;
|
cs |
- 결과

5. Cross join

다른 join은 공통 컬럼을 기준으로 출력하지만,
cross join은 join하는 두 테이블의 모든 데이터로 곱집합을 만든다.
예제로 test1 테이블과 test2 테이블의 cross join을 출력해 보았다.
- 쿼리문
1
2
3
4
|
select t1.id, t1.name, t2.name, t2.grade
from test1 as t1
cross join test2 as t2
order by t1.id;
|
cs |
- 결과

6. full join

MySQL에서는 full join을 지원하지 않는다.
full join을 출력하기 위해서는 union을 활용하여
right join과 left join을 결합해서 출력해야 한다.
full join은 두 테이블의 모든 데이터를 출력한다.
예제로 test1테이블과 test2테이블간
공통컬럼 (name)을 기준으로 full join을 출력해보았다.
- 쿼리문
1
2
3
4
5
6
7
8
9
|
select * from test1 as t1
left join test2 as t2
on t1.name = t2.name
union
select * from test1 as t1
right join test2 as t2
on t1.name = t2.name;
|
cs |
- 결과
