2015년 10월 30일 금요일

151007 - Join, Transaction, 조인, 트랜잭션

join



1. 여러 개의 테이블을 병합하여 하나의 결과를 도출하기 위한 방법
2. 종류
         (1) Cartesian  product join
               -데카르트 곱 조인
         (2) Equi join
                  1) 공통 필드의 레코드를 가져오는 방법(중복)
                  2) INNER JOIN(Natural join) : 중복제외
         (3) Quter join
                     1) Inner join의 확장
                                 - Inner JOIN + 공통되지 않은 레코드도 자져옴
                     2) 종류
                                 - Left Outer join
                                 - Right Outer join
                                 - Full Outer join
         (4) Non Equi JOIN
                  -공통된 필드가 없을 경우 

  
================================
테이블 생성

create TABLE tblA (
id  number,
name number);   

create TABLE tblB(
id number,
name number
);   

create TABLE tblC(
id  number,
name number
);         


데이터 입력

insert into tblA values(1, 10);
insert into tblA values(2, 20);      
insert into tblA values(3, 30);      
insert into tblA values(5, 50);      
insert into tblA values(7, 70);

insert into tblB values(1, 10);      
insert into tblB values(2, 20);      
insert into tblB values(4, 40);
insert into tblB values(5, 50);
insert into tblB values(8, 80);
      
insert into tblC values(1, 10);      
insert into tblC values(2, 20);
insert into tblC values(7, 70);
insert into tblC values(8, 80);      
insert into tblC values(9, 90);      


------------------------------------------
예제

select tblA.id, tblA.name from tblA INNER JOIN tblB ON tblA.id = tblB.id;

select tblA.id, tblA.value from tblA JOIN tblB ON tblA.id = tblB.id;

select a.id, a.value from tblA a INNER JOIN tblB b ON a.id = b.id;

select a.id, a.value from tblA a, tblB b where a.id = b.id;


=========================================================================


***직원의 사번, 이름, 업무, 부서번호, 부서명 을 조회

select empno, ename, job, emp.deptno, dname from emp 
inner join dept on emp.deptno = dept.deptno;

select empno, ename, job, emp.deptno, dname from emp, dept
where emp.deptno = dept.deptno;

==============================================================


***SALESMAN 에 대해서 사번, 이름, 업무, 부서명 을 조회

select empno, ename, job, dname from emp 
inner join dept on emp.deptno = dept.deptno 
and job='SALESMAN';

select empno, ename, job, dname from emp 
inner join dept on emp.deptno = dept.deptno 
where job = 'SALESMAN';

=============================================================

4. Outer Join

select tblA.id, tblA.value, tblB.value
from tblA LEFT OUTER JOIN 
tblB on tblA.id = tblB.id;

select tblA.id, tblA.value, tblB.value 
from tblA RIGHT OUTER JOIN 
tblB on tblA.id = tblB.id;

select tblA.id, tblA.value, tblB.value 
from tblA FULL OUTER JOIN 
tblB on tblA.id = tblB.id;

select tblA.id, tblA.value, tblB.value 
from tblA, tblB where tblA.id = tblB.id(+);

select tblA.id, tblA.value, tblB.value 
from tblA, tblB where tblA.id(+) = tblB.id;

select tblA.id, tblA.value, tblB.value 
from tblA, tblB where tblA.id(+) = tblB.id(+);


=====================================================


*** 이름, 급여, 부서명, 근무지 를 조회하시오.
단, 부서명과 근무지는 모두 출력할 수 있도록 하시오. 

select ename, sal, dname, loc from emp
e right outer join dept d
on e.deptno = d.deptno;

=======================================================

5. 3개의 테이블 조인

select a.id, a.value, b.value, c.value from tblA a inner join tblb
on a.id = b.id inner join tblc c on b.id=c.id;

select a.id, a.value, b.value, c.value 
from tblA a,tblb b, tblc c 
where a.id = b.id and b.id = c.id;


6.Non Equi Join

직원의 사번, 이름, 급여, 급여등급 을 조회

select empno, ename, sal, grade
from emp inner join salgrade
on sal >= losal and sal <= hisal;


7. Self Join

직원의 사번, 이름, 업무, 직속상사 사번, 직속상사 이름 을 조회
select e.empno, e.ename, e.job, e.mgr, m.ename
from emp e inner join emp m
on e.mgr = m.empno;


8. SET 연산자
1) UNION 합집합 - 중복은안가져옴
2) UNION ALL 합집합 - 중복도가져옴
3) INTERSECT 
4) MINUS 차집합

select deptno from dept 
UNION
select deptno from emp;

select deptno from dept 
UNION ALL
select deptno from emp;

select deptno from dept 
INTERSECT
select deptno from emp;

select deptno from dept 
MINUS
select deptno from emp;

============================================


Transaction

--------------

ALL or Nothilg!

데이터베이스 파일 
-.dbf : 실제 데이터파일
-.log : Transaction Log(dml)
명령어
-Commit - 완전저장


-Rollback - 되돌림

댓글 없음:

댓글 쓰기