Database-Oracle/Join

조익준·2023년 4월 24일
0

Oracle

목록 보기
4/5

배경

데이터베이스는 하나의 표로 작업하지 않는다. 예를 들어 회사에 대한 표가 있다면 직원, 지역, 직업에 관한 표가 있을 것이다. 우리가 원하는 정보를 하나의 표에서 전부 얻어올 수 없을 때가 있고, 이때 Join문을 사용한다.

조인은 크게 4가지로 나뉜다.

  1. 조인(INNER JOIN)
  2. 아우터 조인(LEFT OUTER JOIN)
  3. 아우터 조인(RIGHT OUTER JOIN)
  4. 셀프 조인(SELF JOIN)

A와 B를 각각의 테이블이라고 생각하고 시작해보자.

1. 조인(INNER JOIN)

위의 표는 employees표이다.

아래의 표는 departments표이다.

우리는 employees표에서 employee_id, department_id, department_name, salary를 얻고 싶다.

하지만 department_name은 employees표의 데이터가 아니고 departments표의 데이터이다. 이럴 때 우리는 JOIN을 이용하는데 JOIN에는 두가지 방식이 있다.

1-1 안시 조인(ANSI JOIN)

FROM 절의 employees테이블과 departments 테이블을 INNER JOIN 하되 employees의 department_id와 departments의 department_id를 키로 연결하겠다는 의미이다. INNER JOIN은 위의 집합그림처럼 중첩된 값 이외에는 모두 제거된다.

결과)

1-2 오라클 조인

결과)

만약 JOIN 하는 칼럼명이 같다면 USING절을 이용하면 된다.

ex)

2. OUTER JOIN

2-1 LEFT,RIGHT OUTER JOIN

LEFT OUTER JOIN은 왼쪽 테이블의 데이터를 모두 가져오되, 조인하는 B테이블에서 해당하는 값이 없으면 NULL 로 표시한다.

RIGHT OUTER JOIN 또한 오른쪽 테이블의 데이터를 모두 가져오되, 조인하는 A테이블에서 해당하는 값이 없으면 NULL로 표시한다.

ex)

3. SELF JOIN

SELF JOIN은 참조해야할 칼럼이 자신의 테이블에 있는 경우에 사용하는 JOIN 방법이다.

위의 표에서 Kochhar과 De Haan의 manager_id는 100으로 킹이 매니저이다. Hunold의 manager_id는 102로 De Hann이 매니저이다.
좀더 보기쉽게 표를 만들자면

이렇게 된다. Kochhar의 employee_id는 101이고 manager_id는 100이며 KING이 매니저이다.

employees테이블을 두개로 나누면 된다.
e1 테이블에는 employee_id, last_name, manager_id를 참조하고
e2에는 employee_id, last_name을 참조하면 된다.
e2테이블에서 누군가의 employee_id 가 e1테이블의 누군가의 manager_id가 되기 때문이다.

profile
비가역적인사람

0개의 댓글