본문 바로가기
카테고리 없음

[SQL] 조인

by 서초록 2021. 11. 9.

조인이란

정규화는 테이블을 잘게 쪼개 중복과 같은 이상현상을 방지한다. 실제로는 여러 테이블에 흩어져 존재하는 정보를 찾기 위해 두 개 이상의 테이블을 연속적으로 조회하는 경우가 많다. 서브쿼리도 간편하지만 이럴 때 더 일반적인 해결책은 

조인이다. 조인은 복수 개의 테이블에서 조건에 맞는 데이터를 조회하는 방법이다. 

 

조인의 유형

- 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(외부 조인)

- 서로 대응하지 않는 행도 출력하는 조인

- 조건절을 필수로 사용