hanker

SQL - 두 개 이상의 쿼리결과를 하나로 합치는 집합 연산자 union / union all / intersect / except (MySQL/postgreSQL/MSSQL/Oracle) 본문

DATABASE/SQL

SQL - 두 개 이상의 쿼리결과를 하나로 합치는 집합 연산자 union / union all / intersect / except (MySQL/postgreSQL/MSSQL/Oracle)

hanker 2024. 11. 16. 00:32
반응형

SQL 집합연산자는 두 개 이상의 쿼리 결과를 하나로 합치거나 교집합, 차집합을 계산하는데 사용한다.

 

각 DBMS (MySQL / PostgreSQL/ MSSQL/ Oracle) 에서 사용 가능한 주요 집합 연산자들인 UNION / UNION ALL / INTERSECT / EXCEPT 에 대해 알아보자

 

 

UNION

 

두 개 이상의 쿼리 결과를 합치되, 중복된 행은 제거한다.

SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2

- 중복된 결과를 제거하기 떄문에, 성능이 다소 떨어질 수 있다.

- 모든 SELECT 문의 열 개수와 데이터 타입이 동일해야 한다.

 

지원 : MySQL, PostgreSQL, MSSQL, Oracle

 

 

UNION ALL

 

두 개 이상의 쿼리 결과를 합치되, 중복된 행도 포함한다.

SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2

- 중복된 데이터를 필터링하지 않기 때문에, UNION보다 성능이 좋다.

- 모든 SELECT 문의 열 개수와 데이터 타입이 동일해야 한다.

 

지원 : MySQL, PostgreSQL, MSSQL, Oracle

 

 

반응형

 

 

INTERSECT

 

두 쿼리의 결과 중 공통된 행만 반환한다.

SELECT column1, column2 FROM table1
INTERSECT
SELECT column1, column2 FROM table2

- 두 쿼리 결과의 교집합을 계산한다.

- 모든 SELECT 문의 열 개수와 데이터 타입이 동일해야 한다.

 

지원 : PostgreSQL, MSSQL, Oracle

MySQL은 지원하지 않지만, INNER JOIN 을 사용하여 동일한 결과를 얻을 수 있다.

 

 

EXCEPT (MINUS)

 

첫 번째 쿼리의 결과에서 두 번째 쿼리의 결과를 뺀 나머지 행을 반환한다.

SELECT column1, column2 FROM table1
EXCEPT
SELECT column1, column2 FROM table2

# or

SELECT column1, column2 FROM table1
MINUS
SELECT column1, column2 FROM table

- 차집합을 계산한다.

- 모든 SELECT 문의 열 개수와 데이터 타입이 동일해야 한다.

 

지원 : PostgreSQL, MSSQL: EXCEPT 사용 가능 Oracle MINUS 사용 가능

MySQL 기본적으로 EXCEPT를 지원하지 않지만, 서브쿼리와 NOT IN 등을 사용하여 동일한 결과를 얻을 수 있다.

 

 

 

요약
  • UNION: 중복 제거 후 두 결과 합침
  • UNION ALL: 중복 포함하여 두 결과 합침, 성능 향상
  • INTERSECT: 두 결과의 교집합을 반환
  • EXCEPT / MINUS: 첫 번째 결과에서 두 번째 결과를 뺀 차집합을 반환

 

 

끝.

반응형