본문 바로가기

공부/SQL

[liveSQL] 조인 - 외부 조인, 3가지 표현 방법

1. 외부 조인

  • 참조하려는 대상이 참조 테이블에 반드시 있음을 예상하지 못 할 때 사용하는 조인 방법임

  • (표현식1) [ LEFT | RIGHT | FULL ] OUTER JOIN 표현 

  • (표현식2) 참조하는 테이블 (+) = 참조되는 테이블

  • (표현식3) 스칼라 서브쿼리식 표현

 

2. 표현 방법 (총 3가지 표현)

//(+)식 표현
SELECT a.id, a.name, b.location
FROM A a, B b
WHERE a.id (+)= b.id;

//OUTER JOIN 표현
SELECT a.id, a.name, b.location
FROM A a LEFT OUTER JOIN B b ON a.id = b.id;

//스칼 서브 쿼리식 표현
SELECT a.id, a.name, (SELECT location FROM B
					  WHERE id = a.id)
FROM A a;

 

3. 실행 계획 상세

(1) + 식 표현

A (+)= B

 

(2) OUTER JOIN 식 표현

A LEFT OUTER JOIN B ON ~

 

(3) 서브쿼리 식 표현

서브 쿼리

4. 그런데,

위에 tb_emp, tb_dept의 조인 컬럼 deptino에 대하여 index가 걸려있음에도 불구하고

모조리 Full Table Access 일어난 것을 보아서, 교재에서 소개된 조인조건 PushDown이 일어나지 않은 것으로 보임.

 

/*+ no_merge(x) push_pred(x) */ 힌트를 사용하여 유도함.

/*+ no_merge(x) push_pred(x) 

 

4. 참조

(1) 코드 참고

https://github.com/snrndi121/SQL_CODE_STUDY/blob/master/join/outerjoin.md#1%EC%99%B8%EB%B6%80-%EC%A1%B0%EC%9D%B8%EA%B3%BC-%EA%B0%99%EC%9D%80-%ED%91%9C%ED%98%84

 

snrndi121/SQL_CODE_STUDY

based Oracle. Contribute to snrndi121/SQL_CODE_STUDY development by creating an account on GitHub.

github.com

(2) 조건절 푸싱(ref.구루비)