1. Hash Semi Join과 Filter Semi Join
- < 해시 세미 조인은 '='로 연결된다. > '=' 이외에 연산이 추가되면 어떻게 동작을 하나.
- 아울러서 'Filter' 형 Semi Join과 헷갈리는 부분(둘다 In, Exists 사용하므로) 해소.
2. 실행 결과
//Hash SJ 대표적인 형태
SELECT -
FROM A a
WHERE EXISTS (SELECT 'x' FROM B b
WHERE a.id = b.id AND other condition)
//저기서
//"other condition" 부분을 추가하는 것으로,
//차이를 알아보고자 함.
(1) '='만 사용
(2.1) '(1)' + 서브 쿼리 문내 조건절 추가(uncorrated, corrated)
- corralted : 메인 쿼리 내의 컬럼을 서브쿼리에서 사용하는 경우
- uncorralted : 메이 쿼리 내의 컬럼을 서브쿼리에서 사용하지 않는 경우, 서브 쿼리는 *제공자로서 역할을 한다.
* 제공자 : 서브 쿼리가 먼저 실행되면서 메인 쿼리로 '실행된 값'을 전달하는 형태
(2.2) '(1)' + 메인 쿼리 문내 조건절 추가
(3) In 절 표현
//Hash SJ - In 절로 표현
//대표적인 형태
SELECT -
FROM A
WHERE (A.COL1,...) IN (SELET B.COL1,.... FROM B
WHERE other condition);
3. 중간 결과
- 일단 '=' 연산자로 묶이면 기본적으로 Hash 조인 형태로 동작하였음.
- In 절은 Selet-list 컬럼을 하나의 연결고리로, '='과 동급의 표현.
- 따라서 Hash 조인 형태로 수행
4. 필터형 SJ ('=' 연산자 없는 경우 or 연결고리가가 없는 경우)
// Filterd Semi SJ
// 대표적인 형태
SELECT -
FROM A
WHERE EXISTS (SELECT 1 FROM B
WHERE other condition);
//other condition을 변형하되
//(A.id = B.id)인 경우는 제외.
(1) corralted 한 경우 (서브 쿼리 내부에 테이블 A의 컬럼이 사용된 경우)
(2) uncorralated 한 경우
5. 참고
(1) 코드 참고
snrndi121/SQL_CODE_STUDY
based Oracle. Contribute to snrndi121/SQL_CODE_STUDY development by creating an account on GitHub.
github.com
(2) 해시 조인
'공부 > SQL' 카테고리의 다른 글
[liveSQL] 인덱스, 정렬 작업 대체 가능 (0) | 2020.03.03 |
---|---|
[liveSQL] 조인 - 외부 조인, 3가지 표현 방법 (0) | 2020.02.27 |
[liveSQL] 쿼리 변환, 서브쿼리 Unnesting(2) (0) | 2020.02.27 |
[liveSQL] 쿼리 변환, 서브 쿼리 Unnesting(1) (0) | 2020.02.27 |
[liveSQL] 윈도우 함수 (1) windowing 내 헷갈리는 몇가지 구문 (0) | 2020.02.23 |