조인

HELLO_DINO·2022년 10월 18일
0

SQL전문가가이드

목록 보기
17/28

사용될 테이블은 EMP와 DEPT입니다.

조인 개요

조인이란 두 개 이상의 테이블들을 연결해 데이터를 출력하는 것이다.
조인은 관계형 데이터베이스의 가장 큰 장점이면서 핵심 기능이다.

일반적인 경우 행들은 PK와 FK 값의 연관에 의해 조인이 성립된다.
하지만 어떤 경우에는 PK, FK 없이도 논리적인 값들의 연관만으로 조인이 성립 가능하다.

EQUI JOIN

두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하는 경우 사용되는 방법이다.
대부분 PK, FK의 관계를 기반으로 한다.

JOIN의 조건은 WHERE 절에 기술하게 되는데 "=" 연산자를 사용해 표현한다.

대략적인 EQUI JOIN의 형태이다.

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FORM 테이블1, 테이블2
WHERE 테이블2.칼럼명 = 테이블1칼럼명;

'테이블명.칼럼명'으로 기술하는 이유는 여러 개의 테이블에 같은 칼럼명이 존재할 경우 DBMS는 어떤 칼럼을 사용해야 할 지 모르기 때문에 파싱 단계에서 오류가 나기 때문이다.
또한 개발자나 사용자가 알기 쉽고 가독성이나 유지보수성을 높이는 효과가 있다.

INNER JOIN에 참여하는 대상 테이블이 N개라고 하면 필요한 조인 조건은 N-1개이다.

SELECT
    A.EMPNO, A.ENAME, B.DEPTNO, B.LOC
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO;

Non EQUI JOIN

두 개의 테이블 간에 논리적인 연관 관계를 갖고 있으나, 칼럼 값들이 서로 일치하지 않는 경우 사용한다.
"=" 연산자가 아닌 다른(Between, >, >=, <, <= 등) 연산자들을 사용해 JOIN을 수행한다.

대략적인 Non EQUI JOIN의 형태이다.

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FORM 테이블1, 테이블2
WHERE 테이블1.칼럼명 BETWEEN B.테이블2.칼럼명1 AND 테이블2.칼럼명2;
SELECT
    A.EMPNO, A.ENAME, A.DEPTNO, B.DEPTNO
FROM EMP A, DEPT B
WHERE A.DEPTNO > B.DEPTNO ;

3개 이상 TABLE JOIN

SELECT 테이블1.칼럼명, 테이블2.칼럼명, 테이블3.칼럼명, ...
FORM 테이블1, 테이블2, 테이블3
WHERE 테이블1.칼럼명 = 테이블2.칼럼명
	  테이블1.칼럼명 = 테이블3.칼럼명;

OUTER JOIN

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

Oracle은 다음과 같이 조인 칼럼 뒤에 '(+)' 기호를 표시해 OUTER JOIN을 나타낸다.

SELECT 테이블1.칼럼명, 테이블2.칼럼명, ...
FORM 테이블1, 테이블2
WHERE 테이블2.칼럼명(+) = B.테이블1.칼럼명;
SELECT
    A.*, B.*
FROM EMP A, DEPT B
WHERE A.DEPTNO = B.DEPTNO(+);

SELECT
    A.*, B.*
FROM EMP A, DEPT B
WHERE A.DEPTNO(+) = B.DEPTNO;

'(+)'의 위치를 조심해야 한다.
'(+)'의 반대편에 있는 테이블이 OUTER JOIN의 기준 테이블이 된다.
OUTER JOIN에 성공한 행들은 INNER JOIN과 동일하게 조인에 참여한 각 테이블의 칼럼 값들이 표시된다.

관계형 데이터베이스의 큰 장점이면서 SQL 튜닝의 중요 대상이 되는 조인을 잘못 기술하면, 시스템 자원 부족과 과다한 응답시간 지연을 발생시키는 중요 원인이 되므로 조인 조건을 신중하게 작성해야 한다.

0개의 댓글