집합 연산
- 2개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 또 다른 방법
- 여러 개의 질의 결과를 연결하여 하나로 결합하는 방식
- 제약 조건
SELECT
절의 칼럼수 동일, 데이터 타입 상호 호환 가능

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;
ORDER BY
는 집합 연산을 적용한 최종 결과에 대한 정렬이므로 가장 마지막 줄에 1번만 기술
- 칼럼 이름은 첫 번재 SQL 문에서 사용된 이름이 사용됨
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAER WHERE TEAM_ID = 'K02' MINUS
SELECT TEAM_ID 팀코드, PLAER_NAME 이름, POSITION 포지션, BACK_NO 백넘버, HEIGHT 키
FROM PLAYER WHERE POSITION = 'MF';
-- 팀코드 | 선수명 | 포지션 | 백넘버 | 키 의 이름으로 출력
NOT EXISTS / NOT IN
MINUS
연산자는 NOT EXISTS
/ NOT IN
서브쿼리로 변경 가능
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO, HEIGHT FROM PLAYER X
WHERE X.TEAM_ID = 'K02'
AND NOT EXISTS (SELECT 1 FROM PLAYER Y WHERE Y.PLAYER_ID = X.PLYAER_ID AND POSITION = 'MF');
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO, HEIGHT FROM PLAYER
WHERE TEAM_ID = 'K02' AND PLAYER_ID NOT IN (SELECT PLAYER_ID FROM PLAYER WHERE POSITION = 'MF');
EXISTS / IN
- **
INTERSECT
**연산자는 EXISTS
/ **IN
**서브쿼리로 변경 가능
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO HEIGHT FROM PLAYER X WHERE TEAM_ID = 'K02'
AND EXISTS (SELECT 1 FROM PLAYER Y WHERE Y.PLAYER_ID = X.PLYAER_ID WHERE Y.POSITION = 'GK');
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO HEIGHT FROM PLAYER
WHERE TEAM_ID = 'K02' AND PLAYER_ID IN (SELECT PLYAER_ID FROM PLAYER WHERE POSITION = 'GK');