최보름달

[SQL] INNER JOIN, NATURAL JOIN 본문

문송한 회사생활/SQL 공부

[SQL] INNER JOIN, NATURAL JOIN

PieMoon 2020. 8. 15. 16:07

INNER JOIN

INNER JOIN은 OUTER(외부) JOIN과 대비해서 내부JOIN 이라고 하며

JOIN 조건에서 동일한 값이 있는 행만 반환한다. 

 

INNER JOIN 표시는 WHERE 절에서 사용하던 JOIN 조건을 FROM 절에서 정의하겠다는 표시이므로 USING 이나 ON을 필수적으로 같이 써야한다. 

 

SELECT  EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM    EMP INNER JOIN DEPT
ON      EMP.DEPTNO = DEPT.DEPTNO;


-- INNER 는 JOIN의 디폴트 옵션이라서 생략할 수 있다. 
SELECT  EMP.DEPTNO, EMPNO, ENAME, DNAME
FROM    EMP JOIN DEPT
ON      EMP.DEPTNO = DEPT.DEPTNO;

 

NATURAL JOIN 

두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 EQUI(=) JOIN을 수행한다. 

NATURAL JOIN 은 USING, ON 과 같이 사용할 수 없다. 

sql server 에서는 지원하지 않는 기능이다.

 

SELECT DEPTNO, EMPNO, ENAME, DNAME
FROM   EMP NATURAL JOIN DEPT ;

별도의 JOIN 컬럼을 지정하지 않아도 두 개 테이블에서 DEPTNO라는 공통된 컬럼을 자동으로 인식하여 조인 처리한다. 

조인 처리된 컬럼은 같은 데이터 유형이어야 한다. 

ALIAS나 테이블명과 같은 접수다를 붙일 수 없다. 

 

NATURAL JOIN 은 JOIN에 사용되는 컬럼명이 동일해야 하는데, 모델링 상의 부주의로 동일한 컬럼명인데 다른 용도로 사용되는 경우도 있으므로 주의해야 한다. 

 

 

 

출력 순서 

와일드카드(*)를 사용하면 (별도 순서를 지정하지 않으면) NATURAL JOIN 의 기준이 되는 컬럼이 다른 컬럼보다 먼저 출력된다. 

SELECT *
FROM   EMP NATURAL JOIN DEPT ;

 

반면, INNER JOIN 에서 * 를 사용하면, 첫 번째 테이블, 두 번째 테이블 순서대로 데이터가 출력된다. 

SELECT  *
FROM    EMP INNER JOIN DEPT
ON      EMP.DEPTNO = DEPT.DEPTNO;

 

NATURAL JOIN 은 조인에 사용된 같은 이름의 컬럼을 하나로 처리하지만, INNER JOIN은 별개의 컬럼으로 표시한다. 

 

 

kdata 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다.