4.4.1. Equi Join, Non_Equi Join, Self Join
조인(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 기능을 사용하는 것이 좋다.
-- dept 테이블과 emp 테이블을 조인하는 예제
SELECT
e.empno, e.ename, d.dname
FROM
dept d, emp e
WHERE
d.deptno = e.deptno;
콤마(,) 대신 INNER JOIN을 사용 할 수 있으며, INNER는 생략 가능하다. Join 조건은 ON 절에 온다.
-- INNER JOIN절을 이용하여 조인하는 예제
SELECT
e.empno, e.ename, d.dname
FROM
dept d
INNER
JOIN
emp e
ON
d.deptno = e.deptno;
NATURAL JOIN을 사용 하면 동일한 컬럼을 내부적으로 모두조인 하므로, ON절이 생략 가능하다.
-- NATURAL JOIN절을 이용하여 조인하는 예제
SELECT
e.empno, e.ename, d.dname
FROM
dept d
NATURAL
JOIN
emp e;
NATURAL JOIN의 단점은 동일한 이름을 가지는 칼럼은 모두 조인이 되는데, USING 문을 사용하면 컬럼을 선택해서 조인을 할 수가 있다.
-- JOIN~USING절을 이용하여 조인하는 예제
SELECT
e.empno, e.ename, deptno
FROM
emp e
JOIN
dept d
USING (deptno);
Non-Equi Join
- - 테이블의 어떤 column도 Join할 테이블의 column에 일치하지 않을 때 사용하고, 조인조건은 동등( = )이외의 연산자를 갖는다.
- - BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN
- - 거의 사용하지 않는다
-- emp 테이블과 salgrade 테이블의 Non-Equi Join 예제
SELECT
e.ename,e.sal,s.grade
FROM
emp e, salgrade s
WHERE
e.sal
BETWEEN
s.losal
AND
s.hisal;
ENAME SAL GRADE
---------- ---------- ----------
SMITH 800 1
JAMES 950 1
ADAMS 1100 1
...
Self Join
- - Equi Join과 같으나 하나의 테이블에서 조인이 일어나는 것이 다르다.
- - 같은 테이블에 대해 두 개의 alias를 사용하여 FROM절에 두 개의 테이블을 사용하는 것 처럼 조인한다.
-- 사원의 매니저명을 조회하는 Self Join 예제
SELECT
e.ename, a.ename
"Manager"
FROM
emp e, emp a
WHERE
e.empno = a.mgr;
ENAME Manager
------- ----------
FORD SMITH
BLAKE ALLEN
BLAKE WARD
KING JONES
...
Cartesian Product
- - 검색하고자 했던 데이터뿐 아니라 조인에 사용된 테이블들의 모든 데이터가 반환 되는 현상
- - Cartesian Product는 조인 조건을 정의하지 않은 경우 발생한다.
- - 테이블의 개수가 N이라면 Cartesian Product를 피하기 위해서는 적어도 N-1개의 등가 조건을 SELECT 문안에 포함시켜야 하며 각 테이블의 컬럼이 적어도 한번은 조건절에 참조되도록 해야 한다.
- - CROSS JOIN을 이용하면 Cartesian Product 값을 얻을 수 있다.
-- CROSS JOIN절을 이용하여 Cartesian Product 값을 얻는 예제
SELECT
e.empno, e.ename, d.dname
FROM
dept d
CROSS
JOIN
emp e;
56 개의 행이 선택되었습니다.
'Database > Oracle SQL' 카테고리의 다른 글
4.6. Commit과 Rollback 예제 (0) | 2019.04.17 |
---|---|
4.5. 트랜잭션(commit과 rollback) (0) | 2019.04.17 |
4.4.3. CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON (0) | 2019.04.17 |
4.4.2. Outer Join (LEFT, RIGHT, FULL OUTER JOIN) (0) | 2019.04.17 |
4.3. 예명(Alias) (0) | 2019.04.17 |
4.2. SELECT문 및 연산자 (0) | 2019.04.17 |
4.1.1. MERGE 문의 이해 및 활용 (0) | 2019.04.17 |
4.1. 데이터의 삽입, 수정, 삭제 (0) | 2019.04.17 |