Post

[SQL] 조인(JOIN)

[SQL] 조인(JOIN)

조인 개념


조인은 테이블간의 결합을 의미한다. 즉, 2개 이상의 테이블을 결합하여 데이터를 출력할 때 조인을 활용한다. 조인은 크게 오라클 조인과 안시조인(표준)이 있으며, 오라클 조인은 오라클DB에서만 사용가능하고 안시조인(표준)은 모든 벤더사 DB에서 사용가능하다.

조인 방법


조인에는 여러가지 방법이 있으며, 각 방법이 오라클 조인과 안시조인(표준)에서 어떻게 작성되는지 살펴보자. 방법의 종류는 다음과 같다.

  • EQUI JOIN (등가조인)
  • Non EQUI JOIN (비등가조인)
  • INNER JOIN (내부조인)
  • OUTER JOIN (외부조인)
  • NATURAL JOIN
  • CROSS JOIN

EQUI JOIN

EQUI JOIN(등가)은 두 개의 테이블 간에 컬럼 값들이 서로 정확하게 일치하는 경우에 사용되는 방법으로 대부분 PK <-> FK의 관계를 기반으로 한다. 그러나 일반적으로 테이블 설계 시에 나타난 PK <-> FK의 관계를 이용하는 것이지, 반드시 PK <-> FK의 관계로만 EQUI JOIN이 성립하는 것은 아니다. 이 기능은 계층형이나 망형 DB와 비교해서 관계형 DB의 큰 장점이다. JOIN의 조건은 WHERE절에 기술하게 되는데 “=” 연산자를 사용해서 표현한다.

사용법


  • 오라클
1
2
3
4
-- WHERE절에 JOIN 조건을 기술한다.
SELECT 테이블1.컬럼명, 테이블2.컬럼명, ...
  FROM 테이블1, 테이블2
 WHERE 테이블2.컬럼명 = 테이블1.컬럼명;
  • ANSI/ISO
1
2
3
4
-- ON절에 JOIN 조건을 기술한다.
SELECT 테이블1.컬럼명, 테이블2.컬럼명, ...
  FROM 테이블1 INNER JOIN 테이블2
    ON 테이블2.컬럼명 = 테이블1.컬럼명;

예제


예제에 사용되는 릴레이션은 아래와 같다.

DEPT 릴레이션

DEPT 릴레이션

EMP 릴레이션

EMP 릴레이션
  • 쿼리
1
2
3
4
5
-- 오라클
SELECT A.ENAME AS ENAME
     , B.DNAME AS DNAME
  FROM EMP A, DEPT B
 WHERE B.DEPTNO = A.DEPTNO;
1
2
3
4
5
6
-- ANSI/ISO
SELECT A.ENAME AS ENAME
     , B.DNAME AS DNAME
  FROM EMP A
 INNER JOIN DEPT B
    ON B.DEPTNO = A.DEPTNO;
  • 결과

EQUI JOIN 예제

Non EQUI JOIN

Non EQUI JOIN(비등가)은 두개의 테이블 간에 논리적인 연관 관계를 갖고 있으나, 컬럼 값들이 서로 일치하지 않는 경우에 사용된다. Non EQUI JOIN의 경우에는 “=” 연산자가 아닌 다른 (Between, > ,>=, <, <= 등) 연산자들을 사용해 JOIN을 수행한다. 두개의 테이블이 PK-FK로 연관관계를 갖거나 논리적으로 같은 값이 존재하는 경우에는 “=” 연산자를 이용해 EQUI JOIN을 사용한다. 그러나 두 테이블 간에 컬럼 값들이 서로 정확하게 일치하지 않는 경우에는 EQUI JOIN을 사용할 수 없다. 이런 경우 Non EQUI JOIN을 시도할 수 있으나 데이터 모델에 따라서 Non EUQI JOIN이 불가능한 경우도 있다.

사용법


아래 BETWEEN JOIN 조건은 Non EQUI JOIN의 한 사례일 뿐이다.

1
2
3
SELECT 테이블1.컬럼명, 테이블2.컬럼명 ...
  FROM 테이블1, 테이블2
 WHERE 테이블1.컬럼명 BETWEEN 테이블2.컬럼명1 AND 테이블2.컬럼명2;

예제


예제에 사용되는 릴레이션은 아래와 같다.

EMP 릴레이션

EMP 릴레이션

SALGRADE 릴레이션

SALGRADE 릴레이션
  • 쿼리
1
2
3
4
5
6
7
-- 오라클
SELECT A.ENAME
     , A.JOB
     , A.SAL
     , B.GRADE
  FROM EMP A, SALGRADE B
 WHERE A.SAL BETWEEN B.LOSAL AND B.HISAL;
  • 결과

Non EQUI JOIN 예제

OUTER JOIN

앞서 다룬 EQUI JOIN, Non EQUI JOIN은 모두 조인 조건의 결과가 참인 행들만 반환하는 INNER JOIN이다. OUTER JOIN은 조인 조건을 만족하지 않는 행들도 함께 반환할 때 사용한다.

사용법


1
2
3
4
-- 오라클
SELECT 테이블1.컬럼명, 테이블2.컬럼명, ...
  FROM 테이블1, 테이블2
 WHERE 테이블2.컬럼명(+) = 테이블1.컬럼명;
1
2
3
4
-- ANSI/ISO
SELECT 테이블1.컬럼명, 테이블2.컬럼명, ...
  FROM 테이블1 LEFT OUTER JOIN 테이블2
    ON 테이블2.컬럼명 = 테이블1.컬럼명;

예제


예제에 사용되는 릴레이션은 아래와 같다.

DEPT 릴레이션

DEPT 릴레이션

EMP 릴레이션

EMP 릴레이션
  • 쿼리
1
2
3
4
-- 오라클
SELECT A.EMPNO, B.DEPTNO
  FROM EMP A, DEPT B
 WHERE A.DEPTNO = B.DEPTNO(+);
1
2
3
4
5
6
-- ANSI/ISO
SELECT A.EMPNO
     , B.DEPTNO
  FROM EMP A
  LEFT OUTER JOIN DEPT B
    ON A.DEPTNO = B.DEPTNO;
  • 결과

OUTER JOIN 예제


읽어주셔서 감사합니다. 😊

Reference
SQL 전문가 가이드 - Kdata 한국데이터산업진흥원

This post is licensed under CC BY 4.0 by the author.