ANSI와 오라클, MS-SQL용 OUTER JOIN 쓰는 법을 보자.
샘플 데이터
create table Test1 insert into Test1 values ( 1, '협객');
create table Test2
|
먼저 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
'IT > DB' 카테고리의 다른 글
[MS SQL Server] MS SQL Server DB 이동 방법 (0) | 2015.07.27 |
---|---|
[MS SQL Server] MS SQL Server 2005 삭제 방법 (0) | 2015.07.27 |
[Sybase] Mapping Sybase to Oracle types (0) | 2015.07.27 |
[Sybase] Sybase용 SQL scripts (0) | 2015.07.27 |
[Sybase] Microsoft SQL Server and Sybase Data Types Differences (0) | 2015.07.27 |