집합 연산자의 종류
|
연산자
|
의미
|
결과
|
|
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 = '모델링';
# 각각 다른 조건 다른 테이블 다른 내용도 이렇게 붙일수 있다.
댓글 없음:
댓글 쓰기