본문 바로가기

데이터베이스

[ORACLE 8일차] JOIN

◈ 등가조인 (=EQUI 조인은 "="을 사용해서 두 테이블을 연결한다.) 


조인은 여러 개의 릴레이션을 사용하여 새로운 릴레이션을 만드는 과정이다.

조인의 가장 기본은 교집합을 만드는 것.

두 개의 테이블 간에 일치하는 것을 조인한다.


SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO = DEPT.DEPTNO;


다음과 같이 조인하여 사용할 수 있다.


등가조인에서 

 

select * from emp,dept where emp.deptno=dept.deptno and emp.ename LIKE '고%'; 

와 같이 where절에 다음과 같이 and를 추가할 수 있다.



등가조인을 한 후에 실행계획을 확인해서 내부적으로 두 개의 테이블을 어떻게 연결했는지 확인할 수 있다.

위의 예에서 보면 dept 테이블과 emp 테이블 전체를 읽은 다음에 해시함수를 사용하여 두 개의 테이블을 연결한 것이다.

해시함수는 테이블을 해시 메모리에 적재한 후에 해시함수로써 연결하는 방법이다.

해시조인은 등가조인만 사용 가능한 방법이다.






◈ INNER JOIN (=Inner Join은 ON구를 사용하여 테이블을 연결한다.)


SELECT * FROM EMP INNER JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO;



◈ INTERSECT 연산


이 연산은 두 개의 테이블에서 교집합을 조회한다.

예를 들어,


select deptno from emp intersect select deptno from dept;



공통된 속성 deptno가 출력된 것을 확인할 수 있다.



◈ 비등가조인(= 두 테이블 사이에서 "="를 사용하지 않고, ">","<",">=","<=" 등을 사용한다)

-> 비등가조인은 정확하게 일치하지 않는 것을 조인하는 것


 OUTER JOIN

(외부조인, 두 개의 테이블 간에 교집합(=등가조인)을 조회하고 한쪽 테이블에만 있는 데이터도 포함시켜서 조회한다)


예를 들어, DEPT 테이블과 EMP 테이블을 Outer Join하면 DEPTNO가 같은 것을 조회하고,

DEPT 테이블에만 있는 DEPTNO도 포함시킨다. 즉 같은 것만 연결하여 보여주는 것이 아니라, dept 테이블에만 있는 

2019번의 행도 함께 출력된다.


아래의 오라클 데이터베이스의 Outer Join 예를 보자.


SELECT * FROM EMP,DEPT WHERE EMP.DEPTNO (+)= DEPT.DEPTNO;


full outer 조인은 왼쪽과 오른쪽의 테이블을 모두 보여주는 것이고, left outer join, right outer join은 말 그대로 왼쪽, 오른쪽 테이블의 고유한 속성만 추가하여 보여주는 것을 의미한다.




◈ CROSS JOIN (= 조인 조건 구 없이 2개의 테이블을 하나로 조인)

조인구가 없기 때문에 카테이션 곱이 발생한다.

예를 들어, 14개의 행이 있는 테이블과 4개의 행이 있는 테이블을 CROSS JOIN 할 경우, 

56개의 행을 가진 릴레이션이 출력된다.


SELECT * FROM EMP CROSS JOIN DEPT; 와 같이 사용한다.

'데이터베이스' 카테고리의 다른 글

[ORACLE 10일차]Subquery (1)  (0) 2019.01.16
[ORACLE 9일차] UNION, MINUS, Connect by  (0) 2019.01.15
[ORACLE 7일차] TCL  (0) 2019.01.13
[ORACLE 6일차] DCL  (0) 2019.01.12
[ORACLE 5일차] DML (4)  (0) 2019.01.11