본문 바로가기

IT/DB

[SQL] ANSI, Oracle, MS-SQL에서 outer join 비교

ANSI와 오라클, MS-SQL용 OUTER JOIN 쓰는 법을 보자.

 

샘플 데이터

 create table Test1
(
  num int,
  name varchar(10)
)

insert into Test1 values ( 1, '협객');
insert into Test1 values ( 2, '철수');
insert into Test1 values ( 3, '영희');
insert into Test1 values ( 4, '전우치');

 

create table Test2
(
  num int,
  name varchar(20)
)


insert into Test2 values ( 1, '아바타');
insert into Test2 values ( 2, '전우치');
insert into Test2 values ( 3, '500일의 썸머');

 

 

먼저 LEFT OUTER JOIN 이건 왼쪽의 테이블을 기준으로 다 나오는것

- 오라클은 LEFT가 기준이면 오른쪽이 더 많이 나와야 하니깐 오른쪽에 (+)를 붙인다고 생각하면 되고 MS-SQL은 ANSI와 같은 방향에 *표가 붙는다고 생각하면 된다.

 

 ANSI  SELECT Test1.*, Test2.name
FROM Test1 LEFT OUTER JOIN Test2
ON Test1.num = Test2.num
 오라클  SELECT Test1.*, Test2.name
FROM Test1 , Test2
WHERE Test1.num = Test2.num(+)
 MS-SQL  SELECT Test1.*, Test2.name
FROM Test1 , Test2
WHERE Test1.num *= Test2.num

 

 

결과값

NUM NAME NAME
1 협객 아바타
2 철수 전우치
3 영희  500일의 썸머
4 전우치  

 

 

2. RIGHT OUTER JOIN

 

 ANSI  SELECT Test1.*, Test2.name
FROM Test1 RIGHT OUTER JOIN Test2
ON Test1.num = Test2.num
 오라클 SELECT Test1.*, Test2.name
FROM Test1 , Test2
WHERE Test1.num(+) = Test2.num
 MS-SQL  SELECT Test1.*, Test2.name
FROM Test1 , Test2
WHERE Test1.num =* Test2.num

 

 

결과값

NUM NAME NAME
1 협객 아바타
2 철수 전우치
3 영희 500일의 썸머

 

 

3. FULL OUTER JOIN

이건.. ANSI로만 지원. 오라클의 PL-SQL에서는 지원하지 않음.

MS는 확실치는 않으나 MSSQL도 T-SQL로 지원안될것 같음. 'ㅡ';

 ANSI  SELECT Test1.*, Test2.name
FROM Test1 FULL OUTER JOIN Test2
ON Test1.num = Test2.num

 

 

결과값

NUM NAME NAME
1 협객 아바타
2 철수 전우치
3 영희 500일의 썸머
4 전우치  

 

 

참고로 OUTER JOIN에서 OUTER는 삭제해도 똑같이 나옴.

ex) left outer join => left join