본문 바로가기

데이터베이스/Oracle

집합연산자

회색 원 = 행

※ JOIN은 여러 테이블의 컬럼들을 결합하는 것, 출력할 컬럼의 갯수를 늘릴 수 있음
UNION 합집합과 관련, 여러 테이블의 행들을 결합하는 것, 출력할 행의 갯수를 늘릴 수 있음

 

 합집합 : UNION, UNION ALL
     교집합 : INTERSECT    ex) A INTERSECT B
     차집합 : MINUS

HR스키마 - JOB_HISTROY : 경력
EMPLOYEES 테이블의 job_id,department_id 현재 회사의 일

※ 과거 경력 신입사원은 이거 없을 수도 있다. 직무/부서 변경 시 자료 쌓임

--1 사원의 사번, 이전직무번호를 출력하시오(JOB_HISTROY)
--2 사원의 사번, 직무번호를 출력하시오(EMPLOYEES)

--1번
SELECT employee_id, job_id
FROM job_history

--2번
SELECT employee_id, job_id
FROM employees

--1+2번, SELECT 2개 합치기
SELECT employee_id, job_id
FROM job_history
UNION
SELECT employee_id, job_id
FROM employees;

유니온 앞이 먼저, 뒤에는 나중

※ 합집합에서 중복된 자료는 무시
176번 사원 중복된 QR_REP 제외됨.

 

※ 집합연산 쓰는 경우
테이블 구조가 같은 데이터들 한곳에 모아서 연산할 때
ex) 프랜차이즈 관리할 때, 스벅 가락시장역점, 문정점 ... 점별로 테이블만듬
전체매출 현황 등을 파악하고 있어야함. 송파구 데이터 필요할때 통계낼 때 UNION

SELECT employee_id, job_id
FROM job_history
UNION ALL
SELECT employee_id, job_id
FROM employees
ORDER BY employee_id;

--각각 ORDER BY 못하고 정렬은 마지막 SELECT 구분에만 작성 가능

UNION ALL은 중복허용

176번 사원 중복된 것도 나옴

--이전직무와 다른 직무를 갖는 사원들의 사번, 현재직무를 출력하시오
SELECT employee_id, job_id
FROM employees
MINUS
SELECT employee_id, job_id
FROM job_history;
FROM job_history;
--176번 사원 안보임
--이전직무와 같은 직무를 갖는 사원들의 사번, 현재직무를 출력하시오
SELECT employee_id, job_id
FROM employees
INTERSECT
SELECT employee_id, job_id
FROM job_history;

'데이터베이스 > Oracle' 카테고리의 다른 글

서브쿼리(SubQuery) (2)  (0) 2023.08.22
서브쿼리(SubQuery) (1)  (0) 2023.08.22
JOIN 예제  (0) 2023.08.22
JOIN  (0) 2023.08.21
내장함수(다중행 함수, 그룹화, 정렬하기)  (1) 2023.08.21