본문 바로가기
DB/Oracle

[Oracle] 오라클 테이블 조회 10 - 오라클 join, 테이블 별칭, from, 등가 조인, 비등가 조인, 자체 조인, 외부 조인, 셀프 조인

by hongdor 2020. 6. 1.
728x90

- 오라클 11g XE 버전입니다

- 오라클 샘플 계정 HR에 접속한 후 진행했습니다 ( 아래 참고 )

https://hongdori2.tistory.com/4

 

 

0. join

 

join은 2개의 테이블을 합치는 것입니다

union같은 집합 연산자는 동일 컬럼에서 행을 더하지만 join은 동일 행에서 컬럼이 더 늘어납니다

 

from table1, table2 

에서 table1이 10개의 행, table2이 10개의 행을 가지고 있다면 from table1, table2 는

table1과 table2의 컬럼을 가진 10*10 = 100개의 행을 가진 table이 됩니다

 

- from table1 a, table2 b; 처럼 table에 별칭을 붙여줄 수 있습니다. 앞의 경우 a = table1, b = table2가 됩니다

 

 

2. 등가 조인 ( equi join or inner join )

: 등가 조건을 사용해 열을 불러오는 것입니다. where에 등가표현 '='이 들어갑니다

select 컬럼

from 테이블1, 테이블2

where 테이블1.컬럼1 = 테이블2.컬럼1

 

예시) 

select first_name 사원명, department_name 부서명

from employees e, departments d

where e.department_id = d.department_id;

> department_id 라는 공통열을 가진, employees, departments 테이블에서

   employees 테이블의 first_name 컬럼과 departments 테이블의 department_name 컬럼을 출력

 

- join 주에 등가 join이 가장 많이 쓰입니다

 

 

3. 비등가 조인 ( nonequi join )

: 등가표현을 외 다른 조건식을 사용해 불러오는 것입니다.

 

예시)

select first_name 사원명, salary 급여, grade 급여등급

from employees, salgrade

where salary between lowsalary and hisalary;

> employees의 salary 컬럼 값이 salgrade의 lowsalary 와 hisalary 컬럼 값 사이에 있는 열만 불러옵니다

 

- 공통되는 컬럼이 없기때문에 <테이블.컬럼> 형식을 쓰지 않아도 인식합니다

 

 

4.  자체 조인 ( self join )

: 자기 테이블을 복제해 join 하는 방법입니다. 별칭을 이용합니다.

 

예시)

select me.employee_id, me.first_name, me.manager_id, manager.employee_id, manager.first_name

from employees me, employees manager

where me.manager_id = manager.employee_id;

> me테이블의 상사 사번 컬럼 manager_id 와, manager 테이블의 사번 컬럼과 이름인 employee_id, first_name를 연결

 

 

5. 외부 조인 ( outer join )

: 컬럼 값의 종류가 적은곳에 (+)로 해당 컬럼 외 다른 컬럼값이 null인 행을 추가해 없는 빈 컬럼값의 행을 생성합니다.

 

예시)

select first_name, department_name

from employees e, departments d

where e.department_id(+) = d.department_id;

> departments 테이블에는 존재하지만 employees 테이블에는 없는 department_id 값이 있습니다

   (+) 표현을 통해 employees 테이블에 없지만 departments에는 있는 department_id를 first_name 이 null인 값으로

   employees 테이블에 생성합니다

 

 

728x90

댓글