2020041004 / [3] ansi join

-- [3] ansi join


-- 3-1) ansi cross join

select * from emp cross join dept; -- 데이터베이스 표준협회 협약된 공용으로 사용되는 형식이다



-- 3-2) ansi inner join

select ename, emp.deptno, dname

from emp inner join dept -- 오라클 ique join 과 동일

on emp.deptno = dept.deptno; -- where 대신 on 명령어를 사용한다



-- 위와 동일한 결과 값을 출력한다 using 명령어 사용

select ename, deptno, dname -- emp. 삭제

from emp inner join dept -- 오라클 ique join 과 동일

using (deptno);



select ename, emp.deptno, dname

from emp inner join dept

on emp.deptno = dept.deptno

where ename = 'SCOTT';



-- natural join

select ename, dname

from emp natural join dept;




-- 3-3) ansi outer join


-- deptno는 10이 공통으로 들어가 있다

create table dept10(

     deptno     number(2),

     dname      varchar2(14)

);


insert into dept10 values(10, '회계부');

insert into dept10 values(20, '연구소');

select * from dept10;



create table dept11(

     deptno     number(2),

     dname      varchar2(14)

);


insert into dept11 values(10, '회계부');

insert into dept11 values(30, '영업부');

select * from dept11;


--기존 오라클 방법

select * from dept10, dept11

where dept10.deptno = dept11.deptno; --같은 deptno값을 가진 10인 회계부만 출력된다


select * from dept10, dept11

where dept10.deptno = dept11.deptno(+); -- outer join 실행값 확인


select * from dept10, dept11

where dept10.deptno(+) = dept11.deptno; -- ourter join 실행값 확인


select * from dept10, dept11

where dept10.deptno(+) = dept11.deptno(+) -- error 2군데 모두 (+)를 사용하는것은 지원이 안된다 -- ansi 표준에서는 지원한다




-- ansi


-- 오라클 (+) 기호가 아니라 left / right 명령어를 사용하여 outer join를 동작한다

select * from dept10 left outer join dept11 -- left outer join

on dept10.deptno = dept11.deptno;


select * from dept10 right outer join dept11 -- right outer join

on dept10.deptno = dept11.depno;


select * from dept10 full outer join dept11 -- full outer join 명령이 있어 전부 다 출력할 수 있다(오라클 없음)

on dept10.deptno = dept11.deptno;
















































댓글

Designed by JB FACTORY