조인이란
정규화는 테이블을 잘게 쪼개 중복과 같은 이상현상을 방지한다. 실제로는 여러 테이블에 흩어져 존재하는 정보를 찾기 위해 두 개 이상의 테이블을 연속적으로 조회하는 경우가 많다. 서브쿼리도 간편하지만 이럴 때 더 일반적인 해결책은
조인이다. 조인은 복수 개의 테이블에서 조건에 맞는 데이터를 조회하는 방법이다.
조인의 유형
- Equi Join / Non-Equi Join
- 암시적 조인 / 명시적 조인
- Inner Join / Outer Join / Cross Join / Self Join
EQUI JOIN(동등 조인)
- 셋 이상 테이블의 조인은 실제로는 두 테이블 간 조인이 연쇄적으로 일어남
- 중복 칼럼의 경우, 칼럼명 앞에 테이블명을 붙여야함
- 중복되지 않는 칼럼도 칼럼명 앞에 테이블명을 붙이는 것을 권장
INNER JOIN(내부 조인)
- 서로 대응되는 내용만 검색하는 조인
- 조건절을 필수로 사용
- 조인의 Default이므로 "INNER" 생략가능
INNER JOIN = JOIN
- 중복 컬럼에 반드시 접두사 붙여야함
SELECT E.ENAME, E.DEPTNO, E.SAL, D.DNAME
FROM EMP E INNER JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE E.SAL > 2000;
SELECT EMPNO, ENAME, DEPTNO, DNAME
FROM EMP NATURAL INNER JOIN DEPT;
NATURAL JOIN
- INNER JOIN의 특수한 경우
NATURAL INNER JOIN = NATURAL JOIN
- 두 테이블 간 동일한 이름을 갖는 모든 칼럼들에 대해 EQUI JOIN 수행
칼럼 간 데이터 타입도 동일해야함
별도의 조인 칼럼 및 조건을 지정할 수 없음
- 조인이 대상이 되는 칼럼에는 접두사(테이블명/ALIAS)를 사용할 수 없음
- 중복 컬럼에 접두사 붙이면 안됨
SELECT EMPNO, ENAME, EMP.DEPTNO, DNAME
FROM EMP INNER JOIN DEPT
ON EMP.DEPTNO = DEPT.DEPTNO;
ON 조건절
- 명시적 JOIN에서 JOIN기준 조건은 ON절에 기술
- ON 절의 괄호는 생략 가능
- JOIN과 무관한 일반 조건은 WHERE절에 기술
- 중복컬럼이 같은 이름일 때 USING사용가능
SELECT E.EMPNO, E.ENAME, E.DEPTNO, D.DNAME
FROM EMP E JOIN DEPT D
ON E.DEPTNO = D.DEPTNO
WHERE E.ENAME LIKE '%S';
USING 조건절
- ON절의 = 연산자 대신 USING절 사용가능
- 괄호 생략 불가
- 접두사를 사용할 수 없음
SELECT EMPNO, ENAME, DEPTNO, DNAME
FROM EMP E JOIN DEPT D
USING (DEPTNO);
OUTER JOIN(외부 조인)
- 서로 대응하지 않는 행도 출력하는 조인
- 조건절을 필수로 사용