본문 바로가기

공부 기록/Database

Join

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