hyeonga_code
Database_33_ANSI JOIN_OUTER JOIINNER JOIN 본문
-- Outer / Inner JOIN
-- Outer : JOIN 절에서 제외된 데이터
-- Inner : JOIN 절에서 포함된 데이터
-- Inner JOIN_내부 조인
-- 모든 조건을 만족하는 데이터만 조회합니다.
-- 조인 조건을 충족하지 못하는 행은 결과에 출력되지 않습니다.
-- 조인 조건을 충족하는 행만 결과로 출력합니다.
-- Outer가 발생합니다.
-- Outer JOIN_포괄 조인
-- Inner JOIN 결과 데이터에 Outer 데이터를 결합하여 조회합니다.
-- LEFT/RIGHT JOIN
-- OUTER를 기준으로 Outer 데이터를 조회할 테이블을 지정합니다.
-- 두 테이블을 조인하며 내부 조인의 결과와 함께 일치하지 않는 왼쪽 또는 오른쪽 테이블의 행을 반환하는 조인입니다.
-- FULL OUTER JOIN
-- 두 테이블을 조인하며 내부 조인의 결과와 함께 모든 행을 반환하는 조인입니다.
-- LEFT OUTER JOIN
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
/*
EM_ID LAST_NAME DEPARTMENT_NAME
----------- ------------------------- ------------------------------
200 Whalen Administration
202 Fay Marketing
201 Hartstein Marketing
144 Vargas Shipping
143 Matos Shipping
142 Davies Shipping
141 Rajs Shipping
124 Mourgos Shipping
107 Lorentz IT
104 Ernst IT
103 Hunold IT
176 Taylor Sales
174 Abel Sales
149 Zlotkey Sales
102 De Haan Executive
101 Kochhar Executive
100 King Executive
206 Gietz Accounting
205 Higgins Accounting
178 Grant
-- 부서가 없는 직원의 데이터를 employees 테이블에서 조회합니다.
*/
-- RIGHT OUTER JOIN
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
/*
EM_ID LAST_NAME DEPARTMENT_NAME
----------------------------------------------------------
200 Whalen Administration
201 Hartstein Marketing
202 Fay Marketing
124 Mourgos Shipping
144 Vargas Shipping
143 Matos Shipping
142 Davies Shipping
141 Rajs Shipping
107 Lorentz IT
104 Ernst IT
103 Hunold IT
174 Abel Sales
149 Zlotkey Sales
176 Taylor Sales
102 De Haan Executive
100 King Executive
101 Kochhar Executive
206 Gietz Accounting
205 Higgins Accounting
( null ) ( null ) Contracting
-- 직원이 없는 부서를 departments 테이블에서 조회합니다.
*/
-- FULL OUTER JOIN
SELECT e.employee_id, e.last_name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
/*
EM_ID LAST_NAME DEPARTMENT_NAME
----------------------------------------------------------
100 King Executive
101 Kochhar Executive
102 De Haan Executive
103 Hunold IT
104 Ernst IT
107 Lorentz IT
124 Mourgos Shipping
141 Rajs Shipping
142 Davies Shipping
143 Matos Shipping
144 Vargas Shipping
149 Zlotkey Sales
174 Abel Sales
176 Taylor Sales
178 Grant ( null )
200 Whalen Administration
201 Hartstein Marketing
202 Fay Marketing
205 Higgins Accounting
206 Gietz Accounting
( null ) ( null ) Contracting
*/
-- Outer 행만 출력하고 싶은 경우
SELECT e.last_name, d.department_name
FROM employees e FULL OUTER JOIN departments d
ON ( e.department_id = d.department_id)
MINUS
SELECT e.last_name, d.department_name
FROM employees e JOIN departments d
ON ( e.department_id = d.department_id);
/*
LAST_NAME DEPARTMENT_NAME
----------------------------------------------------
Grant ( null )
( null ) Contracting
*/
-- 부서 이름을 사용하여 부서별 총 급여, 인원 수 조회
SELECT department_name, SUM(salary), COUNT(*)
FROM employees e JOIN departments d
ON (e.department_id = d.department_id)
GROUP BY department_name;
/*
DP_NAME SUM(SALARY) COUNT(*)
-------------------------------------------------------------
Administration 4400 1
Accounting 20300 2
IT 19200 3
Executive 58000 3
Shipping 17500 5
Sales 30100 3
Marketing 19000 2
*/
'Oracle Database' 카테고리의 다른 글
Database_35_ANSI JOIN_Cartesian Product 카타시안 곱, Cross JOIN (0) | 2023.07.31 |
---|---|
Database_34_ANSI JOIN_조인 기준, Equi JOIN, Non-equi JOIN (0) | 2023.07.31 |
Database_32_ANSI JOIN_SELF JOIN 셀프 조인 (0) | 2023.07.31 |
Database_31_ANSI JOIN_조인 함수 테이블의 접두어 사용 (0) | 2023.07.30 |
Database_30_ANSI JOIN_조인 함수 3 WAY JOIN (0) | 2023.07.30 |