조인을 사용하지 않고 연관된 데이터를 조회하는 방법
집합 연산자는 여러 질의의 결과를 연결하여 하나로 결합하는 방식 사용
UNION: 합집합
UNION ALL: 합집합이면서 중복된 행도 그대로 표시
INTERSECT: 교집합
EXCEPT: 차집합(앞-뒤)
INTERSECT
// PLAYER 중 소속이 K02인 선수들이면서 골키퍼인 선수들의 집합의 교집합
// INTERSECT 사용
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;
// EXISTS를 사용
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO, HEIGHT
FROM PLAYER X
WHERE X.TEAM_ID = 'K02'
AND EXISTS (SELECT 1
FROM PLAYER Y
WHERE Y.PLAYER_ID = X.PLAYER_ID
AND Y.POSITION = 'GK')
ORDER BY 1, 2, 3, 4, 5;
// IN 서브쿼리를 사용
SELECT TEAM_ID, PLAYER_NAME, POSITION, BACK_NO, HEIGHT
FROM PLAYER
WHERE TEAM_ID = 'K02'
AND PLAYER_ID IN (SELECT PLAYER_ID
FROM PLAYER
WHERE POSITION = 'GK')
ORDER BY 1, 2, 3, 4, 5;
[82번] UNION ALL
SELECT ENAME AAA, JOB AAB
...
UNION ALL
SELECT ENAME BBA, JOB BBB
...
UNION ALL을 사용하는 경우 컬럼은 첫번째 SQL 모듈 기준으로 표시된다.
따라서 AAA와 AAB를 사용한다.
[83번] UNION ALL과 UNION
...
UNION ALL // 위의 결과를 모두 더한다
...
UNION // 위의 결과의 합집합을 실행한다
...
UNION을 실행하는 과정에서 UNION ALL에서 만들어졌던 중복이 모두 제거된다.