집합연산자
: 테이블을 구성하는 튜플 집합에 대한 테이블의 부분 집합을 결과로 반환하는 연산자
UNION | 합집합 |
INTERSECT | 교집합 |
EXCEPT | 차집합(Oracle 에선 MINUS 로 사용 ) |
UNION
예) 부서 번호 10 인 사원들과 직급이 staff 인 사원들 검색
(select * from employee where dno=10)
union(select * from employee where job='staff');
-- 결과정렬을 하고싶다면 쿼리끝에 해주면 됨.
(select * from employee where dno=10)
union(select * from employee where job='staff')
order by salary;
예) null값을 넣을때
select eno, ename, dno, "" from employee
-- 속성의 갯수 ( eno, ename , job , manager, hiredate, salary, commission, dno)
union
select "", "" , dno, dname from department; -- 속성의 갯수와 안맞으면 실행이 안됨
-- varchar 타입이라서 ""으로 맞춰줌 (속성을 맞춰줘야함) null로 해도됨 null은 모든타입의 속성을 포괄함
INTERSECT
예) 부서 번호 10 이고 직급이 staff 인 사원들 검색
(select * from employee where dno=10)
intersect(select* from employee where job='staff');
-- intersect 는 mysql에서는 지원하지 않음 > 아래와 같이 대체해서 사용할 수 있음
select * from employee where dno =10 and job = 'staff';
-- 이렇게 되면 교집합이 나옴 그게 아니고 합집합을 원하는것
select * from employee where dno='10'
union
select * from employee where job='staff';
EXCEPT
예) 부서번호 10인 사원들 중 직급이 STAFF인 사원들 검색
(select * from employee where dno=10)
except(select * from employee where job='staff');
-- except 는 mysql에서는 지원하지 않음 > 아래와 같이 대체해서 사용할 수 있음
select * from employee where dno =10 and job = 'staff';
UNION과 UNION ALL
UNION이 중복을 허용하지 않을때 UNION ALL을 사용
예) 부서번호 10인 사원들과 직급이 STAFF인 사원들을 검색 ( 중복허용 )
(select * from employee where dno = 10) union all ( select * from employee where job='staff');
'Programming > SQL' 카테고리의 다른 글
[SQL/실습] 서브쿼리와 함수를 조합하여 문제풀기 (0) | 2020.12.17 |
---|---|
[SQL] 집단연산자 - 집단함수( sum / avg / count /max / min / stdev / var ) , group by / having (0) | 2020.12.17 |
[SQL/실습] 트랜잭션의 활용 (0) | 2020.12.17 |
[SQL] 트랜잭션 제어문 (TCL) / 트랜잭션 모드 (0) | 2020.12.17 |
[SQL] 트랜잭션(Transaction) - 트랜잭션의 활용 / 특성 / ACID (0) | 2020.12.17 |