본문 바로가기
Computer Science/SQL

집합 연산자 개념과 종류

by sohyunwriter 2021. 1. 20.

집합 연산자(Set Operator) 개념과 종류

 

두 개 이상의 테이블에서 JOIN을 사용하지 않고 연관된 데이터를 조회하는 다른 방법이 있다.

바로 집합 연산자(Set Operator)를 사용하는 방법이다.

 

1. 정의

집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 준다.

 

 

2. 언제 사용하냐?

-서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때

-동일 테이블에서 서로 다른 질의를 수행해 결과를 합치고자 할 때

-튜닝 관점에서 실행계획을 분리하고자 할 때

 

 

3. 집합 연산자를 사용하기 위한 조건?

-SELECT 절의 column 수가 동일하고 SELECT 절의 동일 위치에 존재하는 column의 datatype이 동일해야 한다. 그렇지 않으면 데이터베이스가 오류를 반환한다.

 

 

4. 집합연산자 종류

집합 연산자는 개별 SQL문의 결과 집합에 대해 합집합(UNION/UNION ALL), 교집합(INTERSECT), 차집합(EXCEPT)으로 집합간의 관계를 갖고 작업한다.

 

1) UNION : 개별 SQL문의 결과에 대해 합집합 연산을 수행한다. 단 결과에서 모든 중복된 행은 하나의 행으로 만든다.

 

2) UNION ALL : 개별 SQL문의 결과에 대해 합집합 연산을 수행하며, 중복된 행도 그대로 표시된다. 즉, 단순히 개별 SQL문의 결과를 합쳐 하나의 결과로 출력하는 것이다.

 

3) INTERSECT : 개별 SQL문의 결과에 대해 교집합 연산을 수행한다. 단, 결과에서 모든 중복된 행은 하나의 행으로 만든다.

 

4) EXCEPT : 개별 SQL 문의 결과에 대해 차집합 연산을 수행한다. 단 결과에서 모든 중복된 행은 하나의 행으로 만든다(Oracle : MINUS 연산자, SQL Server : EXCEPT 연산자 사용).

 

 

 

5. 집합 연산자를 사용한 SQL문 형태

SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명1
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식]
[HAVING 그룹조건식]
집합연산자
SELECT 칼럼명1, 칼럼명2, ...
FROM 테이블명2
[WHERE 조건식]
[GROUP BY 칼럼(Column)이나 표현식]
[HAVING 그룹조건식]
[ORDER BY 칼럼(Column)이나 표현식 [ASC 또는 DESC]];

 

*집합 연산자 연습 문제

1) 케이리크 소속 선수들 중에서 소속이 삼성블루윙즈 팀인 선수들과 전남드레곤즈 팀인 선수들에 대한 내용을 모두 보고 싶다.

= 케이리그 소속 선수 중 소속이 삼성블루윙즈 팀인 선수들의 집합과 

   케이리그 소속 선수 중 소속이 전남드레곤즈 팀인 선수들 집합의 합집합

SELECT TEAM_ID AS 팀코드, PLAYER_NAME AS 선수명, POSITION AS 포지션, BACK_NO 백넘버, HEIGHT AS 키
FROM PLAYER
WHERE TEAM_ID = 'K02'
UNION
SELECT TEAM_ID AS 팀코드, PLAYER_NAME AS 선수명, POSITION AS 포지션, BACK_NO 백넘버, HEIGHT AS 키
FROM PLAYER
WHERE TEAM_ID = 'K07';

 

2) 케이리그 소속 선수 중 소속이 삼성블루윙즈 팀인 선수들의 집합과 케이리그 소속 선수 중 포지션이 골키퍼(GK)인 선수들 집합의 합집합

 

 

 

 

Q. UNION ALL과 OUTER JOIN의 차이는?

 

A. 

UNION ALL은 행의 합집합, OUTER JOIN은 열의 합집합

-OUTER JOIN : 어떤 키가 되는 값으로 join해서 서로 다른 테이블을 연결하고 컬럼을 확장하는 것

-UNION ALL : 서로 다른 테이블의 row를 합치는 것