SQLD 07. JOIN

JOIN 개요

두 개 이상의 테이블 들을 연결/결합하여 데이터를 출력하는 것 관계형 데이터베이스의 가장 큰 장점이면서 대표적인 핵심 기능이다.

일반적으로는 PK나 FK값의 연관에 의해 JOIN이 성립되나, 어떤 경우에는 PK/FK관계가 없어도 논리적인 값들의 연관만으로 JOIN의 성립 가능하다.

유의할 점
FROM절에 여러 테이블이 나열되더라도 SQL에서 데이터를 처리할 때는 단 두개의 잡합 간에만 조인이 일어난다.
이 때 테이블의 조인 순서는 옵티마이저에 의해서 결정되고 주요 튜닝 포인트가 된다.


EQUI JOIN

EQUI(등가) JOIN
두 개의 테이블간 칼럼값들이 서로 정확하게 일치하는 경우에 사용되는 방법.
대부분 PK ⟷ FK 관계를 기반으로 한다. (반드시는 아니다.)
두 개의 테이블이 PK-FK로 연관관계를 가지거나 논리적으로 같은 값이 존재하는 경우 이용한다.

“="연산자를 사용해서 표현.
(INNER JOIN (ANSI/ISO SQL 표준))

JOIN 조건 기술시 주의사항 테이블에 대한 ALIAS를 적용해서 SQL문장을 작성한 경우 WHERE절과 SELECT절에는 테이블명이 아닌 테이블에 대한 ALIAS를 사용해야한다.


NON EQUI JOIN

Non EQUI(비등가) JOIN은 두 개의 테이블 간에 칼럼 값들이 서로 정확하게 일치하지 않는 경우에 사용된다.
“=” 연산자가 아닌 다른 (Between, >, <, >=, <= 등) 연산자를 사용해 JOIN을 수행한다.

  • 예시
SELECT --테이블1.칼럼명, 테이블2.칼럼명
FROM --테이블1, 테이블2
WHERE --테이블1.칼럼명1 BETWEEEN 테이블2.칼럼명1 AND 테이블2.칼럼명2;

SELECT E.ENAME, E.JOB, E.SAL, S.GRADE
FROM EMP E, SALGRADE S
WHERE E.SAL BETWEEN S.LOSAL AND S.HISAL;

“="연산자가 아닌 “>"나 “<"와 같은 연산자를 사용했을 경우 모두 Non EQUI JOIN에 해당한다. 데이터 모델에 따라 Non EQUI JOIN이 불가능한 경우도 있다.


3개 이상 테이블 JOIN

서로 연관관계가 없는 테이블의 경우, 중간에 연관관계가 있는 테이블을 추가해서 원하는 데이터를 얻을 수 있다.


JOIN이 필요한 이유

  • 정규화 : 불필요한 데이터의 정합성을 확보하고 이상현상 발생을 피하기 위해, 테이블을 분할하여 생성.

SQL튜닝의 중요 대상이 되는 JOIN을 잘못 기술하게 되면 시스템 자원 부족이나 과다한 응답시간 지연을 발생시키는 중요 원인이 되므로 JOIN조건은 신중하게 작성해야한다.