JOIN
- 두 개 이상의 table들에 있는 데이터를 한 번에 조회하는 것.
implicit join & explicit join
- implicit join : WHERE 절에 join condition을 명시하는 방식. old한 방식이며 가독성이 떨어진다.
SELECT D.name FROM employee AS E, department AS D WHERE E.id = 1 and E.dept_id = D.id;
- explicit join : from 절에 JOIN 키워드와 함꼐 joined table들을 명시하는 방식.
SELECT D.name FROM employee AS E (INNER) JOIN department AS D ON E.dept_id = D.id WHERE E.id = 1;
inner join & outer join
- inner join : 두 table에서 join condition을 만족하는 tuple들로 result table을 만든다. null 값을 가지는 tuple은 result table에 포함되지 못한다.
FROM table1 (INNER) JOIN table2 ON join_condition
- outer join : 두 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함한다.
~ FROM table1 LEFT (OUTER) JOIN table2 ON join_condition
~ FROM table1 RIGHT (OUTER) JOIN table2 ON join_condition
~ FROM table1 FULL (OUTER) JOIN table2 ON join_condition
(FULL OUTER JOIN은 MySQL에서 지원하지 않는다.)
equi join
- join condition에서 '=' 를 사용하는 join
(inner join으로 한정해서 '='를 사용한 경우에만 equi join으로 보는 경우가 있음)
USING
- 두 table이 equi join할 때 join하는 attribute의 이름이 같다면, USING으로 간단하게 작성할 수 있다.
- 같은 이름의 attribute는 result table에서 한 번만 표시된다.
~ FROM employee E INNER JOIN department D ON E.dept_id = D.dept_id;
⬇️
~ FROM employee E INNER JOIN department D USING (dept_id);
natural join
- 두 table에서 같은 이름을 가지는 모든 attribute pair에 대해서 equi join을 수행한다.
- join condition을 따로 명시하지 않는다.
cross join
- 두 tabled의 tuple pair로 만들 수 있는 모든 조합(Cartesian product)을 result table로 반환한다.
(MySQL에서는 cross join = inner join = join이다.) - implicit cross join : FROM table1, table2
explicit cross join : FROM table1 CROSS JOIN table2 - CROSS JOIN에 ON(or USING)을 같이 쓰면 inner join으로 동작한다. INNER JOIN(or JOIN)이 ON(or USING) 없이 사용되면 cross join으로 동작한다.
self join
- table이 자기 자신에게 join 하는 경우
'공부 기록 > Database' 카테고리의 다른 글
MongoDB 설치하기 (0) | 2023.06.23 |
---|---|
정렬, 집계 함수, 그룹핑 (0) | 2023.06.02 |
Three-Valued Logic (0) | 2023.05.04 |
쿼리 안의 쿼리(서브쿼리) (0) | 2023.05.02 |
DML - 데이터 조작하기 (0) | 2023.01.19 |