본문 바로가기
Database

[오라클] 테이블 합치기

by 서피 2021. 3. 9.

1. 테이블 합치기 - JOIN (INNER JOIN)

select emp_id, emp_name, dept_code, dept_title from employee join 
department on (dept_code = dept_id);

employee테이블의 dept_code와 department테이블의 dept_id 두 컬럼의 값이 같으므로 합쳐서 출력한다.

이 때 합치는 기준컬럼이 두 테이블 중 한 쪽이라도 null인 행은 출력되지 않는다. <- INNER JOIN

(이 경우 dept_code 혹은 dept_id 중 하나 이상 null일 때)

 

실행결과

employee테이블의 dept_code = department테이블의 dept_id 

 

두 테이블의 컬럼명이 같을 때

select emp_id, emp_name, employee.job_code from employee join
job on (employee.job_code = job.job_code);

합치려는 두 컬럼 모두 job_code라는 컬럼명을 가지고 있다.

이 경우 컬럼명 앞에 테이블 명을 붙여서, 어떤 테이블의 컬럼명인지 구분해서 지정할 수 있다.

 

firsttable.a = firsttable 테이블의 a 컬럼

secondtable.a = secondtable 테이블의 b 컬럼

 

실행결과

 

2. 한 쪽 테이블을 유지한 채 다른 테이블 합치기 - OUTER JOIN

LEFT OUTER JOIN

select emp_name, dept_code, dept_title from employee left outer join department on (dept_code=dept_id);

employee 테이블에 department 테이블을 left outer join으로 합친다.

 

실행결과

오른쪽 테이블 (employee)에 값이 있기 때문에, 왼쪽 테이블 (department) 값이 null이더라도 출력된다는 것을 22, 23행에서 확인할 수 있다.

 

 

 

RIGHT OUTER JOIN

select emp_name, dept_code, dept_title from employee right outer join department on (dept_code=dept_id);

employee 테이블에 department 테이블을 right outer join으로 합친다.

 

실행결과

오른쪽 테이블 (department)에 값이 있기 때문에, 왼쪽 테이블 (employee) 값이 null이더라도 출력된다는 것을 22, 23행에서 확인할 수 있다.

 

 

 

3. 양 테이블의 모든 행을 서로 곱해서 합치기 - CROSS JOIN

select emp_name, dept_title from employee cross join department;

employee 테이블의 모든 행과 department 테이블의 모든 행을 곱해서 합친다.

 

만약 employee 테이블에 5개의 행이 있고, department 테이블에 6개의 행이 있다면,

출력 결과는 총 5 x 6 = 30개의 행이 된다.

 

실행결과

 

4. 테이블에 같은 테이블을 합치기 - SELF JOIN

select a.emp_id, a.emp_name, a.manager_id, b.emp_name from employee a join employee b on a.manager_id = b.emp_id;

employee 라는 동일한 테이블을 a, b로 이름 붙여 구분해준다.

위 쿼리를 통해 각 직원의 담당 매니저가 누구인지 확인할 수 있다.

 

실행결과

 

 

 

 

 

'Database' 카테고리의 다른 글

[SQL] 테이블에 데이터 추가하기  (0) 2021.03.10
[오라클] 순위 가져오기  (0) 2021.03.10
[오라클] 그룹 / 집합 함수  (0) 2021.03.09
[오라클] 데이터 변환 함수  (0) 2021.03.08
[오라클] 날짜 표현  (0) 2021.03.08

댓글