TECH
QUESTION
자주하는 질문답변 입니다.
Oracle
작성자 | 유건데이타 | 등록일 | 2015-08-10 |
제목 | join에 대해서 | ||
---|---|---|---|
PURPOSE
--------- Join의 종류와 이의 사용 방법을 이해한다. EXPLANATION ----------- (1) 개요 Join 은 크게 - outer join - semi join - anti join 이 있으며, 이에 대해 하나씩 다루어 보기로 한다. (2)Anti Join - 1. 전체적 설명 anti-join 은 join 의 반대의 logic 을 갖는다. 이를 실행하면 왼쪽과 오른쪽이 match 되는 row 를 반환해 주는 것이 아니고, 왼쪽이 오른쪽과 match 되지 않는 것을 return 한다. 이 수행은 오른쪽의 subquery 에 NOT IN 이 있는 경우이다. Anti-join 은 NOT IN 을 수행하기 위해 sort-merge, 또는 hash joins 을 사용한다. 예를 들어 subquery 가 다음의 form 이라고 가정하자. (colA1, colA2, ... colAn) NOT IN (SELECT colB1, colB2, ..., colBn FROM ...). Hash 또는 sort_merge 의 anti join 으로 subquery 가 변환되기 위해 다음의 조건이 뒤따른다 : 1> Table A 의 column reference 는 모두 simple reference 여야 한다. 또 B의 reference 역시 simple 이거나, subquery 가 GROUP BY 를 포함하 는 경우 aggregate functions (MIN, MAX, SUM, COUNT, or AVG)이어야 한 다. 다른 expression 은 허용하지 않는다. 2> All column references must be know to be not null. 3> The subquery must not have any correlation predicates. That is, predicates referencing anything in surrounding query blocks. 4> The WHERE clause of the surrounding query must not have ORs at the top-most logical level. 5> Anti-joins 은 cost-based approach를 통해서만 사용 가능하다. - 2. Anti-Join 사용법 Oracle 은 NOT IN subqueries를 sort-merge 또는 hash anti-joins 으로 변환한다. 만일 조건이 위의 조건과 모두 맞고, hint 또는 init.ora 의 parameter 로 설정되어 있다면 변환은 일어난다. 특정 query 에 대해 MERGE_AJ or HASH_AJ hints 가 NOT IN subquery에 용되어진다. MERGE_AJ 는 sort-merge anti-join, HASH_AJ hash anti-join을 사용한다. 예제 : SELECT * FROM emp WHERE ename LIKE 'J%' AND deptno IS NOT NULL AND deptno NOT IN (SELECT /*+ HASH_AJ/ deptno FORM dept WHERE deptno IS NOT NULL AND loc = 'DALLAS'); 만일 anti-join transformation 을 항상 특정 join 을 사용하게 하고 싶으면 init.ora 에 ALWAYS_ANTI_JOIN 을 MERGE 또는 HASH 로 준다. (2) Semi Join - 첫번째 match 되는 value 를 찾기만 하면 결과를 display 해주는 join 문이 다. 예를 들어 EXISTS fuction 을 쓰는 경우이다. (3) Outer Join outer join 을 이해 하기 위해 outer join 의 기본을 다룬 다른 bulletin 을 이용하여 이해를 한뒤 이 자료를 참고 한다. - data 가 모자라는 쪽에 (+) 를 붙인다. _ 이의 plan 순서는 (+)쪽에 index 가 있더라도 ,(+)가 붙지 않는 쪽의 table 이 먼저 풀린다. - (+) 가 붙은쪽 table 의 모든 column 에 (+)를 붙인다. - outer join 되는 column 에는 in, between,like, or 를 사용하지 못하며 이를 어길 경우 ora-1719 가 발생된다. 오라클 유지보수 유건데이타 |
Comment | |||
---|---|---|---|
등록된 코멘트가 없습니다. |