오라클 데이터베이스

DQL> Select - ANSI Join (Cross, Inner, Natural, Outer)

Kiwisae 2022. 7. 25. 17:48

ANSI(미국 표준협회)의 표준안에 따라 만들어진 조인 방법.

여태 배웠던 Join은 다소 복잡한데 Ansi를 사용하면 조금 더 간결하게 명령문을 작성하고 깔끔한 결과를 볼 수 있다.

 

 

1. ANSI Cross join

 

기존의 크로스 조인처럼 emp 14행 * dept 4행으로 총 56행의 데이터가 출력된다. 유의미한 데이터x

select*from emp cross join dept;
select*from dept cross join emp;

 

 

 



2. ANSI INNER JOIN ( = Equi Join)

 

기존의 등가조인문:

select ename, dname from emp, dept 

where emp.deptno=dept.deptno and ename='SCOTT';

 

1) on

select ename, dname from emp inner join dept 
    on emp.deptno=dept.deptno 
    where ename='SCOTT';

2) using절 

dept와 emp의 공통 컬럼을 매개로 묶어주던 문장을 짧게 using (deptno) 이라고 축소했다.

select emp.ename, dept.dname from emp inner join dept 
using (deptno) 
where ename='SCOTT';




3. ANSI NATURAL JOIN (= Equi Join)

INNER JOIN의 using 절 사용보다 더 간단하게 줄여서 사용. 
공통 컬럼을 자동으로 찾아주기 때문에 아예 명시하지 않아도 된다.

select emp.ename, dept.dname 
from emp natural join dept 
where ename='SCOTT';

 




4. ANSI OUTER JOIN (= Outer Join)


Left, Right, Full 세 가지 옵션 중 하나를 사용하게 된다.
SELECT*FROM table01 [LEFT / RIGHT / FULL] OUTER JOIN table02;

Left : 왼쪽의 테이블의 모든 정보가 나온다
Right : 오른쪽 테이블의 모든 정보가 나온다.
FULL : 모든 테이블의 모든 정보가 나온다.

 

 

공통 컬럼과 각기 다른 컬럼이 있는 두 테이블

dept01, dept02가 있을 때,

 

1) LEFT

왼쪽 테이블의 모든 정보가 출력되고,

오른쪽 테이블은 공통 컬럼만 출력된다.

select*from dept01 
left outer join dept02 
on dept01.deptno = dept02.deptno;

 

 

 

2) RIGHT

 

LEFT와는 반대로

왼쪽 테이블에서는 공통 컬럼만,

오른쪽 테이블은 모든 데이터가 출력된다.

select*from dept01 
right outer join dept02 
on dept01.deptno = dept02.deptno;

 

 

3) FULL

 

왼쪽, 오른쪽 테이블 모두의 값이 출력된다.

select*from dept01 
full outer join 
dept02 on dept01.deptno = dept02.deptno;

 

 

이때 on 대신 using을 사용하면 조금 더 깔끔한 결과가 나오는 것을 발견했다.

select*from dept01 
full outer join dept02 
using (deptno);