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 - 되돌림
댓글 없음:
댓글 쓰기