개요
Tibero 7 FS02 PS02 버전에서 Cross Apply 구문을 지원하지 않습니다.
Oracle에서 사용하는 Cross Apply 구문을 Tibero에서 우회하여 처리할 수 있는 방법을 안내합니다.
방법
Cross Apply, Outer Apply 특징 설명
특징 | Cross Apply | Outer Apply |
오른쪽 피연산자 | 테이블 표현식 (테이블 함수 포함 가능) | 테이블 표현식 (테이블 함수 포함 가능) |
평가 방식 | 왼쪽 테이블의 각 행에 대해 오른쪽 테이블 표현식을 평가함. | 왼쪽 테이블의 각 행에 대해 오른쪽 테이블 표현식을 평가함. |
결과 행
(오른쪽 표현식 결과 없을 때) | 왼쪽 테이블의 해당 행은 결과에서 제외됨. (INNER JOIN과 유사) | 왼쪽 테이블의 해당 행은 유지되고, 오른쪽 테이블 표현식의 컬럼은 NULL 값으로 채워짐. (LEFT OUTER JOIN과 유사) |
1. Cross Apply
•
샘플 데이터
SQL> create table A ( id number, name varchar(20));
SQL> insert into A values (1, 'KIM');
SQL> insert into A values (2, 'LEE');
SQL> insert into A values (3, 'PARK');
SQL> commit;
SQL> create table B ( id number, nickname varchar(20));
SQL> insert into B values (1, 'TEST01');
SQL> insert into B values (2, 'TEST02');
SQL> commit;
SQL
복사
•
오라클에서 cross apply 구문 수행
SQL> select * from A cross apply ( select * from B where A.id = B.id ) B;
ID NAME ID NICKNAME
---------- --------- ---------- --------------------
1 KIM 1 TEST01
2 LEE 2 TEST02
SQL> select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id = B.id ) B;
ID NAME NICKNAME
------- ------------ --------------------
1 KIM TEST01
2 LEE TEST02
SQL
복사
•
Tibero에서 cross apply 구문 수행
SQL> select * from A cross apply ( select * from B where A.id = B.id ) B;
TBR-8021: Invalid table name.
at line 1, column 23 of null:
select * from A cross apply ( select * from B where A.id = B.id ) B
^
SQL> select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id = B.id ) B;
TBR-8021: Invalid table name.
at line 1, column 46 of null:
select A.id, A.name, B.nickname from A cross apply ( select * from B where A.id
SQL
복사
•
Tibero에서 inner join으로 우회
SQL> select * from A inner join b on A.id = B.id;
ID NAME ID NICKNAME
------- ------------ ------- ------------
1 KIM 1 TEST01
2 LEE 2 TEST02
2 rows selected.
SQL> select A.id, A.name, B.nickname from A inner join b on A.id = B.id;
ID NAME NICKNAME
------- ------------ ----------
1 KIM TEST01
2 LEE TEST02
2 rows selected.
SQL
복사
2. Outer Apply
•
샘플 데이터
SQL> create table A ( id number, name varchar(20));
SQL> insert into A values (1, 'KIM');
SQL> insert into A values (2, 'LEE');
SQL> insert into A values (3, 'PARK');
SQL> commit;
SQL> create table B ( id number, nickname varchar(20));
SQL> insert into B values (1, 'TEST01');
SQL> insert into B values (2, 'TEST02');
SQL> commit;
SQL
복사
•
오라클에서 outer apply 구문 수행
SQL> select * from A outer apply ( select * from B where A.id = B.id ) B;
ID NAME ID NICKNAME
---- --------- ---------- --------------------
1 KIM 1 TEST01
2 LEE 2 TEST02
3 PARK
SQL> select A.id, A.name, B.nickname from A outer apply ( select * from B where A.id = B.id ) B;
ID NAME NICKNAME
------- ------------ ----------
1 KIM TEST01
2 LEE TEST02
3 PARK
SQL
복사
•
Tibero에서 cross apply 구문 수행
SQL> select * from A outer apply ( select * from B where A.id = B.id ) B;
TBR-8022: Invalid end of SQL.
at line 1, column 23 of null:
select * from A outer apply ( select * from B where A.id = B.id ) B
^
SQL> select A.id, A.name, B.nickname from A outer apply ( select * from B where A.id = B.id ) B;
TBR-8022: Invalid end of SQL.
at line 1, column 46 of null:
select A.id, A.name, B.nickname from A outer apply ( select * from B where A.id
SQL
복사
•
Tibero에서 left outer join으로 우회
SQL> select * from A left outer join b on A.id = B.id;
ID NAME ID NICKNAME
------- ------------ ------- ------------
1 KIM 1 TEST01
2 LEE 2 TEST02
3 PARK
3 rows selected.
SQL> select A.id, A.name, B.nickname from A left outer join b on A.id = B.id;
ID NAME NICKNAME
------- ------------ ----------
1 KIM TEST01
2 LEE TEST02
3 PARK
3 rows selected.
SQL
복사