언어/SQL

SQL_집합 연산자

asu2880 2022. 6. 24. 14:24

집합 연산자

- SQL문에서 SELECT문을 통해 데이터를 조회한 결과를 하나의 집합과 같이 다룰 수 있는 집합 연산자 사용 가능

- 두개 이상의 SELECT문의 결과 값을 연결할 때 사용

 

[UNION 사용 예시]

SLECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 10
UNION
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 20;

- 10번 부서에 근무하는 사원과 20번 부서에 근무하는 사원 정보가 합쳐서 출력

- 주의할 점은 집합 연산자로 두 개의 SELECT문의 결과 값을 연결할 때 각 SELECT문이 출력하려는 열 개수와 각 열의 자료형이 순서별로 일치해야 함

 

[MINUS 사용 예시]
SELECT empno, ename, sal, deptno
FROM emp
MINUS
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 10;

- 두 select문을 minus 연산자로 묶어 주면 select문의 결과 값이 같은 데이터는 제외하고 첫 번째 select문의 결과값이 출력

 

[UNION ALL 사용 예시]

SELECT empno, ename, sal, deptno
FROM emp
UNION ALL
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 10;

- union all은 중복 데이터도 모두 출력

- union과 union all 둘 다 합집합을 의미하는 연산자이지만 결과 값이 달라지므로 사용할 때 주의

 

[INTERSECT 사용 예시]

SELECT empno, ename, sal, deptno
FROM emp
INTERSECT
SELECT empno, ename, sal, deptno
FROM emp
WHERE deptno = 10;

- intersect 연산자는 교집합을 의미하므로 두 select문의 결과 값이 같은 데이터만 출력

 

[실습]

emp 테이블을 사용하여 20번, 30번 부서에 근무하고 있는 사원 중 급여(sal)가 2000 초과인 사원을 다음 두 가지 방식의 select문을 사용하여 사원 번호, 이름, 급여, 부서 번호를 출력하는 SQL문을 작성하시오

1) 집합 연산자를 사용하지 않는 방식

SELECT empno, ename, job, sal, deptno
FROM emp
WHERE deptno IN(20, 30) 
AND sal > 2000;

 

2) 집합 연산자를 사용한 방식

SELECT empno, ename, job, sal, deptno
FROM emp
WHERE deptno = 10
AND sal > 2000
UNION
SELECT empno, ename, job, sal, deptno
FROM emp
WHERE deptno = 20
AND sal > 2000;

 

728x90
반응형

'언어 > SQL' 카테고리의 다른 글

CROSS JOIN, INNER JOIN, NATURAL JOIN, USING, ON  (0) 2022.06.14
Outer Join (LEFT, RIGHT, FULL OUTER JOIN)  (0) 2022.06.14
Equi Join, Non_Equi Join, Self Join  (0) 2022.06.14
UNION, INTERSECT, MINUS 연산자  (0) 2022.06.14
서브쿼리  (0) 2022.06.14