조인은 어느 테이블을 먼저 읽느냐에 따라 작업 시간이 달라진다.
inner join은 어느 테이블을 먼저 읽어도 상관이 없어 MySQL 옵티마이저가 알아서 최적화된 방법으로 수행한다.
outer join은 outer가 되는 테이블을 먼저 읽어야하므로 옵티마이저가 선택해주지 않는다.
두 테이블의 교집합을 찾는 join, 동등 조인이라고도 하며, N개의 테이블을 조인할 시 n-1개의 조건이 필요하다.
select col1, col2, col3 .... from table1 inner join table2 on table1.col1 = table2.col2;
select col1, col2, col3 .... from table1 inner join table2 using(col1)
//칼럼의 이름(alias 불가능)이 같은 경우 using 가능
교집합을 포함 + 교집합에 포함 되지 않는 데이터까지 같이 찾고 싶을 때 사용한다.
ex) 테이블에는 13개의 반이 있지만, 현재 학생은 6반까지만 DB에 저장되어있다면, inner join을 통해서 출력하게 될 시 6반까지만 조회가 가능하다. 이때, 교집합에 포함되지 않은 7~13반까지 전부 출력하려면 outer join이 필요하다.
select col1, col2, col3... from table 1 left outer join table2 using(col1);
//left (table1)을 기준으로 outer join
MySQL은 Full Outer Join을 지원하지 않는다. (left, right만 가능)
같은 테이블끼리 join하는 것.
ex) 특정 학생이 있는 반의 반장을 출력하고 싶다면? 반장도 반의 학생이므로 같은 테이블을 join하면 확인할 수 있다.
Primary Key, Foreign Key가 아닌 일반 column으로 join을 하는 경우.