목차

1. 집합 연산자(SET OPERATOR)의 종류
2. 합집합(UNION, UNION ALL)
3. 교집합(INTERSECT)
4. 차집합(EXCEPT)

h1.1. 집합 연산자(SET OPERATOR)의 종류]

  • 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할수 있다.
  • 집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 준다.
  • SELECT 절의 칼럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환 가능해야 한다.
  • (반드시 동일한 데이터 타입일 필요는 없음) 그렇지 않으면 데이터베이스가 오류를 반환한다. ??

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


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

TEAM_IDPLAYER_NAMEBACK_NO
A박지성01
A차범근02
A손흥민03
B박지성04
B기성용05

h3.2. 합집합(UNION, UNION ALL)

가) UNION

SELECT PLAYER_NAME 선수명, BACK_NO 백넘버 FROM PLAYER WHERE TEAM_ID = 'K01' 
UNION 
SELECT PLAYER_NAME 선수명, BACK_NO 백넘버 FROM PLAYER WHERE TEAM_ID = 'K01' 
ORDER BY 1; 

나) UNION ALL

SELECT PLAYER_NAME 선수명, BACK_NO 백넘버 FROM PLAYER WHERE TEAM_ID = 'K01' 
UNION ALL
SELECT PLAYER_NAME 선수명, BACK_NO 백넘버 FROM PLAYER WHERE TEAM_ID = 'K01' 
ORDER BY 1; 

h3.3. 교집합(INTERSECT)

가) INTERSECT

WITH T1 AS (
SELECT 'a' a FROM DUAL UNION ALL 
SELECT 'b' a FROM DUAL UNION ALL 
SELECT 'c' a FROM DUAL 
), T2 AS (
SELECT 'a' a FROM DUAL UNION ALL 
SELECT 'b' a FROM DUAL 
)

SELECT a FROM T1
INTERSECT
SELECT a FROM T2

h1.4. 차집합(EXCEPT)

가) EXCEPT

WITH T1 AS (
SELECT 'a' a FROM DUAL UNION ALL 
SELECT 'b' a FROM DUAL UNION ALL 
SELECT 'c' a FROM DUAL 
), T2 AS (
SELECT 'a' a FROM DUAL UNION ALL 
SELECT 'b' a FROM DUAL 
)

SELECT a FROM T1
MINUS -- ANSI SQL은 EXCEP
SELECT a FROM T2

문서에 대하여