728x90
집합 연산자
두 테이블에 대해서 select문으로 각각 데이터를 조회해서 새로운 데이터로 가공하고 싶을 때 집합 연산자를 사용한다.
집합 연산자를 사용하기 위해서 두 테이블에서 selet 문의 컬럼_명, 컬럼_위치, 컬럼_수가 동일해야한다.
그렇지 않으면 'ORA-01789: 질의 블록을 부정확 한 수 의 결과 열을 가지고 있습니다' 와 같은 에러가 발생한다.
집합 연산자의 종류는 UNION(합) UNION ALL, INTERSECT(차), MINUS(감) 있다.
SELECT 문에 집합 연산자의 문법 (UNION/UNION ALL/MINUS/INTERSECT)
SELECT 필드이름
FROM 테이블이름
UNION/UNION ALL/MINUS/INTERSECT
SELECT 필드이름
FROM 테이블이름
UNION
UNION은 여러 개의 SELECT 문의 결과를 하나의 테이블이나 결과 집합으로 표현할 때 사용한다.
이때 각각의 SELECT 문으로 선택된 필드의 개수와 타입은 모두 같아야 하며, 필드의 순서 또한 같아야 한다.
Q. 급여가 10,000 넘는 사람들을 보여주고, department_id 가 100인사람도 보이시오.
select salary, employee_id, department_id from employees
where salary > 10000
UNION
select salary, employee_id, department_id from employees
where department_id = 100;
UNION ALL
위의 예제처럼 UNION은 DISTINCT 키워드를 따로 명시하지 않아도 기본적으로 중복되는 레코드를 제거한다.
따라서 이렇게 중복되는 레코드까지 모두 출력하고 싶을때 사용한다.
Q. 급여가 10,000 넘는 사람들을 보여주고, department_id 가 100인사람도 보이시오.(중복포함)
select salary, employee_id, department_id from employees
where salary > 10000
UNION ALL
select salary, employee_id, department_id from employees
where department_id = 100
order by salary DESC;
MINUS
Q. 100번 부서를 제외하고 급여가 10000이상만 보이시오.
select employee_id, salary, department_id from employees
where salary > 10000
MINUS
select employee_id, salary, department_id from employees
where department_id = 100;
INTERSECT
Q. 부서가 100번이고, 급여가 10000이상만 보이시오.(교집합)
select employee_id, salary, department_id from employees
where salary > 10000
INTERSECT
select employee_id, salary, department_id from employees
where department_id = 100;
'일단 해보는 코딩 > Oracle SQL' 카테고리의 다른 글
[오라클/SQL] Transaction&LOCK, View 란 무엇인가? (0) | 2022.06.09 |
---|---|
[오라클/SQL] GROUP BY (ROLLUP/CUBE), 계층적 질의 (0) | 2022.06.09 |
[오라클/SQL] 다중/여러개 테이블 [ANSI, Orcle] JOIN 하기 (0) | 2022.06.08 |
[오라클/SQL] JOIN - INNER/OUTER/ON (0) | 2022.06.08 |
[오라클/SQL] 테이블 생성,변경,삭제하기 (0) | 2022.06.03 |