JOIN이란?
두 개 이상의 테이블들을 연결하여 데이터를 검색하는 것을 JOIN 이라고 합니다.
JOIN 시 사용되는 JOIN 연산자에 따라서 EQUI JOIN과 NON EQUI JOIN 으로 구별되며, FROM 절의 JOIN 형태에 따라서 INNER JOIN과 OUTER JOIN 으로 구별합니다.
JOIN 조건으로 사용되는 연산자에 따른 분류
| JOIN |
설명 |
| EQUI JOIN |
두 테이블 간의 칼럼 값들이 서로 일치하는 경우
JOIN 조건으로 '=' 연산자를 사용 |
| NON EQUI JOIN |
두 테이블 간의 칼럼 값들이 서로 일치하지 않는 경우
JOIN 조건으로 'BETWEEN ~ AND' 등의 범위 비교 연산자를 사용 |
FROM 절의 JOIN 형태에 따른 분류
| JOIN |
설명 |
| INNER JOIN |
JOIN 조건에서 값이 일치하는 행만 반환 |
| OUTER JOIN |
JOIN 조건에서 한쪽 값이 없더라도 행을 반환 |
EQUI JOIN
EQUI JOIN 개념
- - 두 테이블 간의 컬럼 값들이 서로 정확하게 일치하는 경우에 사용하는 JOIN으로 WHERE 절에 '=' 연산자를 사용하여
- JOIN 조건을 명시합니다.
- - 일반적으로 기본키, 외래키로 지정된 컬럼을 JOIN으로 많이 사용합니다.
- [그림] EQUI JOIN 개념

EQUI JOIN 구문
SELECT table1.column_name, table2.column_name
FROM table1, table2
WHERE table1.column_name = table2.column_name;
- - table1.column_name : 데이터를 검색할 테이블 및 열을 명시한다.
- - table 이름 대신에 FROM 절에 기술한 테이블의 alias를 사용해도 된다.
- - table1.column_name = table2.column_name : 두 테이블을 JOIN 시킬 JOIN 조건을 명시한다.
- - table 이름 대신에 FROM 절에 기술한 테이블의 alias를 사용해도 된다.
EQUI JOIN 예제
사원이 어떤 부서에서 근무하는지를 검색하시오.
iSQL> SELECT employee.eno, employee.ename, department.dno, department.dname
FROM employee, department
WHERE employee.dno = department.dno;
사원이 어떤 부서에서 근무하는지를 검색하시오(별칭을 사용하시오).
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
FROM employee e, department d
WHERE e.dno = d.dno;
NON EQUI JOIN
NON EQUI JOIN 개념
두 테이블 간의 컬럼 값들이 서로 일치하지 않는 경우에 사용하는 JOIN 방법으로 WHERE 절에 보통 BETWEEN ~ AND, < , > 등의 비교 연산자를 사용하여 JOIN 조건을 작성합니다.
- [그림] NON EQUI JOIN 개념

NON EQUI JOIN 예제
사원이 받는 급여의 등급을 조회
iSQL> SELECT e.ename, e.salary, s.grade
FROM employee e, salary s
WHERE e.salary BETWEEN s.low_sal AND s.high_sal;
INNER JOIN
INNER JOIN 개념
JOIN 조건을 만족하는 행만 반환하는 JOIN으로 FROM 절에 INNER JOIN 혹은 JOIN 절을 사용합니다. JOIN 조건은 ON 절에 명시합니다.
INNER JOIN 구문
SELECT table1.column_name, table2.column_name, …
FROM table1 [INNER] JOIN table2
ON table1.column_name = table2.column_name;
- - table1 [INNER] JOIN table2 : JOIN 할 테이블의 이름을 나열한다. INNER 를 생략해도 INNER JOIN 방식이 적용된다.
- - ON table1.column_name=table2.column_name : JOIN 조건을 명시한다
INNER JOIN 예제
사원정보와 사원이 근무하는 부서이름을 검색하시오.
-- 아래 두 쿼리는 결과가 동일하다
-- 일반적인 조인 방식
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
FROM employee e, department d
WHERE e.dno = d.dno;
-- INNER JOIN 을 사용한 방식
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
FROM employee e INNER JOIN department e
ON e.dno = d.dno;
OUTER JOIN
OUTER JOIN 개념
조인 조건을 만족하지 않는 데이터를 처리하기 위한 JOIN의 확장 형태입니다. INNER JOIN 이 두 테이블에 있는 키 갑싱 일치하는 데이터만 가져오는 것에 비해 OUTER JOIN은 어느 한 쪽의 데이터를 모두 가져옵니다.
또한, 한 테이블의 행이 다른 테이블의 행에 대응되지 않을 때 반환된 결과 집합의 경우, 대응되지 않는 행을 갖고 있는 테이블로 확인된 모든 결과 집합 열에 대해 NULL값이 제공됩니다.
- [그림] OUTER JOIN 개념

OUTER JOIN 구문
SELECT table1.column_name, table2.column_name, …
FROM table1 {LEFT|RIGHT|FULL} OUTER JOIN table2
ON table1.column_name = table2.column_name;
- - LEFT OUTER JOIN : JOIN 수행 시 왼쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행한다.
- - RIGHT OUTER JOIN : JOIN 수행 시 오른쪽에 표기된 데이터를 기준으로 OUTER JOIN을 수행한다.
- - FULL OUTER JOIN : 조인 수행 시 왼쪽, 오른쪽 테이블의 모든 데이터를 읽어 JOIN을 수행한다. LEFT OUTER JOIN과
- RIGHT OUTER JOIN의 결과를 합집합으로 처리한 결과와 동일하다.
OUTER JOIN 예제
사원이 어떤 부서에서 근무하는지를 검색하고, 부서를 아직 배정받지 못한 사원정보까지 함께 검색하시오
-- 아래 두 쿼리의 결과는 동일하다.
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
FROM employee e LEFT OUTER JOIN department d
ON e.dno = d.dno;
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
FROM department d RIGHT OUTER JOIN employee e
ON e.dno = d.dno;
사원이 어떤 부서에서 근무하는지 검색하고, 부서를 아직 배정받지 못한 사원 및 사원이 아직 없는 부서정보도 함께 검색하시오.
iSQL> SELECT e.eno, e.ename, d.dno, d.dname
FROM department d RIGHT OUTER JOIN employee e
ON e.dno = d.dno;
문서에 대하여