※ 내부 조인 과 외부조인

 

1. 셀프 조인

셀프란 말에서 알 수 있듯이, 셀프 조인(SELF-JOIN)은 서로 다른 두 테이블이 아닌 동일한 한 테이블을 사용해 조인하는 방법을 말한다.

 

◈ 예제

 

 

 

사원 테이블을 A, B로 나누어 조인을 하는데, 같은 부서번호를 가진 사원 중 A 사원번호가 B 사원번호보다 작은 건을 조회하는 쿼리다. 사원 테이블에서 부서번호가 20인 건은 단 2건 뿐인데(201과 202) 조건에 의해 결과는 1건만 추출된다.

 

2. 외부 조인

 

① 일반 조인

 

◈ 예제

 

 

 

쿼리는 부서와  job_history 테이블을 부서번호 값을 조건으로 조인한 결과다. 따라서 job_hisotry에 없는 부서는 조회되지 않았다. 그런데 job_hisotry 테이블에는 없더라도 부서 테이블에 있는 모든 부서를 같이 보고 싶다면 외부 조인을 사용하면된다.

 

② 외부 조인

 

◈ 예제

 

 

 

10개가 아닌 31개의 결과가 조회되었고 job_history에 없는 부서(10, 30, 40 등)도 모두 조회되었다. 쿼리를 자세히 보면 조인 조건에 (+) 기호가 붙어 있는데 조인 조건에서 데이터가 없는 테이블의 컬럼에 (+) 기호를 붙이는 것이 바로 외부 조인이다. 당연히 10, 30, 40번 부서는 job_history에 데이터가 없으므로 NULL로 출력되었다. 

 

외부 조인 시 알아야 할 내용을 정리해 보자.

❶ 조인 대상 테이블 중 데이터가 없는 테이블 조인 조건에 (+)를 붙인다

❷ 외부 조인의 조인 조건이 여러 개일 때 모든 조건에 (+)를 붙인다

❸ 한 번에 한 테이블에만 외부 조인을 할 수 있다. 예를 들어, 조인 대상 테이블이 A, B, C 3개이고, A를 기준으로 B 테이블을 외부 조인으로 연결했다면, 동시에 C를 기준으로 B 테이블에 외부 조인을 걸 수는 없다

❹ (+)연산자가 붙은 조건과 OR를 같이 사용할 수 없다

❺ (+)연산자가 붙은 조건에는 IN 연산자를 같이 사용할 수 없다(단 IN절에 포함되는 값이 1개인 때는 사용 가능)

 

 

3. 카타시안 조인

카타시안 조인(CATASIAN PRODUCT)은 WHERE 절에 조인 조건이 없는 조인을 말한다. FROM 절에 테이블을 명시했으나 두 테이블 간 조인 조건이 없는 조인이다. 조인 조건이 없으므로 조인이라 말할 수 없을 수도 있지만 FROM 절에 2개 이상 테이블을 명시했으므로 일종의 조인이다. 조인 조건이 없으므로 그 결과는 두 테이블 건수의 곱이다. A 테이블 건수가 n1, B 테이블 건수가 n2라고 한다면, 결과 건수는 ‘n1 * n2’가 된다.

 

◈ 예제

 

 

 

사원 테이블의 총 건수는 107건이고 부서 테이블의 총 건수는 27건이므로, 107 * 27 = 2,889건이 조회되었다.

+ Recent posts