Home Database 6. join과 관련 지식 정리
Post
Cancel

Database 6. join과 관련 지식 정리

  • MySQL 문법을 기준으로 서술한다.

SQL에게 JOIN이란?

  • 두 개 이상의 table들에 있는 데이터를 한 번에 조회하는 것
  • 여러 종류의 JOIN이 존재한다.

implicit join vs explicit join

Implicit join

1
SELECT D.name FROM employee AS E, department AS D WHERE E.id = 1 and E.dept_id = D.id;
  • FROM 절에는 table들만 나열하고 where절에는 join condition을 명시하는 방식
  • old-style join syntax
  • where절에는 selection condition과 join condition이 같이 있기 때문에 가독성이 떨어진다.
  • 복잡한 join쿼리를 작성하다 보면 실수로 잘못된 쿼리를 작성할 가능성이 크다.

Explicit join

1
SELECT D.name FROM employee AS E JOIN department AS D ON E.dept_id = D.id WHERE E.id = 1;
  • FROM 절에 JOIN 키워드와 함께 joined table들을 명시하는 방식
  • from 절에서 ON 뒤에 join condition이 명시된다.
  • 가독성이 좋다.
  • 복합한 join 쿼리 작성 중에도 실수할 가능성이 적다.

JOIN 종류

INNER JOIN

  • 두 table에서 join condition을 만족하는 tuple들로 result table을 만드는 join
  • FROM table1 [INNER] JOIN table2 ON join_condition - INNER JOIN에서 INNER를 생략 가능
  • join condition에 사용 가능한 연산자(operator) : =, <, >, != 등등 WHERE 절과 비슷하게 여러 비교 연산자가 가능하다.
  • join condition에서 null 값을 가지는 tuple은 result table에 포함되지 못한다.

OUTER JOIN

  • 두 table에서 join condition을 만족하지 않는 tuple들도 result table에 포함하는 join
1
2
3
FROM table1 LEFT [OUTER] JOIN table2 ON join_condition; -- 왼쪽 테이블을 기준으로 매칭되지 않는 table2의 tuple들 까지도 함께 NULL로 채워서 출력된다.
FROM table1 RIGHT [OUTER] JOIN table2 ON join_condition; -- 오른쪽 테이블을 기준으로 매칭되지 않는 table1의 tuple들 까지도 함께 NULL로 채워서 출력된다.
FROM table1 FULL [OUTER] JOIN table2 ON join_condition; -- 양쪽 테이블을 기준으로 매칭되지 않는 table1, table2의 tuple들 까지도 함께 NULL로 채워서 출력된다. 해당 쿼리는 MySQL에서는 지원하지 않는다.

equi join

  • join condition에서 =(equality comparator)를 사용하는 join
  • equi join에 대한 두 가지 시각
    • inner join outer join 상관 없이 = 을 사용한 join이라면 equi join으로 보는 경우
    • inner join으로 한정해서 = 를 사용한 경우 equi join으로 보는 경우

USING 키워드

  • 두 table이 equi join할 때 join하는 attribute의 이름이 같다면, USING으로 간단하게 작성할 수 있다.
  • 이때 같은 이름의 attribute는 result table에서 한번만 표시 된다.
1
SELECT * FROM employee E INNER JOIN department D USING (dept_id);

natural join

  • 두 table에서 같은 이름을 가지는 모든 attribute pair에 대해서 equi join을 수행한다.
  • join condition을 따로 명시하지 않는다.
1
2
3
4
FROM table1 NATURAL JOIN table2
FROM table1 NATURAL LEFT JOIN table2
FROM table1 NATURAL RIGHT JOIN table2
FROM table1 NATURAL FULL JOIN table2

cross join

  • 두 table의 tuple pair로 만들 수 있는 모든 조합(= Cartesian product)을 result table로 반환한다.
  • join condition이 없다.
  • implicit cross join : FROM table1, table2
  • explicit cross join : FROM table1 CROSS JOIN table2
1
SELECT * FROM employee CROSS JOIN department;
  • MySQL에서는 cross join = inner join = join이다.
  • CROSS JOIN에 ON(or USING)을 같이 쓰면 inner join으로 동작한다.
  • INNER JOIN(or JOIN)이 ON(or USING)없이 사용되면 cross join으로 동작한다.

self join

  • table이 자기 자신에게 join하는 경우
This post is licensed under CC BY 4.0 by the author.

Database 5. SQL로 데이터 조회 및 관련 키워드 학습

Database 7. group byaggregate functionorder by