728x90
01. 집합 연산자(SET OPERATOR)
- 두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회할 수 있다
- 집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 준다
- SELECT 절의 칼럼 수가 동일하고 SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 상호 호환 가능해야 한다
집합 연산자 | 연산자의 의미 |
UNION | 여러 개의 SQL문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다. |
UNION ALL | 여러 개의 SQL문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시 된다. 즉, 단순히 결과만 합쳐 놓은 것이다. |
INTERSECT | 여러 개의 SQL문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다. |
EXCEPT | 앞의 SQL문의 결과에서 뒤에 SQL문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. |
SELECT 칼럼명1, 칼럼명2
FROM 테이블명1
[WHERE 조건식]
[[GROUP BY 칼럼이나 표현식 [HAVING 그룹조건식]]]
집합 연산자
SELECT 칼럼명1, 칼럼명2
FROM 테이블명2
[WHERE 조건식]
[[GROUP BY 칼럼이나 표현식 [HAVING 그룹조건식]]]
[ORDER BY 1, 2 [ASC or DESC]];
02. 합집합 (UNION, UNION ALL)
UNION
[질문]
K-리그 소속 선수들 중에서 소속이 삼성블루윙즈팀인 선수들과 전남드레곤즈팀인 선수들에 대한 내용을 모두 보고싶다.
k-리그 소속 선수 중 소속이 삼성블루윙즈 팀인 선수들의 집합과 K-리그 소속 선수중
소속이 전남드레곤즈팀인 선수들의 합집합
1.
SELECT PLAYER_NAME 선수명, BACK_NO 백넘버
FROM PLAYER WHERE TEAM_ID = 'K02'
UNION
SELECT PLAYER_NAME 선수명, BACK_NO 백넘버
FROM PLAYER WHERE TEAM_ID = 'K07'
ORDER BY 1;
2.
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO, HEIGHT
FROM PLAYER
WHERE TEAM_ID = 'K02' OR TEAM_ID = 'K07'
ORDER BY 1;
-- 1번 SQL문과 2번 SQL문은 똑같은 집합이지만 출력순서가 다르다.
-- 순서를 같게 하려면 ORDER BY절에서 임의로 순서를 조정할 수 있다.
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'
ORDER BY 1, 2, 3, 4, 5;
-- 결과를 보면 팀 K02의 GK인 사람이 중복됨을 알 수 있다.
-- UNION만 사용해서 출력할 때 행은 88개였지만 UNION ALL을 사용하면 92건으로 늘어났다.
03. 교집합 (INTERSECT)
[질문]
K-리그 선수들 중에서 소속이 삼성블루윙즈팀이면서 포지션이 골키퍼(GK)인 선수들의 정보를 보고싶다.
K-리그 소속 선수 중 소속이 삼성블루윙즈 팀인 선수들의 집합과 K-리그 소속 선수 중 포지션이 골키퍼인
선수들의 교집합
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;
04. 차집합 (EXCEPT)
[질문]
K-리그 소속 선수들 주에서 소속이 삼성블루윙즈팀이면서 포지션이 미드필더(MF)가 아닌 선수들의 정보를 보고싶다.
K-리그 소속 선수 중 소속이 삼성블루윙즈팀인 선수들의 집합과 K-리그 소속 선수 중 포지션이 미드필더인
선수들의 교집합
1.
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;
2.
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER
WHERE TEAM_ID = 'K02' AND POSITION <> 'MF'
ORDER BY 1, 2, 3, 4, 5;
728x90
'자격증 > SQLD' 카테고리의 다른 글
[SQLD] SQL 활용 - 서브쿼리(Subquery) (0) | 2023.08.31 |
---|---|
[SQLD] SQL 활용 - 계층형 질의 (0) | 2023.08.31 |
[SQLD] SQL 활용 - 표준조인 (0) | 2023.08.31 |
[SQLD] SQL 기본 - 조인 (0) | 2023.08.31 |
[SQLD] SQL 기본 - ORDER BY 절, TOP() (0) | 2023.08.31 |