[Oracle] Join 개념 및 실습

목차

  1. Introduction
  2. Cartesian Product
  3. Equi Join
  4. Non-Equijoin
  5. Self Join
  6. Outer Join


※ Oracle 기준

※ 예제로 사용할 테이블 설명은 여기를 참고하세요

※ DB 이론 관련 모든 포스팅 목록도 여기를 참고하세요


Introduction

Join이란 둘1 이상의 테이블을 row 또는 column을 기준으로 연결하여 데이터를 검색하는 방법으로, 두 개 이상의 행들의 공통된 값(보통은 pk2, fk3)을 사용하여 join을 실행합니다.

SELECT table.column1[, table.column2, ...]
FROM table1, table2
WHERE table1.column1 = table2.column2;

1: 보통은 둘 이상의 테이블을 다루지만 Self Join은 하나의 테이블을 대상으로 합니다.
   이해를 돕고자 위와 같이 적은 것이니 주의하시길 바랍니다.
2: pk = primary key = 기본키      3: fk = foreign key = 외래키

예제

사원의 이름과 속한 부서명을 출력하시오.



Cartesian Product

모든 가능한 행들의 join으로, join에 사용된 테이블들의 모든 데이터가 반환됩니다.

Cartesian Product가 발생하는 경우

  • join 조건을 정의하지 않았을 경우
  • join 조건을 잘못 정의했을 경우
  • 첫 번재 테이블의 모든 행들이 두 번째 테이블의 모든 행들과 join되는 경우

예제



Equi Join

조건에서 Equality Condition(=)를 사용하여 값들이 정확하게 일치하는 경우에 사용되는 join

동의어) Inner Join

SELECT table.column1[, table.column2, ...]
FROM table1, table2
WHERE table1.column1 = table2.column2;

예제


테이블 별칭(table alias)

table alias를 사용하여 긴 테이블 이름을 간단하게 별칭으로 사용할 수 있습니다. 보통은 SELECT문에서 많이 쓰입니다. FROM절에 table alias를 선언하면 SELECT문 전체에서 사용할 수 있습니다.

SELECT empno, ename
FROM emp e, dept d
WHERE e.deptno = d.deptno;

예제



Non-Equijoin

테이블의 어떤 column도 join할 테이블의 column에 일치하지 않을 때 사용합니다. 즉, = 이외의 연산자를 사용합니다. (BETWEEN AND, IS NULL, IS NOT NULL, IN, NOT IN 등) 정식 용어는 아니고 Equi join과 대비되는 상황을 통칭해서 흔히 쓰이는 용어입니다.

예제

사원의 연봉과 연봉의 등급을 출력하시오.



Self join

자체적으로 테이블을 join하는 경우입니다.

예제

각 사원의 관리자를 출력하시오.



Outer Join

Equi join은 join하는 테이블의 두 개의 column에서 공통된 값이 없다면 테이블로부터 행을 반환하지 않습니다.

이럴 경우를 위해 Outer Join을 사용하면 기준 테이블의 값만 있다면 다른 테이블의 값이 없어도 기준 테이블의 값을 가져옵니다. 사용 방법은 어렵지 않습니다. join할 값이 없는 쪽에 (+) 기호를 추가합니다.

+) Outer join 연산자는 표현식의 한 편에만 사용 가능합니다.
(최근 버전에는 양쪽 다 사용할 수 있게 되었습니다.4)

LEFT OUTER

SELECT table.column1[, table.column2, ...]
FROM table1, table2
WHERE table1.column1 = table2.column2(+);

기준 테이블: table1

RIGHT OUTER

SELECT table.column1[, table.column2, ...]
FROM table1, table2
WHERE table1.column1(+) = table2.column2;

기준 테이블: table2

예제

일반 join 시 vs outer join 시 5



4: Oracle 11g의 경우 양쪽의 outer join이 불가능합니다.


5: DISTINCT는 SELECT문의 결과에서 중복 행을 필터링하여 출력하는 키워드입니다.



출처

  1. wikidocs 예제로 배우는 ORACLE 11g NON-EQUI JOIN