- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(Set Operator)를 사용하는 방법이다.
- 종류는 아래와 같다.
집합 연산자 | 연산자의 의미 | |
UNION | 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다. | |
UNION ALL | 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 개의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일한다. (결과의 정렬 순서에는 차이가 있을 수 있음) | |
INTERSECT | 여러 개의SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다. | |
EXCEPT | 앞의 SQL문의 결과에서 뒤의 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함) |

[ UNION ]
SELECT TEAM_ID 팀코드
, PLAYER_NAME 선수명
, POSITION 포지션
, BACK_NO 백넘버
, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02'
UNION
SELECT TEAM_ID 팀코드
, PLAYER_NAME 선수명
, POSITION 포지션
, BACK_NO 백넘버
, HEIGHT 키
FROM PLAYER
WHERE POSITION = 'GK';
이 예제는 같은 테이블에서 다른 포지션의 두 결과 값을 그대로 중복성을 없애고 합친 모습이다.
※ 두개의 테이블을 UNION 하기위한 조건으로 컬럼의 갯수와, 타입이 같아야합니다.
[ UNION ALL ]
- 중복 허용
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02'
UNION ALL
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE POSITION = 'GK';
※ 두개의 테이블을 UNION 하기위한 조건으로 컬럼의 갯수와, 타입이 같아야합니다.
[ INTERSECTIN ]
- 교집합만 출력. 중복 합
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02'
INTERSECT
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE POSITION = 'GK'
ORDER BY 1, 2, 3, 4, 5;
[ MINUS, EXCEPT ]
- 차집합 출력
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02'
MINUS
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE POSITION = 'MF'
ORDER BY 1, 2, 3, 4, 5;
'DataBase' 카테고리의 다른 글
서브 쿼리 종류 (0) | 2023.03.22 |
---|---|
Sub Query, 중첩 서브쿼리 (0) | 2023.03.22 |
[SQL] ORDER BY (0) | 2023.03.21 |
[SQL] 집계함수, GROUP BY, HAVING (0) | 2023.03.21 |
[SQL] JOIN ON, WHERE 차이 (0) | 2023.03.21 |