하고재비
[ORACLE] JOIN 본문
동등 조인
가장 기본이 되며 일반적인 조인 방법이 바로 동등 조인(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 |