2020. 5. 1.

[Oracle] 12. 집합 연산자 정리


집합 연산자의 종류

연산자
의미        
결과
union
합집합
검색된 결과의 합으로 중복은 제거 된다.
union all
합집합
중복을 포함한 결과의 합을 검색한다.
intersect
교집합
양쪽 모두에서 포함된 행을 검색한다.
minus
차집합        
번째 검색된 결과에서 번째 검색 결과를 제외한 나머지를 검색한다.

집합 연산

select ….
[union all | union | intersect | minus]
select ….

예제 1. 2000 이후에 입사한 사원과 부임한 교수의 명단을 검색

select pno 번호, pname 이름, hiredate 입사일_부임일
from professor
where hiredate >= '2000/01/01'
union all
select eno, ename, hdate
from emp
where hdate >= '2000/01/01';


select pno 번호, pname 이름, hiredate 입사일_부임일
from professor
where hiredate > '2000/01/01'
union
select eno, ename, hdate
from emp
where hdate > '2000/01/01';


# union union all 차이는 중복값 제거의 차이가 있는데 지금은 없어서 안나온것이다.

예제 2. 제갈씨 성을 가진 사원 중에 지원 업무를 하지 않는 사원을 검색

select eno, ename, job
from emp
where ename like '제갈%'
minus
select eno, ename, job
from emp
where job ='지원';


# minus 이용하여 겹치지 않는 자료만 출력

예제 3. 화학, 물리학과 학생들 중에 학점이 3.0 이상인 학생을 검색한다.

select sno 학번, sname 이름, major 학과, avr 학점
from student
where major in ('화학','물리')
intersect
select sno, sname, major, avr from student
where avr >= 3;


# intersect select 두개의 조건이 모두 만족하는 값만 출력

실습

 1. 화학과 학생과 교수를 검색한다. (집합 연산자를 이용한다.)

select sname 이름
from student
where major = '화학'
union
select pname
from professor
where section = '화학';

# union으로 붙이고 이렇게 union 으로 붙일때는 컬럼명을 이름으로 쓴것처럼 설정해줘야한다.


 2. 정교수의 명단과 모델링이 업무인 직원의 이름, 입사일(부임일) 검색한다.

select pname 이름, orders 직위, hiredate 입사일
from professor
where orders = '정교수'
union
select ename, job, hdate
from emp
where job = '모델링';

# 각각 다른 조건 다른 테이블 다른 내용도 이렇게 붙일수 있다.





댓글 없음:

댓글 쓰기