Natural Join 이란?
두 테이블 간의 동일한 이름을 갖는 모든 컬럼들에 대해 등가조인(EQUI JOIN)을 수행한다.
* 등가조인에 대해서는 11번 글 다시 참고
https://the-underwater.tistory.com/23?category=809471
11_SQL JOIN문
JOIN 이란? - 한개가 아니라, 여러개의 테이블에서 정보를 가져와서 결과를 만들어 주는 기법 - 관계형 데이터베이스 (RDBMS) 의 가장 핵심 기술중 하나 - 표준화된 ANSI형 JOIN 방식이 있고, 각각의 DBMS마다 다..
the-underwater.tistory.com
Natural Join 과정
다음과 같은 릴레이션 r과 s가 있을 때, natural join의 과정을 살펴보자.
Natural Join과 Inner Join의 비교
>>> 두 테이블이 갖는 공통 컬럼에 대해서 Inner Join은 별개의 컬럼으로,
Natural Join은 하나의 컬럼으로 나타낸다.
Natural Join 예제
(예제) t_emp와 t_dept 테이블에서
사원번호(empno), 사원이름(ename), 부서코드(deptno), 부서명(dname) 출력
단, 부서번호, 직원번호는 오름차순 정렬
= SELECT deptno, empno, ename, dname FROM t_emp NATURAL JOIN t_dept
ORDER BY deptno, empno;
** 위에서는 비록 별도의 JOIN '조건 컬럼'을 지정하지 않았으나,
오라클에서 두 테이블의 공통칼럼으로 deptno 컬럼을 '자동으로' 인식하고 처리
USING 조건절
NATURAL JOIN에서는 같은 이름을 가진 모든 칼럼들에 대해서 JOIN이 이루어지지만,
USING 조건절을 이용하면 같은 이름을 가진 칼럼들 중에서, 특정 칼럼에 대해서만 선택적으로 EQUI JOIN 실행
(단, MS SQL Server에서는 지원하지 않는다.)
(예제) t_dept 테이블과 dept_temp 테이블이 있을 때, 두 테이블은 서로 이름이 같은 컬럼이 3개가 있다.
using 조건절을 이용해서 'DEPTNO' 컬럼에 대해서만 [INNER] JOIN을 수행해보자.
= SELECT * FROM t_dept JOIN dept_temp USING (DEPTNO);
** 위 쿼리문에서처럼 별도의 컬럼 순서를 지정하지 않으면,
USING 조건절의 기준이 되는 칼럼이 맨 앞에 출력하고, 하나의 컬럼으로 나타낸다.
* USING 사용시 주의 *
USING 조건절을 이용한 EQUI JOIN에서도 NATURAL JOIN과 마찬가지로 JOIN 칼럼에 대해서는
별칭(ALIAS)이나 테이블 이름과 같은 접두사를 붙일 수 없다.
> 잘못된 경우
= SELECT t_dept.deptno, t_dept.dname, t_dept.loc, dept_temp.dname, dept_temp.loc
FROM t_dept JOIN dept_temp USING (deptno);
> 바른 경우
= SELECT deptno, t_dept.dname, t_dept.loc, dept_temp.dname, dept_temp.loc
FROM t_dept JOIN dept_temp USING (deptno);
'SQL > Oracle' 카테고리의 다른 글
13_SQL VIEW의 사용 (0) | 2019.09.30 |
---|---|
12_SQL 서브 쿼리(Sub Query)문 (0) | 2019.09.27 |
11_SQL JOIN문 (0) | 2019.09.26 |
10_SQL함수(6) 그룹함수 (0) | 2019.09.24 |
09_SQL함수(5) 단일행함수: 날짜함수 (0) | 2019.09.22 |