본문 바로가기

DB/SQLD

SQL 활용 - 집합 연산자

반응형

집합 연산자

두 개 이상의 테이블을 조인을 쓰지 않고 연관된 데이터를 조회하는 방법.

2 개이상의 쿼리 결과를 하나의 결과로 만들어 줌.

조건 : select절의 컬럼 수가 동일하고 select절의 동일 위치에 존재하는 컬럼이 상호 호환 가능

* 반드시 동일 타입일 필요는 없음

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
1. 집합 연산자의 종류
UNION : 여러 개의 SQL문의 결과를 합집합으로 출력. (중복된 행은 하나로 만듦)
UNION ALL : 합집합으로 만들면서 중복된 행도 그대로 출력.
INTERSECT : 여러 개의 SQL문의 결과에 대한 교집합. (중복된 행은 하나로 만듦)
EXCEPT(MINUS) : 차집합 (중복된 행은 하나로 만듦)
 
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 TEAM_ID = 'K07';
// 이정도는 IN 이나 OR 로 가능
 
 
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'
ORDER BY 1,2,3,4,5;
// 팀코드가 K02 면서 포지션이 GK인 선수는 두번씩 출력될것임. UNION ALL 이 있으니까
 

SELECT 'P' 구분코드, POSITION 포지션, AVG(HEIGHT) 평균키
FROM PLAYER
GROUP BY POSITION
UNION
SELECT 'T' 구분코드, TEAM_ID 팀명, AVG(HEIGHT) 평균키
FROM PLAYER
GROUP BY TEAM_ID
ORDER BY 1;
// 그룹함수 사용해도 집합연산 가능.
// SELECT 절에 존재하지 않는 컬럼 '구분코드'를 추가 가능
 

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;
// 팀코드가 K02인 선수들에서 미드필더인 선수들을 제거. 즉, 미드필더가 아닌 K02 팀 선수를 출력
 

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;
// 교집합, 팀코드 K02이면서 포지션이 GK인 선수 출력
 
cs


반응형

'DB > SQLD' 카테고리의 다른 글

SQL 활용 - 서브 쿼리  (0) 2017.09.08
SQL 활용 - 계층형 질의  (0) 2017.09.08
SQL 활용 - 표준 조인  (0) 2017.09.05
SQL 기본 - join  (0) 2017.09.05
SQL 기본 - order by 절  (0) 2017.09.04