Skip to content

SQL 집합 연산자 #
Find similar titles

Structured data

Category
Database

집합 연산자 #

두 개 이상의 테이블에서 조인을 사용하지 않고 연관된 데이터를 조회하는 방법 중에 또 다른 방법이 있는데 그 방법이 바로 집합 연산자(Set Operator)를 사용하는 방법이다. 집합 연산자는 여러 개의 질의의 결과를 연결하여 하나로 결합하는 방식을 사용한다.

  • 집합 연산자를 사용하기 위해서:
    1) 두 집합의 SELECT 절에 오는 컬럼의 동일한 수
    2) 두 집합의 SELECT 절에 오는 컬럼이 동일한 데이터형

Image

(출처) essentialsql.com/sql-set-operations-sql-server

집합 연산자의 종류 #

  • UNION (합집합): 여러 개의 SQL 문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다.
  • UNION ALL (합집합): 여러 개의 SQL 문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 개의 결과가 상호 배타적인(Exclusive)일 때 많이 사용한다. 개별 SQL 문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일한다. (결과의 정렬 순서에는 차이가 있을 수 있음)
  • INTERSECT (교집합): 여러 개의 SQL 문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다.
  • EXCEPT (차집합): 앞의 SQL 문의 결과에서 뒤의 SQL 문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함)

Image

(출처) https://www.softwaretestingclass.com/sql-union/

예제 #

SELECT 열 이름 1, 열 이름 2, 열 이름 3, …
FROM 테이블 이름
집합 연산자 ----UNION, UNION ALL, INTERSET, MINUS
SELECT 열 이름 1, 열 이름 2, 열 이름 3, …
FROM 테이블 이름
[ORDER BY 열 이름 [ASC or DESC]]

-- UNION
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  TEAM_ID = 'K02'
UNION
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  POSITION = 'GK';

-- UNION ALL
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  TEAM_ID = 'K02'
UNION  ALL
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  POSITION = 'GK';

-- INTERSECTIN
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  TEAM_ID = 'K02'
INTERSECT
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  POSITION = 'GK'
ORDER  BY 1, 2, 3, 4, 5;

-- MINUS
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  TEAM_ID = 'K02'
MINUS
SELECT TEAM_ID 팀코드, PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버
FROM   PLAYER
WHERE  POSITION = 'MF'
ORDER  BY 1, 2, 3, 4, 5;

참고문헌 #

  • 한국데이터베이스진흥원,『SQL 전문가 가이드』, 서울:한국데이터베이스진흥원, 2013
0.0.1_20210630_7_v33