2014년 9월 24일 수요일

Oracle9i에서의 조인(Join)[ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]

오라클 9i에서의 조인 

오라클 9i부터는 ANSI SQL3-1999 표준을 따르게 되어 조인을 사용하는 형태가 조금 달라 졌습니다. 첫째 조인의 형태는 FROM 절에서 명시적으로 지정 했는데 Oracle 9i에서는 특히 Outer Join, Cross Join 이라고 구체적으로 명시함으로써 한번에 알수있게 하였으며 둘째 조인의 조건은 WHERE절과 구분되어 ON절에 명시되는데 Natural Join, Cross Join, Outer Join등으로 나누어 볼 수가 있습니다. 

1.자연조인(Natural Join) 
9i이전에는 두개 이상의 테이블을 SELECT 하기 위해서는 WHERE절에 테이블의 공통된 컬럼을 이용하여 조인해야 했습니다. 그러나 9i부터는 Natural Join을 사용하여 WHERE절없이 사용하는 것이 가능해 졌습니다. 

[예제  아래의 경우엔 EMP와 DEPT가 같은 이름의 컬럼이 있을 때…] 
SQL> select ename, sal, dname 
2 from emp natural join dept; 

ENAME SAL DNAME 
---------- ---------- -------------- 
SMITH 800 RESEARCH 
ALLEN 1600 SALES 
WARD 1250 SALES 
JONES 2975 RESEARCH 
MARTIN 1250 SALES 
BLAKE 2850 SALES 
CLARK 2450 ACCOUNTING 
SCOTT 3000 RESEARCH 
KING 5000 ACCOUNTING 

[9i이전의 모습 예제]  이건 9i에서도 가능 합니다. 
SQL> select ename, sal, dname 
2 from emp, dept 
3 where emp.deptno = dept.deptno; 

ENAME SAL DNAME 
---------- ---------- -------------- 
SMITH 800 RESEARCH 
ALLEN 1600 SALES 
WARD 1250 SALES 
JONES 2975 RESEARCH 
MARTIN 1250 SALES 
BLAKE 2850 SALES 
CLARK 2450 ACCOUNTING 
SCOTT 3000 RESEARCH 
KING 5000 ACCOUNTING 

또한 아래처럼 JOIN과 ON을 이용해서도 가능 합니다. 

SQL> select ename, sal, dname 
2 from emp join dept 
3 on emp.deptno = dept.deptno; 

ENAME SAL DNAME 
---------- ---------- -------------- 
SMITH 800 RESEARCH 
ALLEN 1600 SALES 
WARD 1250 SALES 
JONES 2975 RESEARCH 
MARTIN 1250 SALES 
BLAKE 2850 SALES 
CLARK 2450 ACCOUNTING 
SCOTT 3000 RESEARCH 
KING 5000 ACCOUNTING 
TURNER 1500 SALES 

2.크로스 조인(Cross Join) 
Cartesian Product를 만들 때 사용 합니다. 카티시안 곱이란 출력되는 데이터의 갯수가 두 테이블의 레코드 갯수의 곱만큼 출력되는 것입니다. 특히 조인 조건이 없는 경우에 이렇게 출력되곤 하죠… 아래의 예제를 보도록 하겠습니다. 

SQL> select ename, sal, dname 
2 from emp cross join dept; 

ENAME SAL DNAME 
---------- ---------- -------------- 
SMITH 800 ACCOUNTING 
ALLEN 1600 ACCOUNTING 
WARD 1250 ACCOUNTING 
JONES 2975 ACCOUNTING 
MARTIN 1250 ACCOUNTING 
BLAKE 2850 ACCOUNTING 
CLARK 2450 ACCOUNTING 
SCOTT 3000 ACCOUNTING 
KING 5000 ACCOUNTING 
TURNER 1500 ACCOUNTING 
ADAMS 1100 ACCOUNTING 

ENAME SAL DNAME 
---------- ---------- -------------- 
JAMES 950 ACCOUNTING 
FORD 3000 ACCOUNTING 
MILLER 1300 ACCOUNTING 
SMITH 800 RESEARCH 
ALLEN 1600 RESEARCH 
WARD 1250 RESEARCH 
JONES 2975 RESEARCH 
MARTIN 1250 RESEARCH 
BLAKE 2850 RESEARCH 
CLARK 2450 RESEARCH 
SCOTT 3000 RESEARCH 
KING 5000 RESEARCH 
TURNER 1500 RESEARCH 
ADAMS 1100 RESEARCH 
JAMES 950 RESEARCH 
FORD 3000 RESEARCH 
MILLER 1300 RESEARCH 
SMITH 800 SALES 
ALLEN 1600 SALES 
WARD 1250 SALES 
JONES 2975 SALES 
MARTIN 1250 SALES 
BLAKE 2850 SALES 
CLARK 2450 SALES 
SCOTT 3000 SALES 
KING 5000 SALES 
TURNER 1500 SALES 
ADAMS 1100 SALES 
JAMES 950 SALES 
FORD 3000 SALES 


3.아우터 조인(Outer Join) 
8i까지는 조인의 기준이 되는(반드시 모든 레코드가 출력되어야 되는 )쪽은 아무런 표시를 하지 않았으며 그렇지 않은 쪽은 ‘(+)’ 표시를 했습니다. 하지만 9i에서는 OUTER JOIN을 그전까지 지원하지 않았던 FULL까지 지원하여 LEFT, RIGHT, FULL 3가지를 지원하고 있습니다. 

