DataBase - 집합 연산자(SET OPERATOR)
- 기존의 조인에서는 FROM 절에 검색하고자 하는 테이블을 나열하고 WHERE절에 조인 조건을 기술하여 원하는 데이터를 조회할수 있었다.
- 하지만 집합연산자는 여러개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용한다. 즉, 2개이상의 질의 결과를 하나의 결과로 만들어 준다.
- 제약조건 : SELECT절의 칼럼 수가 동일하고, SELECT절의 도잉ㄹ 위치에 존재하는 칼럼의 데이터 타입이 상호 호환 가능(동일한 데이터 타입일 필요는 없다. )
집합 연산자 종류
| 집합 연산자 | 연산자 의미 |
|---|---|
| UNION | 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든중복된 행은 하나의 행으로 만든다. (합집합) |
| UNION ALL | 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 질의 결과가 상호 배타적 (Exclusive)일 때 많이 사용한다. |
| INTERSECT | 여러 개의 SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다. (교집합) |
| EXCEPT(MINUS) | 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (차집합) |
UNION vs UNION ALL
- 같은 결과를 얻을수 있다면, 데이터 중복을 검증하기 위한 비용이 발생하는 UNION보다 더 효율적이다.
- UNION ALL은 각각의 질의 결과를 단순히 결합시켜줄 뿐 중복된 결과를 제외시키지 않는다.
과제 풀이 : 7주차 집합연산자 과제
7-1 : EMP 테이블에서 UNION 연산을 실행하는 한글 질의문과 SQL문을 작성하라. [1점]
한글 질의문 : 직원중 역할이 MANAGER인 직원들의 집합과 ANALYST인 직원들의 집합의 합집합.
SQL문
SELECT EMPNO 사원번호, ENAME 이름, JOB 직업, SAL 월급, MGR
FROM EMP
WHERE JOB = 'MANAGER'
UNION
SELECT EMPNO 사원번호, ENAME 이름, JOB 직업, SAL 월급, MGR
FROM EMP
WHERE JOB = 'ANALYST';
7-2 : EMP 테이블에서 MINUS 연산을 실행하는 한글 질의문과 SQL문을 작성하라. [1점]
한글 질의문 : 직원중 월급이 2000이상인 직원들의 집합에서 역할이 ‘PRESIDENT’가 아닌 선수들의 집합.
SQL문
SELECT EMPNO 사원번호, ENAME 이름, JOB 직업, HIREDATE 입사일, SAL 월급, DEPTNO 부서번호, MGR
FROM EMP
WHERE SAL >= 2000
MINUS
SELECT EMPNO 사원번호, ENAME 이름, JOB 직업, HIREDATE 입사일, SAL 월급, DEPTNO 부서번호, MGR
FROM EMP
WHERE JOB = 'PRESIDENT';