Natural Join의 개념과 유의사항

coding_bird·2022년 4월 16일
0
  • 작성자는 oracle 기준으로 sql을 공부중입니다

> Natural Join은 inner join의 하위개념으로, 두 relation 간에 일치하는 모든 column들에 대해 join을 수행한다.

여기서 두 relation 간에 일치하는 '모든' column들에 대해 join을 수행한다는 말이 무엇인지 알아보자.

예를 들어 table 1과 table 2에 a, b, c라는 column이 서로 일치한다고 하자. 이때 natural join은 일치하는 모든 column에 대해 join을 수행하므로 a, b, c가 모두 일치하는 tuple들을 출력하게 된다.

또한 natural join은 inner join의 일종이므로, 두 relation간 '일치하는' 행만을 출력하게 된다.
따라서 natural join은 아래의 특징을 갖는다


1. natural join은 무조건 "이름도 같고, 타입도 같은" 열에 대해 수행된다.
2. natural join은 위의 조건을 만족하는 "모든 열"에 대해 수행된다.
3. 1과 2에 의해, natural join에서는 on을 이용한 join 조건을 명시할 수 없다.
4. natural join에서는 alias를 사용할 수 없다

> natural join은 alias를 사용할 수 없다

여기서 말하는 alias란, qualifier (한정자)를 의미한다. 아래와 같은 것 말이다

from employees as e

natural join은 qualifier을 사용할 수 없게 되어있다. 사실 생각해보면, qualifier를 사용할 이유가 없다. alias는 서로 다른 relation 간에 같은 column이 있을 때 서로를 구분하기 위한 목적으로 사용되는데, natural join은 모든 같은 column에 대해 합쳐버리므로 join 후의 relation에는 같은 이름의 column이 있을 수 없기 때문이다.

따라서 아래의 구문은 오류가 발생한다

select distinct e.job_id, d.location_id
from hr.employees e
natural join hr.departments d
where d.department_id = 80;

ORA-25155: column used in NATURAL join cannot have qualifier

where 절에서 alias를 삭제한 아래의 구문은 시행이 가능하다

select distinct e.job_id, d.location_id
from hr.employees e
natural join hr.departments d
where department_id = 80;

profile
소프트웨어 세상 날아다니는 중입니다

0개의 댓글