OUTER JOIN

조인 조건에서 동일한 값이 없는 행도 반환해준다.

left outer join(왼쪽 테이블의 모든 행이 반환된다.)

right outer join(오른쪽 테이블의 모든 행이 반환된다.)

- left outer join

SQL> select e.ename, e.job, d.deptno, d.dname 
  2  from emp e, dept d
  3  where d.deptno=e.deptno(+); 
//dept테이블의 모든 행이 출력될 수 있도록 emp필드의 행을 맞추라는 의미
//dep테이블의 deptno=40 인 행도 출력된다, emp와 대응되는 없는 행을 표시

ENAME      JOB           DEPTNO DNAME
---------- --------- ---------- --------------
CLARK      MANAGER           10 ACCOUNTING
                   ...
MARTIN     SALESMAN          30 SALES
                             40 OPERATIONS

 

- right outer join

//이름에 A가 들어간 사원
select e.empno, e.ename, e.job, d.deptno, d.dname 
from emp e, dept d
where e.deptno(+)=d.deptno and e.ename like ‘%A%’;

 

********************************************

inner join => and,or 둘다 사용가능

outer join => and만 사용가능/ in,or 사용불가

********************************************

 

SELF JOIN

한 테이블 내에서 조인한다.

emp(empno)----------emp(mgr)      #mgr: 해당 사원의 관리자의 empno를 의미

      w                                      m

SQL> select '직원: '||w.ename||', '||'직속상관: '||m.ename
  2  from emp w,emp m
  3  where w.mgr=m.empno;

'직원:'||W.ENAME||','||'직속상관:'||M.
--------------------------------------
직원: FORD, 직속상관: JONES
직원: SCOTT, 직속상관: JONES
            ... 

 

ANSI JOIN( INNER, OUTER )

ANSI(미국표준연구소) SQL은 대부분의 사용 DBMS에서 표준 언어이다.

다른 DBMS와의 호환성을 위해 ANSI 조인을 사용하는 것이 좋다.

- inner join

select 필드명1,필드명2,...
from 테이블1 (inner) join 테이블2
on 테이블1.필드명1=테이블2.필드명2
where 조건절;

 

- outer join

select 필드명1,필드명2,...
from 테이블1 (left/right) outer join 테이블2
on 테이블1.필드명1=테이블2.필드명2
where 조건절;

 

- using 절 구문 사용 (두 테이블의 공통된 칼럼의 이름이 같아야한다)

select e.empno,e.ename,deptno,d.dname,d.loc 
//테이블 별칭을 사용하면 필드명에도 꼭 적어줘야한다
//using절에 들어가는 공통 필드명은 별칭을 함께 적지 않는다
from emp e join dept d
using (deptno); 

 

+ Recent posts