[예제] 
SQL> create table sales ( 
2 custID char(4), 
3 ilja char(6), 
4 amt number 
5 ); 

테이블이 생성되었습니다. 

SQL> create table customer ( 
2 custID char(4), 
3 name varchar2(10), 
4 tel varchar2(20) 
5 ); 

테이블이 생성되었습니다. 

SQL> insert into sales values ('1004','040101',10000); 

1 개의 행이 만들어졌습니다. 

SQL> insert into sales values ('1006','040102',15000); 

1 개의 행이 만들어졌습니다. 

SQL> insert into customer values ('1004','가길동','111-1111'); 

1 개의 행이 만들어졌습니다. 

SQL> insert into customer values ('1005','나길동','222-2222'); 

1 개의 행이 만들어졌습니다. 

SQL> insert into customer values ('1006','다길동','333-3333'); 

1 개의 행이 만들어졌습니다. 

SQL> commit; 

커밋이 완료되었습니다. 

//고객의 일별 매출을 확인시 1005번 고객은 존재하지만 매출 내역이 없어 
//누락된다. 
// 


SQL> select sales.custID, name, ilja, amt 
2 from sales, customer 
3 where sales.custID = customer.custID; 

CUST NAME ILJA AMT 
---- ---------- ------ ---------- 
1004 가길동 040101 10000 
1006 다길동 040102 15000 

//아래의 형태가 표준 SQL 형태이다. 

SQL> select sales.custID, name, ilja, amt 
2 from sales inner join customer 
3 on sales.custID = customer.custID; 

CUST NAME ILJA AMT 
---- ---------- ------ ---------- 
1004 가길동 040101 10000 
1006 다길동 040102 15000 



//inner join이 두 테이블의 값이 일치하는것만 가지고 오지만 outer Join은 어느 한쪽 
//데이터, 또는 양쪽 전부 데이터를 가져온다. 

//아래는 왼쪽 외부 조인이므로 왼쪽것(판매내역)은 다 나온다. 
//표준 SQL 
SQL> select name, ilja, amt 
2 from sales left outer join customer 
3 on sales.custID = customer.custID; 

NAME ILJA AMT 
---------- ------ ---------- 
가길동 040101 10000 
다길동 040102 15000 

//오라클 전용, 더하기 반대의 것이 다나온다. 
SQL> select name, ilja, amt 
2 from sales , customer 
3 where sales.custID = customer.custID(+); 

NAME ILJA AMT 
---------- ------ ---------- 
가길동 040101 10000 
다길동 040102 15000 



//아래는 오른쪽 외부 조인이므로 오른쪽것(고객데이터)은 다 나온다. 
//표준 SQL 
SQL> select name, ilja, amt 
2 from sales right outer join customer 
3 on sales.custID = customer.custID; 

NAME ILJA AMT 
---------- ------ ---------- 
가길동 040101 10000 
다길동 040102 15000 
나길동 

//오라클 전용 
SQL> select name, ilja, amt 
2 from sales , customer 
3 where sales.custID(+) = customer.custID; 

NAME ILJA AMT 
---------- ------ ---------- 
가길동 040101 10000 
나길동 
다길동 040102 15000 

//양쪽 테이블의 것 전부 나온다. 
SQL> select name, ilja, amt 
2 from sales full outer join customer 
3 on sales.custID = customer.custID; 

NAME ILJA AMT 
---------- ------ ---------- 
가길동 040101 10000 
다길동 040102 15000 
나길동 

//오라클에서 아래와 FULL outer Join 형식은 오류가 발생 한다. 
SQL> select name, ilja, amt 
2 from sales , customer 
3 where sales.custID(+) = customer.custID(+); 
where sales.custID(+) = customer.custID(+) 

3행에 오류: 
ORA-01468: outer-join된 테이블은 1개만 지정할 수 있습니다 



 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-271983
 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취…<nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-111453
53 [평일주간]100%환급6건,안드로이드,자바,C#,스프링3.2,SQL,힌트/… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>03-151207
52 [주말주간]C#, ASP.NET마스터 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-311372
51 [평일,기업100%환급]SQL기초에서 Schema Object까지 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-311199
50 [평일야간]HTML5, CSS3,Ajax, jQuery마스터과정 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-311063
49 [평일주간,평일야간,주말]Spring,MyBatis,Hibernate개발자과정 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-191371
48 [평일주간,평일야간,주말]안드로이드개발자과정 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-111204
47 [평일야간,주말주간]JAVA,Network&JSP&Spring,MyBatis,Hibernate <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>01-031706
46 기업100%환급/오라클/자바/스프링/안드로이드/닷넷C#/웹퍼블리싱… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-271983
45 [평일야간,주말]자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-191474
44 웹퍼블리싱 마스터(HTML5,CSS3,jQUERY,AJAX,JavaScript) <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-141436
43 [채용예정교육]오라클자바개발잘하는신입뽑기2개월과정,교육전취… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-111453
42 [평일,기업100%환급]자바기초에서 JDBC, Servlet/JSP까지 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-091168
41 [평일야간]닷넷(C#,Network,ADO.NET,ASP.NET)마스터 <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-011375
40 [기업100%환급]C#4.0,WinForm,ADO.NET프로그래밍(평일주간(단기)… <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-011532
39 [평일야간,주말]SQL기초에서실무까지(SQL기초,PLSQL,힌트,튜닝) <nobr class="mw_basic_list_name" style="display: block; overflow: hidden; width: 90px; color: rgb(61, 91, 122); text-align: left;">오라클자바…</nobr>12-011031

댓글 없음:

댓글 쓰기