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 |
|
콤마(,) 대신 INNER JOIN을 사용 할 수 있으며, INNER는 생략 가능하다. Join 조건은 ON 절에 온다.
1 2 3 4 5 |
|
NATURAL JOIN을 사용 하면 동일한 컬럼을 내부적으로 모두조인 하므로, ON절이 생략 가능하다.
1 2 3 4 |
|
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
댓글 ( 4)
댓글 남기기