데이터베이스

[Oracle] 테이블간 관계 맺기 - 조인

포포015 2021. 2. 13. 10:49

조인이란?

- 테이블 간 관계를 맺는것

(선행조건이 필요하다. 두테이블간의 관계를 맺는데 사용할 컬럼, 즉 두 테이블간 연결고리 역할을 할 컬럼이 있어야함)

 

 

 

 

 

내부 조인

WHERE 절에서 동등연산자(=)를 사용해 연결고리 컬럼, 즉 조인 컬럼을 비교하는 조인이다.

(아래와 같은 테이블이 정의 되어 있다는 가정)

 

1
2
3
4
5
SELECT a.emp_id, a.emp_name, a.gender, a.age, a.dept_id,
       b.dept_id, b.dept_name, b.use_yn
FROM emp_master a, dept_master b
WHERE a.dept_id = b.dept_id
ORDER BY a.emp_id;
cs

실행 결과

사원정보 테이블은 a, 부서정보 테이블은 b란 별칭을 두어 쿼리 구문에서 a. 그리고 b.형태로 사용함.

WHERE 절에선, 두테이블에 있는 공통 컬럼, 즉 조인 컬럼인 dept_id를 이용해 두테이블간에 같은건만 조회 한다.

 

 

ANSI 구문으로 작성한 내부 조인(표준  오라클은 동등연산자(=)로 처리해도되긴함.)

1
2
3
4
5
SELECT a.emp_id, a.emp_name, a.gender, a.age, a.dept_id,
       b.dept_id, b.dept_name, b.use_yn
FROM emp_master a INNER JOIN dept_master b
ON a.dept_id = b.dept_id
ORDER BY a.emp_id;
cs

결과값은 똑같으나 , FROM 절과 WHERE 절 부분이 좀 다르다 . 

FROM 절에 조인을 비교할사이에 INNER JOIN을 명시하고 , WHERE 절대신 ON으로 표기함.

(물론 추가 조건이 있다면 WHERE절 사용 해야함)

 

조인은 여러 테이블간 조인도 가능하다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-기본구문
SELECT a.emp_id, a.emp_name, a.gender, a.age, a.dept_id,
       b.dept_id, b.dept_name, b.use_yn,
       c.address_id , c.city, c.gu, c.address_name
FROM emp_master a, dept_master b, address_master c
WHERE a.dept_id = b.dept_id AND a.address_id = c.address_id
AND A.gender = '남성'
ORDER BY a.emp_id;
 
--ANSI 구문
SELECT a.emp_id, a.emp_name, a.gender, a.age, a.dept_id,
       b.dept_id, b.dept_name, b.use_yn,
       c.address_id , c.city, c.gu, c.address_name
FROM emp_master a 
INNER JOIN dept_master b ON a.dept_id = b.dept_id
INNER JOIN address_master c ON a.address_id = c.address_id
WHERE a.gender = '남성'
ORDER BY a.emp_id;
cs

 

 

 

외부조인

- 두테이블중 한 테이블의 조인 컬럼값이 없더라도 없는건까지 모두 포함해 조회 하는 조인 (null인값도 포함)

키워드는 내부 조인 쿼리 부분에서 WHERE 절 조건에 (+)를 함께 선언해주면됨