본문 바로가기

IT/oracle&mysql

외부조인(outer join)

SMALL

-외부조인(Outer Join)-


외부조인은 일반적인 조인인 내부조인을 확장한 개념의 조인이라고 볼 수 있다.


내부는

두 테이블이 내부조인으로 연결되었을 경우 조인의 결과는 조인조건에서 명시된 컬럼값이 두 테이블 모두 같은 값을 가진 로우들만 추출된다.


외부조인은  어느 한 테이블의 공통 컬럼값이 없더라도(NULL인 경우) 해당 로우들이 조회결과에 포함된다


1. 조인에 참여하는 테이블 중 어느 한 테이블에 서만 조회조건을 만족하면 다른 한 테이블의 값이 없더라도 데이터를 조회할 수있다.

2. 외부조인은 조회조건에서 (+) 기호를 사용한 조인을 말하는 것이다.

3. 외부조인을 할 때에는 조인조건이 하나 이상일 경우에는 모든 조인조건에 (+)를 붙여야 한다.

(동일 테이블의 컬럼의 조건이 하나 이상일 경우)


-제약사항-

1. (+)는 WHERE 절에서만 사용이 가능하다.


2. 테이블간 외부조인 조건이 한 개 이상일경우, 모든 외부조인 조건에(+)를 붙여야 외부조인이 성립된다.

또한 정확한 외부조건 결과를 얻기 위해서는 조인조건 외의 일반조건에도 (+)를 붙여야 한다.

3. 테이블 자신에(+)를 붙일 수 없다.

SELECT emp_id , mng_id

from emp

where emp_id(+) = mng_id 

 -ORA-01416 : 두 개의 테이블을 outer-join 할 수 없습니다.-


4. (+)는 오직 컬럼에만 붙일 수 있으며 OR 연산자와 같이 사용할 수 없다.

SELECT emp_id , mng_id

from emp e, job j

where e.emp_id(+) = j.mng_id 

OR 

e.dept_id = e.dept_Id = j.dept_id

-Ora-01719 : 포괄 조인 운영 (+)는 OR 또는 IN의 연산수를 허용하지않습니다.-


5. 외부조인시에 대상 테이블은 오직 한 개의 테이블과만 외부조인이 가능하다.

-Ora-01417 : 하나의 테이블은 하나의 다른 테이블과 포괄 조인할 수 있습니다.-


6. 조인조건식에서 (+)가 붙은 컬럼과는 IN 연산자를 같이 사용 할 수 없다.

-Ora-01719 : 포괄 조인 운영(+)는 OR 또는 IN의 연산수를 허용하지 않습니다.-


7. 조인조건식에서 (+)가 붙은 컬럼과는 서브쿼리를 같이 사용할 수 없다.

-Ora-01799 : 옅은 하위 질의에 포괄 조인될 수 없습니다.-


8.조인조건의 오직 한 쪽에서만(+)를 붙일 수 있다.




LIST