🤔 JOIN 시 주의 할 점
조인 처리 시 어느 테이블을 먼저 읽을지 결정하는 것은 처리할 작업량이 달리지기 때문에 중요하다.
- INNER JOIN은 어느 테이블을 먼저 읽어도 결과가 달라지지 않아서 MySQL Optimizer가 조인 순서를 조절해서 다양한 방법으로 최적화를 수행한다.
- OUTER JOIN은 OUTER가 되는 테이블을 먼저 읽어야 함으로 Optimizer가 조인 순서를 선택할 수 없다.
and
키워드로 이어서 where 조건을 줄 수 있다.select *
from table_l l, table_r r
where l.common = r.common;-- 조인 조건
inner
키워드는 생략 가능하다.on
키워드를 사용하고, 일반 조건은 where을 사용해야 한다.select common, col_l, col_r
from table_l inner join table_r
on table_l.common = table_r.common;
USING을 이용한 join
- 조인 조건에 들어갈 컬럼명이 같을 경우
USING
키워드를 사용하며 코드를 줄일 수 있다.select * from table_l inner join table_r -- on table_l.common = table_r.common; using(common); -- table이름이나 alias를 명시하면 안된다.
select col1,col2...conN
from table1 NATURAL JOIN table2
🤔 natural join을 사용할 때 주의할 점
조인을 하려는 테이블에 동일한 컬럼이 두 개 이상이라면 의도치 않은 칼럼을 공통 칼럼으로 인식할 수 있기 때문에 주의가 필요하다.
outer
라는 키워드는 생략 가능하다.select *
from table_l left join table_r
using(common);
select *
from table_l right join table_r
using(common);
full outer join
를 사용하기 위해서는 left outer join
과 right outer join
을union
을 하면된다.select l.common, l.col_l, r.col_r
from table_l l left join table_r r
using(common)
union
select l.common, l.col_l, r.col_r
from table_l l right join table_r r
using(common);
👀 join 연산 시
*
을 사용하지 말고 컬럼명을 명시하자
left join 결과 조회 결과의 컬럼 순서는 common - col_l - col_r이지만
right join 결과 조회 결과의 컬럼 순서는 common - col_r - col_l이다.
이렇게 순서가 다른 컬럼을 union하게 되면 의도치 않게 아래와 같은 결과를 얻을 수 있다.
그러므로 join 컬럼을 명시하자
ex) Not-Equi JOIN
select