티스토리 뷰
반응형
🔗 MySQL SET 연산자 정리 (UNION, INTERSECT, MINUS)
주요 키워드: MySQL, SET OPERATOR, UNION, INTERSECT, MINUS, SQL 집합 연산
🧭 개요
SET 연산자
는 두 개 이상의 SELECT 결과를 하나로 결합할 때 사용됩니다.
모든 SELECT 쿼리는 컬럼 개수와 순서, 타입이 동일해야 합니다.
1️⃣ UNION
- 두 SELECT 쿼리 결과를 합치되 중복된 레코드는 제거합니다.
SELECT
menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION
SELECT
menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
-- category_code가 10이거나, menu_price < 9000인 데이터의 중복 없는 합집합
2️⃣ UNION ALL
- 두 SELECT 쿼리 결과를 중복 제거 없이 모두 반환합니다.
SELECT
menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE category_code = 10
UNION ALL
SELECT
menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE menu_price < 9000;
-- 중복도 포함하여 모든 행을 결합
3️⃣ INTERSECT (대체 구현)
- 공통된 레코드만 반환합니다.
- MySQL은
INTERSECT
키워드를 지원하지 않지만INNER JOIN
또는IN
으로 대체할 수 있습니다.
✅ INNER JOIN 방식
SELECT
a.menu_code, a.menu_name, a.menu_price, a.category_code, a.orderable_status
FROM tbl_menu a
INNER JOIN (
SELECT menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE menu_price < 9000
) b ON a.menu_code = b.menu_code
WHERE a.category_code = 10;
-- category_code = 10 이면서 price < 9000인 교집합
✅ IN 연산자 방식
SELECT
menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE category_code = 10
AND menu_code IN (
SELECT menu_code
FROM tbl_menu
WHERE menu_price < 9000
);
-- 동일한 조건을 IN 서브쿼리로 구현
4️⃣ MINUS (대체 구현)
- 첫 번째 SELECT 결과에서 두 번째 SELECT 결과를 제외한 결과만 반환합니다.
- MySQL은
MINUS
키워드를 지원하지 않지만LEFT JOIN
+IS NULL
로 구현 가능합니다.
SELECT
a.menu_code, a.menu_name, a.menu_price, a.category_code, a.orderable_status
FROM tbl_menu a
LEFT JOIN (
SELECT menu_code, menu_name, menu_price, category_code, orderable_status
FROM tbl_menu
WHERE menu_price < 9000
) b ON a.menu_code = b.menu_code
WHERE a.category_code = 10
AND b.menu_code IS NULL;
-- category_code = 10 이면서 price < 9000 조건을 만족하지 않는 레코드 (차집합)
🔍 요약
연산자 | 기능 | MySQL 지원 여부 | 대체 방법 |
---|---|---|---|
UNION | 합집합 (중복 제거) | ✅ 지원 | - |
UNION ALL | 합집합 (중복 포함) | ✅ 지원 | - |
INTERSECT | 교집합 | ❌ 미지원 | INNER JOIN , IN |
MINUS | 차집합 | ❌ 미지원 | LEFT JOIN + IS NULL |
📎 참고 자료
'Database' 카테고리의 다른 글
[Database] JOIN (0) | 2025.05.18 |
---|---|
[Database] MySQL 내장 함수 (0) | 2025.05.18 |
[Database] data types (0) | 2025.05.18 |
[Database] DML (0) | 2025.05.18 |
[Database] GROUPING (0) | 2025.05.18 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- sql 조작문
- api 크롤링
- Python
- 카테고리별 합계
- 다중 열 distinct
- 파이썬
- 파이썬 크롤러
- google i/o 2025
- SQL
- MySQL
- 고유 값
- 행 제한
- mysql 분석 쿼리
- 조건문
- database
- 중첩 쿼리
- requests 라이브러리
- 데이터 조회 최적화
- 회고록
- sql 쿼리 합치기
- 집합 연산
- mysql 실습
- select 결과 제어
- sql 고급
- sql 다중 테이블
- 파생 테이블
- 데이터베이스
- sql 그룹화
- sql 쿼리 최적화
- replace
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함