Dico

SQL JOIN

  • 민갤

JOIN

여러 테이블에 흩어져 있는 정보 중에서 필요한 정보만을 가져와 가상 테이블처럼 만들어서 결과를 보여준다.

EQUI JOIN

Equality Condition(=)을 이용하는 조인.

조인 대상이 되는 두 테이블에서 공통적으로 존재하는 컬럼값의 행을 연결하여 결과를 생성한다.

일반적으로 기본키와 외래키가 존재하는 컬럼을 사용한다.

동명의 컬럼일 경우 컬럼명 앞에 테이블명을 붙인다.

  • FROM ~ WHERE
FROM 테이블1, 테이블2
 WHERE 테이블1.컬럼 = 테이블2.컬럼

  • JOIN ~ ON

     테이블명과 테이블명 사이에 콤마(,) 대신 JOIN을 사용하고,

     공통으로 존재하는 컬럼값을 비교하는 WHERE절 대신에 'ON'을 사용한다.

FROM 테이블1 JOIN 테이블2
ON 테이블1.컬럼 = 테이블2.컬럼

  • Alis(별칭)을 기술하여 어느 테이블 소속인지 구분할 수 있다.
FROM 테이블1 별칭1, 테이블2 별칭2
 WHERE 별칭1.컬럼 = 별칭2.컬럼

NON-EQUI JOIN

두 테이블의 데이터가 같은 조건이 아닌 특정 범위 내에 있는 경우 사용한다.

WHERE절에 등가 연산자(=) 외의 다른 연산자를 사용한다.

SELECT e.employee_id 사번
    , e.last_name 이름
    , d.department_id 부서ID
    , d.department_name 부서명
    , e.salary 급여
 FROM employees e JOIN departments d
    ON e.department_id = d.department_id
 WHERE e.department_id BETWEEN 10 AND 70
 ORDER BY d.department_id;

SELF JOIN

자기 자신과 조인한다.

하나의 테이블 내에서 데이터를 조인한다.

SELECT e.employee_id 사번
	, e.last_name 사원명
	, e.manager_id 매니저ID
	, m.last_name 매니저명
 FROM employees e  --사원테이블
	, employees m  --매니저테이블
 WHERE e.manager_id = m.employee_id;

OUTER JOIN

두 개 이상의 테이블을 조인할 때, 한 쪽 테이블에는 데이터가 존재하는 데 

다른 쪽 테이블에는 데이터가 존재하지 않아서 해당 행이 출력되지 않을 때 사용한다.

데이터가 적은 컬럼 뒤에 (+)를 추가한다.

  • LEFT OUTER JOIN

     왼쪽 테이블에 데이터가 존재하고, 오른쪽 테이블에 데이터가 존재하지 않을 때

SELECT d.*
 FROM employees e LEFT JOIN departments d
    ON e.department_id = d.department_id
 ORDER BY d.department_id;
SELECT d.*
 FROM employees e JOIN departments d
    ON e.department_id = d.department_id(+)
 ORDER BY d.department_id;

  • RIGHT OUTER JOIN

     오른쪽 테이블에 데이터가 존재하고, 왼쪽 테이블에 데이터가 존재하지 않을 때

SELECT d.*
 FROM employees e RIGHT JOIN departments d
    ON e.department_id = d.department_id
 ORDER BY d.department_id;
SELECT d.*
 FROM employees e JOIN departments d
    ON e.department_id(+) = d.department_id
 ORDER BY d.department_id;