집합연산자
SQL에서 집합 연산자(Set Operators)는 두 개 이상의 쿼리 결과를 결합하여 하나의 결과 집합으로 표시할 때 사용됩니다.(두 테이블에 대한 집합 연산(합집합, 교집합 등)을 수행하는 연산자)
MySQL에서는 주로 UNION, UNION ALL, INTERSECT, EXCEPT(또는 MINUS) 연산자를 통해 이러한 작업을 수행할 수 있습니다.
- 특정한 기준키 없이 두 테이블의 레코드들에 대해서 합집합과 교집합 연산을 수행하므로 두 테이블의 칼럼 구성, 스키마가 동일해야 합니다.
UNION
UNION 연산자는 두 쿼리의 결과 집합을 결합하면서 중복된 데이터를 제거합니다. 결과에는 중복되지 않는 고유한 행만 표시됩니다.
UNION을 실행하면, 한쪽 테이블 내에서의 중복까지 제거가 됩니다.
SELECT column1, column2 FROM table1
UNION
SELECT column1, column2 FROM table2;
예시:
SELECT name, age FROM employees
UNION
SELECT name, age FROM contractors;
employees와 contractors 테이블에서 name, age 열을 가져와 중복 없이 합친 결과를 반환합니다.
- 주의사항:
- UNION에 참여하는 각 쿼리는 동일한 열 개수와 호환되는 데이터 타입을 가져야 합니다.
UNION ALL
UNION ALL 연산자는 두 쿼리의 결과를 결합하지만, 중복된 데이터를 제거하지 않습니다. 모든 행이 그대로 포함되므로 성능 면에서 UNION보다 빠르게 실행될 수 있습니다.
SELECT column1, column2 FROM table1
UNION ALL
SELECT column1, column2 FROM table2;
예시:
SELECT name, age FROM employees
UNION ALL
SELECT name, age FROM contractors;
employees와 contractors 테이블에서 name, age 열을 모두 가져와 중복을 포함한 결과를 반환합니다.
INTERSECT
MySQL은 기본적으로 INTERSECT 연산자를 지원하지 않지만, 두 쿼리의 교집합을 구하기 위해 INNER JOIN 또는 IN 서브쿼리를 사용하여 비슷한 기능을 구현할 수 있습니다.
예시 (INNER JOIN):
SELECT column1, column2
FROM table1
INNER JOIN table2 ON table1.column1 = table2.column1 AND table1.column2 = table2.column2;
예시 (IN 서브쿼리):
SELECT column1, column2
FROM table1
WHERE (column1, column2) IN (
SELECT column1, column2 FROM table2
);
두 방법 모두 table1과 table2의 공통된 행을 가져옵니다.
EXCEPT (또는 MINUS)
MySQL도 EXCEPT 또는 MINUS 연산자를 지원하지 않지만, 이를 구현하기 위해 LEFT JOIN과 WHERE 절을 조합하여 비슷한 결과를 얻을 수 있습니다.
예시 (LEFT JOIN + WHERE IS NULL):
SELECT column1, column2
FROM table1
LEFT JOIN table2 ON table1.column1 = table2.column1 AND table1.column2 = table2.column2
WHERE table2.column1 IS NULL;
table1에는 있지만 table2에는 없는 행을 가져옵니다.
예시 (NOT IN 서브쿼리):
SELECT column1, column2
FROM table1
WHERE (column1, column2) NOT IN (
SELECT column1, column2 FROM table2
);
table2에는 없는 table1의 데이터를 반환합니다.
요약 ✍️
- UNION: 두 쿼리 결과를 합치고 중복을 제거.
- UNION ALL: 두 쿼리 결과를 합치고 중복을 제거하지 않음.
- INTERSECT: 두 쿼리 결과의 공통된 데이터를 반환 (MySQL에서는 INNER JOIN이나 IN 서브쿼리로 구현).
- EXCEPT/MINUS: 첫 번째 쿼리 결과에서 두 번째 쿼리 결과를 제외한 데이터를 반환 (MySQL에서는 LEFT JOIN과 WHERE IS NULL 또는 NOT IN 서브쿼리로 구현).
집합 연산자는 여러 쿼리 결과를 한 번에 처리해야 할 때 특히 유용합니다. MySQL에서 지원하지 않는 INTERSECT와 EXCEPT는 JOIN과 서브쿼리를 통해 구현할 수 있습니다.
SQL 집합 연산자는 여러 쿼리의 결과를 하나로 합쳐 데이터 분석에 활용할 때 매우 유용한 도구입니다. 특히 MySQL에서는 INTERSECT와 EXCEPT를 지원하지 않지만 JOIN과 서브쿼리로 유사한 기능을 구현할 수 있어, 다양한 상황에서 유연하게 적용할 수 있습니다. 이러한 연산자를 잘 활용하면 SQL 쿼리 작성의 폭을 넓히고 데이터 분석의 효율성을 높일 수 있습니다.
'프로그래밍 언어 > SQL' 카테고리의 다른 글
[SQL 개념 정리 12] Top N 쿼리 (0) | 2024.11.15 |
---|---|
[SQL 개념 정리 11] 그룹함수 (0) | 2024.11.15 |
[SQL 개념 정리 9] 서브쿼리 (3) | 2024.11.15 |
[SQL 개념 정리 8] CTE (WITH 문) (0) | 2024.11.14 |
[SQL 개념 정리 7] IF/IFNULL 함수와 CASE 함수 (1) | 2024.11.13 |
데이터 분석을 공부하고 카페를 열심히 돌아다니는 이야기
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!