ORACLE

 

http://www.gurubee.net/lecture/1020

 

조인(Join)

 

Join 이란?
  • - 둘 이상의 테이블을 연결하여 데이터를 검색하는 방법 이다.
  • - 보통 둘 이상의 행들의 공통된 값 Primary Key 및 Foreign Key 값을 사용하여 조인 한다.
  • - 두 개의 테이블을 SELECT문장 안에서 조인 하려면 적어도 하나의 컬럼이 그 두 테이블 사이에서 공유 되어야 한다.

 

 

Join 방법과 방식
  • - 조인의 방법 : Equi Join (등가 조인, 내부조인) , Non-Equi Join , Self Join , Outer Join
  • - 조인의 방식 : Nested Loop Join, Sort Merge Join, Hash Join

Equi Join

  • - 가장 일반적으로 사용하는 Equality Condition(=)에 의한 조인이다
  • - Equi join의 성능을 높이기 위해서는 Index 기능을 사용하는 것이 좋다.

Equi Join

  • - 가장 일반적으로 사용하는 Equality Condition(=)에 의한 조인이다
  • - Equi join의 성능을 높이기 위해서는 Index 기능을 사용하는 것이 좋다.

?

1

2

3

4

-- dept 테이블과 emp 테이블을 조인하는 예제

SELECT e.empno, e.ename, d.dname

  FROM dept d, emp e

 WHERE d.deptno = e.deptno;

 

콤마(,) 대신 INNER JOIN을 사용 할 수 있으며, INNER생략 가능하다. Join 조건은 ON 절에 온다.

?

1

2

3

4

5

-- INNER JOIN절을 이용하여 조인하는 예제

SELECT e.empno, e.ename, d.dname

  FROM dept d

 INNER JOIN emp e

    ON d.deptno = e.deptno;

 

NATURAL JOIN을 사용 하면 동일한 컬럼을 내부적으로 모두조인 하므로, ON절이 생략 가능하다.

?

1

2

3

4

-- NATURAL JOIN절을 이용하여 조인하는 예제

SELECT  e.empno, e.ename, d.dname

  FROM  dept d

NATURAL JOIN emp e;

 

NATURAL JOIN의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데, USING 문을 사용하면 컬럼을 선택해서 조인을 할 수가 있다.

 

1. 정의 

하나의 테이블로 원하는 컬럼 정보를 참조할 수 없는 경우 관련된 테이블을 논리적으로 결함하여 원하는

컬럼 정보를 참조하는 방법

 


2. 전제조건

1) 논리적으로 결합되는 2개 이상의 테이블에는 반드시 공통컬럼이 있어야 함.

2) 공통 컬럼은 데이터타입과 데이터가 동일해야 함

 

 

3. 조회형식

select 컬럼 리스트 from 조인대상 테이블들(콤마로 구분, 별칭 사용) where 공통 컬럼을 이용한 조인조건

and 일반조건;


(문제) student, department 테이블을 검색하여 이름, 학과코드, 학과이름을 출력하시오.

select s, name, s.deptno1, d.dname from student s, department d

where s.deptno1 = d.deptno;


-- from  조인할 테이블들

-- where 조인조건(테이블.필드명)

-- 위와같은 조인을  equi join(동등조인) 

--  표준 ANSI JOIN

 

select studno, name, dname from student s innser join 

 department d on s.deptno1= d.deptno;

 


(문제) employees 테이블의 사원번호와 departments 테이블의 부서명을 조회하시오.

select e.empno, d.dname from emp e, dept d where e.deptno = d.deptno;


(문제) 학생테이블과 학과 테이블, 교수 테이블을 join 하여 학생의 이름과 학과이름,

지도교수 이름을 출력하시요.


select s.name "학생이름", d.dname "학과", p.name "지도교수"

  from student s, department d, professor p where s.deptno1 = d.deptno

 and s.profno=p.profno;

 


-- 사원번호, 사원이름, 부서이름 

 

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

 

==>

 

select empno, ename, dname  from emp e

 inner join dept d on e.deptno =d.deptno;

 


-- 학생이름, 학과이름, 지도교수이름

 

select * from student;

select * from department;

select * from professor;


select s.name , d.name, p.name 

  from student s, department d, professor p

where s.deptno1=d.deptno and s.profno=p.profno;

 


--  오라클 방식


 

select s.name, d.dname, p.name 
 from student s, department d, professor p
where s.deptno1=d.deptno and s.profno=p.profno;



 


-- ANSI sql 방식

-- A join B on 조인조건  A join C

 

select s.name, d.dname, p.name 

 from student s join department d

    on s.deptno1=d.deptno

 inner join professor p

 on s.profno =p.profno;

 

 


5. 종류

 

1) 내부조인(동등조인, Equi Join) : 가장 일반적인 형태, where 절에 사용된 공통컬럼들이 동등연산자('=')에 의해 비교되는 조인


2) cross 조인(Cartesian Product, 카티션 곱) : 2개 이상의 테이블이 조인될 때 where 절에서 공통 컬럼에 의한 결합이 발생하지 않아서

두 테이블 간의 조합가능한 모든 경우의 수를 계산하여 결과를 산출하는 조인. 엄밀한 의미에서 조인이 아님.

 

select e.ename, d.dname from emp e, dept d;

 

3) selef조인  :  참조해야 할 컬럼이 자신의 테이블에 있는 다른 컬럼인 경우에 사용하는 조인, 반드시 테이블에 대한 별칭을 써야 함.


(문제) emp 테이블에서 매니저아이디(mgr) 는 자신의 상급자의 empno 와 동일하다. 이를 이용해서 각  사람의 사원번호와 이름, 

매니저번호, 매니저의 이름을 조회하시오.

 

 select 

  e1.empno 사번, e1.ename 이름, e2.empno 매니저사번, e2.ename 매니저

 from emp e1, emp e2 

 where e1.mgr = e2.empno

 

 

 

 

 

 

 

 

oracle

 

about author

PHRASE

Level 60  머나먼나라

나그네 귀는 석 자라 , 나그네는 주인이 자기를 어떻게 대하는가를 항상 살피게 되므로 주인의 소곤거리는 말까지도 다 듣는다는 말.

댓글 ( 4)

댓글 남기기

작성