개발

[MySQL] 테이블 결합하기(JOIN)

솜씨제이 2018. 8. 1. 18:38

여러 개의 테이블을 특정 키로 결합하는 것을 테이블 참조, 조인식이라고 한다.

SELECT t1.name, t2.salary
  FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;

MySQL에서는 JOIN, INNER JOIN, CROSS JOIN은 동일하다. 표준 SQL에서는 ON 구문에서는 INNER JOIN을 사용하고 다른 경우는 CROSS JOIN을 사용한다.

ON을 사용해서 결합 조건을 표현할 수 있고 결합에 사용하는 키 이름이 같은 경우 USING 사용해서 표현할 수 있다.

SELECT t1.name, t2.salary
  FROM employee t1 JOIN info t2 USING (name);

내부 조인(JOIN, INNER JOIN)은 결합 조건이 일치하지 않는 레코드는 표시하지 않는다. 일치하지 않는 레코드를 표시하려면 외부 조인(외부 결합)을 사용해서 한쪽 테이블의 모든 레코드를 표시할 수 있다.

LEFT JOIN은 왼쪽 테이블(left_tbl)의 결합 키(id)와 일치하는 오른쪽 테이블(right_tbl)의 컬럼 값을 NULL로 사용해서 모든 레코드를 표시한다.

SELECT left_tbl.*
  FROM left_tbl LEFT JOIN right_tbl ON left_tbl.id = right_tbl.id
  WHERE right_tbl.id IS NULL;

RIGHT JOIN은 반대로 오른쪽 테이블(right_tbl)의 모든 레코드를 표시한다. 포터블한 코드를 위해서 LEFT JOIN이 권장된다. 그리고 LEFT JOIN과 RIGHT JOIN을 같이 사용하면 문제가 될 수 있다.