Notice: Function _load_textdomain_just_in_time was called incorrectly. Translation loading for the ultimate-member domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /ledcorps/www/wp/wp-includes/functions.php on line 6114 4.4.1 Equi Join, Non_Equi Join, Self Join – 대나무숲

4.4.1 Equi Join, Non_Equi Join, Self Join

출처 URL : 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 기능을 사용하는 것이 좋다.
-- 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 개의 행이 선택되었습니다.

참고링크

SQL 전문가 가이드 – 제9절 조인(JOIN)

대용량 데이터베이스 솔루션 1 – 2.조인의 최적화 

대용량 데이터베이스 솔루션 2 – 조인을 활용한 데이터 연결

SQL 전문가 가이드 – 조인 기본 원리

SQL 전문가 가이드 – 고급 조인 기법


답글 남기기 0

Your email address will not be published. Required fields are marked *