하고재비

[ORACLE] JOIN 본문

Oracle 11g

[ORACLE] JOIN

DeadDE 2019. 8. 12. 17:58

동등 조인

가장 기본이 되며 일반적인 조인 방법이 바로 동등 조인(EQUI-JOIN)이다.

동등 조인은 WHERE 절에서 등호(‘=’)연산자를 사용해 2개 이상의 테이블이나 뷰를 연결한 조인이다.

즉 등호 연산자를 사용한 WHERE절 조건에 만족하는 데이터를 추출하는 조인이다.

이때 WHERE절에 기술한 조건을 조인 조건이라고 한다.

 

SELECT a.department_id, a.department_name, b.job_id, b.department_id

FROM departments a, job_history b

WHERE a.department_id = b.department_id;

 

SELECT a.employee_id, a.emp_name, a.department_id, b.department_name
FROM employees a,  departments b
where a.department_id = b.department_id;

 

세미 조인

세미 조인(SEMI-JOIN)은 서브 쿼리를 사용해 서브 쿼리에 존재하는 데이터만 메인 쿼리에서 추출하는 조인 방법으로 IN EXISTS 연산자를 사용한 조인이다.

NOT IN, NOT EXISTS 는 서브쿼리에 없는 데이터 추출.

 

select department_id, department_name
from departments a
where EXISTS (
                select * 
                from employees b 
                where a.department_id = b.department_id
                and b.salary > 3000
                );

 

select department_id, department_name
from departments a
where a.department_id in (
                select b.department_id
                from employees b 
                where a.department_id = b.department_id
                and b.salary > 3000
                );

 

셀프 조인

동일한 한 테이블을 사용해 조인하는 방법을 말한다.

 

select a.employee_id, a.emp_name, b.employee_id, b.emp_name, a.department_id
from employees a, employees b
where a.employee_id < b.employee_id
and a.department_id = b.department_id
and a.department_id = 20;

 

외부 조인

외부 조인(OUTER JOIN)은 일반 조인을 확장한 개념으로, 조인 조건에 만족하는 데이터 뿐만 아니라, 어느 한 쪽 테이블에 조인 조건에 명시된 컬럼에 값이 없거나(NULL 이더라도) 해당 로우가 아예 없더라도 데이터를 모두 추출한다.

 

일반조인 : 

SELECT a.department_id, a.department_name, b.job_id, b.department_id

FROM departments a, job_history b

WHERE a.department_id = b.department_id;

 

외부조인 : 

select a.department_id, a.department_name, b.job_id, b.department_id
from departments a, job_history b
where a.department_id = b.department_id (+); 

 

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

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

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

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

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

 

 

 

 

'Oracle 11g' 카테고리의 다른 글

[ORACLE] LPAD, RPAD  (0) 2019.08.08
[ORACLE] GREATEST, LEAST, DECODE  (0) 2019.08.08
[ORACLE] NULL 관련 함수 NVL, NVL2, NULLIF  (0) 2019.08.08
[ORACLE] UNION  (0) 2019.08.07
[ORACLE] DISTINCT, GROUP BY, HAVING  (0) 2019.08.07
Comments