본문 바로가기

나 취준생/SQL

SQL - 테이블 조인 2

320x100

* 조인 문법  2가지      1.  오라클 조인 문법

                                                - equi  join

                                                - non equi  join

                                                - outer  join

                                                - self  join

                                  2.  1999 ANSI 조인 문법 

                                                - on 절을 사용한 조인

                                                - using 절을 사용한 조인 

                                                - natural  join

                                                - left/right/full  outer  조인

                                                - cross 조인 


저번에 다룬 것은 오라클 조인 문법.


이번에는 ANSI 조인 문법으로 조인을 해보자.


1. 테이블의 데이터를 조인해서 출력하기 1 ( ON 절 )


1. 오라클 equi  join                                   2. on 절을 사용한 조인

 

  select  e.ename,  d.loc                             select  e.ename, d.loc

    from  emp  e, dept  d                               from  emp  e  join   dept  d

   where  e.deptno = d.deptno ;                       on  ( e.deptno = d.deptno ) ;



차이점은 콤마가 사라지고, where 절 대신에 on 절을 넣어준 점이다.


근데 이거 왜 함?


예제 : DALLAS 에서 근무하는 사원들의 이름과 월급과 부서위치와 직업을 출력하기


select  e.ename, e.sal, d.loc, e.job

  from  emp  e  join  dept  d

  on  (  e.deptno = d.deptno )

  where   d.loc='DALLAS'; 


다음과 같이 검색 조건을 where 절에 적었을 때 on 절과 구분이 되서

조인 조건과 검색 조건을 명확하게 구분해서 알아보기 편하다는 장점이 있다.


2. 테이블의 데이터를 조인해서 출력하기 2 ( USING 절 )


예제 : 직업이 SALESMAN 인 사원들의 이름과 월급과 직업, 부서위치를 출력하기


select  e.ename, e.sal,  e.job,  d.loc

  from   emp  e   join  dept   d

  using  ( deptno )

  where  e.job='SALESMAN'; 


ON 절과 거의 같다.

차이점은 ON 대신 USING은 컬럼명만 명시해준다.

개인적으로 ON 절보다 더 깔끔한 것 같다.



3. 테이블의 데이터를 조인해서 출력하기 3 ( FULL OUTER JOIN )


그렇다면, 양쪽에 데이터가 부족할 때도 양쪽에 OUTER JOIN을 할 수 있을까?


예제 : 사원의 이름과 부서위치를 출력하시오


select  e.ename, d.loc

 from  emp  e,   dept   d

 where  e.deptno (+) = d.deptno (+);



ORA-01468: outer-join된 테이블은 1개만 지정할 수 있습니다.


OUTER JOIN을 양쪽에 수행하면 다음과 같은 오류가 발생한다.


그러니 


select  e.ename,  d.loc

  from  emp  e   full  outer   join   dept   d

   on  ( e.deptno = d.deptno );


또는


select  e.ename,  d.loc

  from  emp  e   full  outer   join   dept   d

   using ( deptno );



이렇게 full outer join이라고 선언하고 on 절 또는 using 절을 사용해줘야 한다.


4. 테이블의 데이터를 조인해서 출력하기 4 ( NATURAL JOIN )


** where 절 없이 간단하게 조인하는 조인 문법

   오라클이 알아서 두 테이블 사이에 공통된 컬럼이 있는지 찾아보고 조인한다. 


예제 : 사원과(emp 테이블) 부서 위치를(dept 테이블) 출력하기


select  e.ename,  d.loc

 from  emp  e  natural  join  dept  d; 



분명 편리한 조인인데, 아무래도 기계가 알아서 하니까 현업에서 사용하기에는 좀 찝찝하다고 한다.










반응형

'나 취준생 > SQL' 카테고리의 다른 글

SQL - 서브 쿼리  (0) 2020.11.08
SQL - 테이블 간 집합 연산자  (0) 2020.11.08
SQL - 테이블 조인  (0) 2020.11.07
SQL - 데이터 분석 함수 2  (0) 2020.11.05
SQL - 컬럼을 ROW로 출력하기  (0) 2020.11.05