집합 연산자

HELLO_DINO·2022년 11월 1일
0

SQL전문가가이드

목록 보기
20/28

집합 연산자

두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 또 다른 방법이다.

조인은 조인 조건을 통해 여러 테이블의 행과 행을 서로 연결한다.
집합 연산자는 여러 개의 결과 집합 간의 연산을 통해 결합하는 방식을 사용한다.

즉, 집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 준다.

집합 연산자는 서로 다른 테이블에서 유사한 형태의 결과를 반환하는 것을 하나의 결과로 합치고자 할 때, 동일 테이블에서 서로 다른 질의를 수행해 결과를 합치고자 할 때, 이외에는 튜닝 관점에서 실행계획을 분리하고자 하는 목적으로도 사용할 수 있다.

집합 연산자는 다음 조건을 만족해야 한다.

  • SELECT 절의 칼럼 수가 동일
  • SELECT 절의 동일 위치에 존재하는 칼럼의 데이터 타입이 동일해야 한다.

집합 연산자의 종류

  • UNION : 개별 SQL 문의 결과에 대해 합집합 연산을 수행, 중복은 하나의 행으로 표현
  • UNION ALL : 개별 SQL 문의 결과에 대해 합집한 연산 수행, 중복 포함 다 출력
  • INTERSECT : 개별 SQL 문의 결과에 대해 교집합을 수행, 중복은 하나의 행으로 표현
  • EXCEPT : 개별 SQL 문의 결과에 대해 차집합을 수행, 중복은 하나의 행으로 표현(Oralce : MINUS 연산자)

SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '1'
UNION
SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '2'
ORDER BY 1;

SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '1'
UNION ALL
SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '2'
ORDER BY 1;

SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '1'
INTERSECT
SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '2'
ORDER BY 1;

SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '1'
MINUS
SELECT FNAME AS 선수명, POSITION AS 포지션
FROM PLAYERS
WHERE TEAM_ID = '2'
ORDER BY 1;

0개의 댓글