[MSSQL] 조인 방법 쉽게 정리 (INNER JOIN, OUTER JOIN)

SQL Server에서는 조인을 할 때에는 안시 조인(ANSI JOIN) 사용을 권장한다.

아래에는 조인(INNER JOIN), 아우터 조인(LEFT OUTER JOIN, RIGHT OUTER JOIN), 크로스 조인(CORSS JOIN) 사용법을 정리하였다.

 

INNER JOINLEFT OUTER JOIN은 꼭 사용법을 숙지해야 하며, 나머지 부분은 개념만 이해하고 넘어가면 된다.

 

조인 (INNER JOIN) : 기준 테이블과 조인 테이블 모두 데이터가 존재해야 조회됨
아우터 조인 (OUTER JOIN) : 기준 테이블에만 데이터가 존재하면 조회됨

 

조인 (INNER JOIN)

SELECT a.empno
     , a.ename
     , a.job
     , a.mgr
     , a.deptno
     , b.dname
  FROM emp AS a
 INNER JOIN dept AS b
    ON a.deptno = b.deptno

 

 

 

조인은 기준 테이블(emp), 조인 테이블(dept)에  조인 컬럼(deptno)에 해당하는 값이 모두 존재하는 경우에만 데이터가 조회된다.

 

emp 테이블 "KING"의 deptno "90"은 dept 테이블에 존재하지 않기 때문에 조회되지 않는다.

 

아우터 조인  (LEFT OUTER JOIN)

SELECT a.empno
     , a.ename
     , a.job
     , a.mgr
     , a.deptno
     , b.dname
  FROM emp AS a
  LEFT OUTER JOIN dept AS b
    ON a.deptno = b.deptno

 

 

 

아우터 조인에서 LEFT, RIGHT는 기준 테이블을 지정하는 것이며, 위의 쿼리에서 LEFT OUTER JOIN의 기준 테이블은 emp 테이블이다. 

 

아우터 조인의 경우 조인 테이블(dept)에 데이터가 없어도 기준 테이블(emp)의 모든 데이터가 조회되고 조인 테이블(dept)에 데이터가 존재할 경우 해당 데이터를 참조할 수 있다.

 

emp 테이블 "KING"의 deptno "90"은 dept 테이블에 존재하지 않아도 조회가 되지만, dname은 참조할 수 없기 때문에 NULL로 표시된다.

 

아우터 조인  (RIGHT OUTER JOIN)

SELECT a.empno
     , a.ename
     , a.job
     , a.mgr
     , a.deptno
     , b.dname
  FROM emp AS a
 RIGHT OUTER JOIN dept AS b
    ON a.deptno = b.deptno

 

 

 

LEFT OUTER JOIN과 개념을 동일하지만 RIGHT에 해당하는 dept 테이블이 기준 테이블이 된다. LEFT OUTER JOIN의 결과와 다르게 dept 테이블의 모든 데이터가 조회되고 조인 테이블(emp)의 테이블에 데이터가 있을경우 해당 값을 표시한다.

 

대부분 LEFT OUTER JOIN을 많이 사용하지만 상황에 따라서 RIGHT OUTER JOIN을 사용할 수 있으니 개념을 꼭 이해하고 있어야 한다.

 

아우터 조인을 사용하는 이유는 기준 테이블의 데이터를 누락 없이 모두 조회하고 참조 테이블의 값이 있을 경우 해당 값을 사용하기 위해서이다.

 

아우터 조인  (FULL OUTER JOIN)

SELECT a.empno
     , a.ename
     , a.job
     , a.mgr
     , a.deptno
     , b.dname
  FROM emp AS a
  FULL OUTER JOIN dept AS b
    ON a.deptno = b.deptn

 

 

FULL OUTER JOIN은 두개의 테이블을 합쳐서 조회한다고 생각하면 된다. JOIN이 될 경우 해당값을 표시하고 JOIN이 안되면 NULL로 표시하되 두개의 테이블 모든 데이터가 조회된다.

 

자주 사용하지 않기 때문에 개념만 이해하면 된다.

 

크로스 조인 (CROSS JOIN)

SELECT a.empno
     , a.ename
     , a.job
     , a.mgr
     , a.deptno
     , b.dname
  FROM emp AS a
  CROSS JOIN dept AS b

 

 

크로스 조인은 기준 테이블(emp)의 행을 조인 테이블(dept) 행만큼 증가를 시킨다. 

아주 가끔씩 사용할 일이 있으니 개념만 이해하면 된다.

 

활용 예제

 

emp 테이블과 dept 테이블 아우터 조인

dept 테이블과 loc 테이블 조인

 

 

 

emp 테이블과 dept 테이블 아우터 조인

emp 테이블과 emp 테이블 조인

조인 구문 작성 위치와는 상관없이 ON 절에 해당 테이블의 조인 조건이 있으면 조인 된다.

 

 

조인 조건이 여러개인 경우 ON 절에 AND를 사용하여 작성하면 된다.

 

아래의 예제 파일에 테이블뷰가 포함되어 있으니 다운 받아서 참고 하세요.

 

예제쿼리(테이블뷰포함).txt
0.00MB

 

 

댓글

Designed by JB FACTORY