C. Oracle

oracle 조인

sfeg 2017. 7. 2. 21:34
- oracle에서는 조인쿼리를 정확하게 명시하지 않으면 가능한 모든 조합을 보여준다.
   => Cartesion  product
  ex) select * from emp, dept;
 
 
조인쿼리
 
Equi  JOIN :   = 각각의 테이블에 공통된 컬럼이 있을때
                         ex)   select  emp.ename, dept.dname, emp.deptno ,dept.deptno
                                 from emp,dept
                                 where emp.deptno = dept.deptno;
 
 
Table Alias:   =  별칭을 쓰게되면 모든곳에 별칭을 써야한다. 원래의 table명을 사용하면 error남
                         ex)   select  e.ename, d.dname, e.deptno ,d.deptno
                                 from emp e,dept  
                                 where e.deptno = d.deptno;
 
 
Non-Equi Join : = 각각의 테이블에 공통된 컬럼이 없을때
                          ex)  SELECT e.ename, s.grade
                                 FROM  emp e, salgrade s
                                 WHERE e.sal  BETWEEN s.losal AND s.hisal;
 
 
 
Self Join   : 자신이 자신의 테이블에 조인을 하는것~ 메모리에 cppy하여 2개의테이블에서 조인하는 효과
                        (Aliase하여...논리적으로 2개의 테이블을 만드는 효과)
                       ex) select  e.ename, e.sal, ee.ename 
                              from emp e, emp ee
                              where  e.mgr=ee.empno
 
 
Outer Join   : 기본 테이블 컬럼 데이타를 다 출력하고(equi join) join된 결과값이 있는것은 출력하고
                            없는것은 null출력 
(+)
                            ex) select e.ename, c.ename  
                                   from emp e, emp c  
                                   where e.mgr = c.empno(+)
 
 
 1999 SQL3(99문법)
 
cross  join      : ex) select e.ename, d.dname  from emp e cross join dept d;
 
natural join    : 두 테이블의 컬럼명이 동일한 컬럼을 가지고 조인조건으로 사용.
                                 (ps 동일한 컬럼이 하나여야한다. 2개이상이면 에러난다.)
                                ex)select e.ename, d.dname  from emp e natural join dept d;
 
join  using      : 두 테이블의 컬럼명이 동일한 컬럼을 가지고 조인조건으로 사용.
                                (ps 동일한 컬럼이 2개이상일때 사용)
                                여러개의 컬럼중 JOIN조건으로 사용할 특징 컬럼을 선택할수 있다.
                                ex) select e.ename, d.dname from emp e join dept d using(deptno);
 
join  on        :두 컬럼의 데이타는 같지만 컬럼명이 틀릴때 사용
                         ex) select e.ename, d.dname from emp e join dept d on(e.deptno=d.deptno);
 
 
left outer join on      
 :select e.ename, c.ename from emp e left outer join    emp c on(e.mgr=c.empno);
 
right outer join on   
 :
select e.ename, c.ename from emp e right outer join  emp c on(e.mgr=c.empno);
 
full outer join on     
 :select e.ename, c.ename from emp e full outer join    emp c on(e.mgr=c.empno)