외부 조인 연산자
쿼리는 WHERE절의 술어에서 외부 조인 연산자(+)를 대체 구문으로 사용할 수 있습니다.
조인은 어떤 공통된 정보 도메인을 기반으로 둘 이상의 테이블의 데이터를 조합하는 프로세스입니다. 한 테이블의 행과 다른 테이블의 행은 대응하는 행의 정보가 일치하는 경우 조인 기준을 기반으로 쌍을 이룹니다. 외부 조인은 조인 조건을 만족하는 모든 행을 리턴하며, 또한 조인 조건을 만족하는 행이 없는 한 테이블 또는 두 테이블의 행을 모두 또는 일부 리턴합니다. 가능한 경우 외부 조인 구문인 RIGHT OUTER JOIN, LEFT OUTER JOIN 또는 FULL OUTER JOIN을 사용해야 합니다. Db2® 제품 이외의 데이터베이스 제품에서 애플리케이션을 Db2 데이터베이스 시스템에서 실행할 수 있도록 설정하는 경우에만 외부 조인 연산자를 사용해야 합니다.
인에이블먼트
DB2_COMPATIBILITY_VECTOR 레지스트리 변수를
16진수 값 0x04(비트 위치 3)로 설정하여 외부 조인 연산자를 사용 가능하게 설정한 후 새 설정이 적용되도록
인스턴스를 중지하고 재시작합니다.
db2set DB2_COMPATIBILITY_VECTOR=04
db2stop
db2start
Oracle 애플리케이션에 대한 DB2
호환성 기능을 모두 활용하기 위해 DB2_COMPATIBILITY_VECTOR에 대해 권장되는 설정은
모든 호환성 비트를 설정하는 ORA입니다.예:
다음 예에 표시된 바와 같이, 외부 조인 연산자(+)는
두 테이블의 컬럼을 참조하는 술어에서 컬럼 이름 다음에 괄호로 묶어 적용합니다.
- 다음 쿼리는 테이블 T1 및 T2의 왼쪽 외부 조인을
수행합니다. FROM 절에 두 테이블을 쉼표로 구분하여 포함시킵니다. T1도 참조하는 술어에서 T2의 모든 컬럼에 외부 조인 연산자를 적용합니다.
앞의 쿼리는 외부 조인 연산자를 사용하는 다음 쿼리와 동일합니다.SELECT * FROM T1 LEFT OUTER JOIN T2 ON T1.PK1 = T2.FK1 AND T1.PK2 = T2.FK2
SELECT * FROM T1, T2 WHERE T1.PK1 = T2.FK1(+) AND T1.PK2 = T2.FK2(+)
- 다음 쿼리는 테이블 T1 및 T2의 오른쪽 외부 조인을
수행합니다. FROM절에 쉼표로 구분된 두 테이블을 포함시키고
T2도 참조하는 술어에서 T1의 모든 컬럼에 외부 조인 연산자를
적용합니다.
앞의 쿼리는 외부 조인 연산자를 사용하는 다음 쿼리와 동일합니다.SELECT * FROM T1 RIGHT OUTER JOIN T2 ON T1.FK1 = T2.PK1 AND T1.FK2 = T2.PK2
SELECT * FROM T1, T2 WHERE T1.FK1(+) = T2.PK1 AND T1.FK2(+) = T2.PK2
AND 연산자로 구분되는 술어 세트는 AND-인수라고 합니다. WHERE절에 AND 연산자가 없는 경우 WHERE절에 있는 술어 세트가 유일한 AND-인수로 간주됩니다.
규칙
외부 조인 연산자에는 다음과 같은 규칙이 적용됩니다.
- 술어
- WHERE 술어는 AND 처리 부울 인수의 세분화 단위로 간주됩니다.
- 로컬 술어(예:
T1.A(+) = 5
)가 존재할 수 있지만 조인을 사용하여 실행됩니다. (+)가 없는 로컬 술어는 조인 다음에 실행됩니다.
- 부울
- 각 부울 조건은 최대 두 개의 테이블을 참조할 수 있습니다. 예를 들어,
T1.C11 + T2.C21 = T3.C3(+)
은(는) 허용되지 않습니다. - 외부 조인 부울 항의 상관은 허용되지 않습니다.
- 각 부울 조건은 최대 두 개의 테이블을 참조할 수 있습니다. 예를 들어,
- 외부 조인 연산자
- 외부 조인 연산자는 명시적 JOIN 구문과 동일한 하위 선택에서 지정할 수 없습니다.
- 외부 조인 연산자는 동일한 하위 선택의 FROM절에 지정된 테이블과 연관된 컬럼의 WHERE절에서만 지정할 수 있습니다.
- 외부 조인 연산자는 전체 표현식에 적용할 수 없습니다. AND 요소 내에서 동일한 테이블의 각 컬럼 참조 다음에 외부 조인 연산자(예:
T1.COL1 (+) - T1.COL2 (+) = T2.COL1
)가 와야 합니다. - 외부 조인 연산자는 동일한 하위 선택의 FROM절에 지정된 테이블과 연관된 컬럼의 WHERE절에서만 지정할 수 있습니다.
- 널(NULL)-생성기
- 각 테이블은 최대 하나의 다른 테이블과 관련하여 널(NULL)-생성기가 될 수 있습니다. 테이블을 세 번째 테이블에 조인하는 경우 이는 외부 테이블이어야 합니다.
- 테이블은 쿼리 내에 있는 다른 하나의 테이블에 대한 널(NULL)-생성기로 한 번만 사용할 수 있습니다.
- 순환을 형성하는 개별 외부 조인에서는 동일한 테이블을 외부 테이블 및 널(NULL)-생성기
둘 다로 사용할 수 없습니다. 순환은 이전 테이블로 술어 체인이
다시 돌아올 때 여러 조인에 걸쳐 형성될 수 있습니다.예를 들어, 다음 쿼리는 첫 번째 술어의 외부 테이블로 사용되는 T1에서 시작하여 세 번째 술어에서 다시 T1로 순환됩니다. T2는 첫 번째 술어의 널(NULL)-생성기 및 두 번째 술어의 외부 테이블 둘 다로 사용되지만, 이러한 사용 자체는 순환이 아닙니다.
SELECT ... FROM T1,T2,T3 WHERE T1.a1 = T2.b2(+) AND T2.b2 = T3.c3(+) AND T3.c3 = T1.a1(+) -- invalid cycle
- AND-인수
- AND-인수는 하나의 테이블만 널(NULL)-생성기로 포함할 수 있습니다. 뒤에 외부 조인 연산자가 있는 각 컬럼 참조는 동일한 테이블에 속해야 합니다.
- 외부 조인 연산자를 포함하는 AND-인수는 최대 두 개의 테이블을 참조할 수 있습니다.
- 두 테이블 사이의 외부 조인에 다중 AND-인수가 필요한 경우 이러한 AND-인수 모두에 외부 조인 연산자를 지정해야 합니다. AND-인수가 외부 조인 연산자를 지정하지 않는 경우 외부 조인의 결과에 따라 처리됩니다.
- 하나의 테이블만 포함하는 술어가 있는 AND-인수는 다음 기준을 충족하는
최소 하나의 다른 AND-인수가 있는 경우 외부 조인 연산자를 지정할 수
있습니다.
- AND-인수가 널(NULL)-생성기와 동일한 테이블을 포함해야 합니다.
- AND-인수가 다른 테이블을 외부 테이블로 포함합니다.
- 외부 조인 연산자 없이 하나의 테이블만 포함하는 술어가 있는 AND-인수는 조인 결과에서 처리됩니다.
- 외부 조인 연산자를 포함하는 AND-인수는 조인된 테이블 아래 정의된 ON절의 조인 조건에 대한 규칙을 따라야 합니다.