1 minute read

  • 기존의 조인에서는 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';