두 개 이상의 테이블을 가로로 묶어서 하나의 결과 집합으로 만들어 내는 것
종류 : INNER JOIN
, OUTER JOIN
, CROSS JOIN
, SELF JOIN
- ❕ 데이터베이스의 테이블은 중복과 공간 낭비를 피하고 데이터의 무결성을 위해 여러 개의 테이블로 분리하여 저장 (정규화)
- ❕ 분리된 테이블은 서로 관계(Relation)을 가짐
- ❕ 1 : N 관계가 보편적
일치하는 행이 없을 경우 제외하고 두 테이블을 합침
-- emp의 deptno와 dept의 deptno가 일치 하는 행만 합쳐서 출력
SELECT * FROM emp JOIN dept ON emp.deptno = dept.deptno;
SELECT * FROM emp JOIN dept USING (deptno);
ON vs. USING
on
: 비교조건(condition)을 통해 두 테이블의 관계 규명
using
: 두 테이블에 모두 있는 해당 행을 사용하여 두 테이블의 관계 규명
일치하는 행이 없어도 null 값을 채워 테이블을 합침
Left Outer Join
: 왼쪽 테이블을 기준으로 JOIN
을 실시
➡ 왼쪽의 모든 값을 출력하고 오른쪽에서 합쳐지는 값이 없을 경우 null
로 채움
Right Outer Join
: 오른쪽 테이블을 기준으로 JOIN
을 실시
➡ 오른쪽의 모든 값을 출력하고 왼쪽에서 합쳐지는 값이 없을 경우 null
로 채움
Full Outer Join
: 양쪽 모두 빈 값을 null로 채우고 사라지는 값 없이 모두 합침
❗ MySQL에서는 지원하지 않아 LEFT JOIN
⋃(UNION
) RIGHT JOIN
으로 해결 해야함
Product 연산(행렬곱)과 동일
자기 자신과 자기 자신의 JOIN
SELECT
e.empno '사원번호',
e.ename '사원이름',
IFNULL(m.empno, '없음') '관리자번호',
IFNULL(m.ename, '없음') '관리자이름'
FROM
emp e
LEFT JOIN
emp m ON e.mgr = m.empno;