Table Join Type

개발자/Oracle 2013. 1. 26. 16:15

Oracle term

- Cartesian Product   행갯수를 곱하여 출력

- Equijoin                 = (같을)조건

SELECT * 

FROM dept d , emp e 

WHERE d.deptno = e.deptno;


- Non-equijoin          Equal(=) 이외의 연산자를 사용하여 Join condition을 작성한 경우 non-equijoin 이라한다.

SELECT e.ename, e.job , e.sal, s.grade

FROM emp e,salgrade s

WHERE e.sal between s.losal and s.hisal;


- Outer Join            dept , emp 두 테이블의 겹치는 결과를 제외한 나머지 emp에 관하여 NULL 로 반환하여 표시한다.


SELECT d.dname, e.ename

FROM dept d, emp e

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



SELECT d.dname, e.ename

FROM dept d, emp e

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



- Self join                자기테이블의 칼럼 2개를 스스로 join 하여 값을 출력

SELECT emp.ename , mgr.ename

FROM emp,emp mgr

WHERE emp.mgr = mgr.empno;


emp 의 테이블

self join 결과


행의갯수는 신경쓰지마시고 봐주세요.


ANSI Term               ANSI 표준 'Join'

- Cross join             = Cartesian Product 와 같다.

- Natural Join , Join Using, Join On


Natural Join (중복된 속성 중 하나를 제거 하여 정렬)

SELECT * FROM dept natural join emp;

dept , emp 테이블에서 중복된 속성은 deptno 이다.



Join Using  ( 특정한 속성을 사용하여 Join)

SELECT * FROM dept JOIN emp USING(deptno);   dept,emp 테이블의 deptno만 사용하여 정렬


Join On  ( 다른 조인들과 달리 , 컬럼 이름이 달라도 Join을 할 수 있다.)

SELECT * FROM dept d JOIN emp e ON ( d.deptno = e.dept );


- Right Outer Join, Left Outer Join, Full Outer Join

RIGHT OUTER JOIN  - 오른쪽 배치된 테이블에 데이터가 존재하지 않을 경우


SELECT e.ename , d.dname FROM dept d RIGHT OUTER JOIN emp e USING(deptno);




LEFT OUTER JOIN   -  왼쪽에 배치된 테이블에 데이터가 존재하지 않을 경우


SELECT e.ename , d.dname FROM dept d LEFT OUTER JOIN emp e USING(deptno);



FULL OUTER JOIN   -  양쪽모두 데이터가 존재하지 않을 경우


SELECT e.ename , d.dname FROM dept d FULL OUTER JOIN emp e USING(deptno);



'개발자 > Oracle' 카테고리의 다른 글

Oracle구조  (0) 2013.01.26
Advanced Query ( Aggregation )  (0) 2013.01.26
oracle Date Format  (0) 2013.01.26
Basic Query  (0) 2013.01.24
DML,DDL,CDL,TCL,Null  (0) 2013.01.24
블로그 이미지

김진리

,