UNION과 UNION ALL 비교하기
중복 제거와 성능의 차이, 그리고 일반적으로 UNION ALL이 의도된 방식인 이유를 알아봅니다.
UNION과 UNION ALL 비교하기은(는) CoddyKit의 무료 SQL Interview Prep 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 SQL Interview Prep 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
면접관이 UNION에 대해 묻는 이유
집합 연산은 한 결과 집합을 다른 결과 집합 위에 세로로 쌓습니다. UNION과 UNION ALL은 면접관이 가장 먼저 제시하는 집합 연산자입니다. 두 연산자의 차이는 한 줄로 답할 수 있으면서 비용을 이해하는지 보여 주기 때문입니다.
질문은 거의 항상 다음과 같은 형태입니다. "UNION과 UNION ALL의 차이는 무엇이며, 어느 것을 사용해야 합니까?" 좋은 답변은 중복 제거, 정렬, 성능을 한 번에 언급합니다.
UNION의 동작
UNION은 두 쿼리의 행을 하나의 결과 집합으로 합친 다음 중복 행을 제거합니다. 모든 열이 일치할 때만 두 행을 중복으로 간주합니다.
중복을 제거하려면 엔진이 결합된 모든 행을 정렬하거나 해시해야 하므로 실제 처리 비용이 발생합니다. UNION은 수학적 의미의 집합처럼 중복을 허용하지 않습니다.
SELECT city FROM customers
UNION
SELECT city FROM suppliers;UNION ALL의 동작
UNION ALL은 두 결과 집합을 연결하고 중복을 포함한 모든 행을 유지합니다. 중복 제거를 하지 않으므로 그 목적을 위한 정렬이나 해시도 수행하지 않습니다.
중복 제거 단계를 건너뛰기 때문에 UNION ALL은 거의 항상 더 빠릅니다. 행이 서로 겹칠 수 없다는 것을 알고 있거나 중복이 실제로 필요한 경우 올바른 선택입니다.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers;성능 차이
면접에서 핵심적으로 말할 내용은 다음과 같습니다. UNION ALL이 더 저렴합니다. 중복을 제거하지 않기 때문입니다. UNION은 중복을 제거하기 위해 결합된 모든 행을 서로 비교해야 합니다.
UNION= UNION ALL + 암시적인 DISTINCT 단계- 큰 결과 집합에서는 이 DISTINCT가 쿼리 비용의 대부분을 차지할 수 있습니다.
중복 제거가 필요하지 않다면 UNION을 선택하는 것은 CPU와 메모리를 낭비합니다.
중복이 있는 예제
두 쿼리 모두 'Paris'라는 행을 반환할 수 있다고 가정해 보십시오. UNION을 사용하면 Paris 하나를 얻습니다. UNION ALL을 사용하면 Paris를 두 번 얻습니다.
면접관은 행 수를 예측하라고 묻는 것을 좋아합니다. 먼저 원시 연결 결과를 떠올린 다음, 연산자가 중복을 제거하는지 확인하십시오.
-- customers.city: Paris, Lyon
-- suppliers.city: Paris, Nice
-- UNION -> Paris, Lyon, Nice (3 rows)
-- UNION ALL -> Paris, Lyon, Paris, Nice (4 rows)중복은 모든 열을 기준으로 정의됩니다
흔히 빠지는 함정이 있습니다. 선택한 모든 열이 같을 때만 두 행을 중복으로 간주합니다. 서로 다른 열 하나를 추가하면 행은 더 이상 중복이 아니므로 UNION은 두 행을 모두 유지합니다.
따라서 같은 테이블을 대상으로 하더라도 UNION에서 SELECT id, city가 SELECT city보다 더 많은 행을 반환하는 경우가 많습니다.
SELECT id, city FROM customers
UNION
SELECT id, city FROM suppliers;
-- ids differ -> few or no duplicates removed결합된 결과 정렬하기
개별 분기마다 ORDER BY를 넣을 수는 없습니다. 전체 결합 결과에 적용되며 맨 마지막에 한 번만 나타나야 합니다.
면접관은 ORDER BY를 어디에 넣는지 물을 수 있습니다. 답은 마지막 쿼리 뒤에 단 하나의 ORDER BY를 넣고, 이름이나 위치로 출력 열을 참조하는 것입니다.
SELECT city FROM customers
UNION ALL
SELECT city FROM suppliers
ORDER BY city;열 이름은 첫 번째 쿼리에서 결정됩니다
최종 ORDER BY에서 열을 참조할 때는 첫 번째 SELECT의 이름(또는 별칭)을 사용하세요. 두 번째 쿼리의 열 이름은 출력 레이블에 반영되지 않습니다.
두 분기에서 열 이름을 서로 다르게 지정할 때 중요합니다. 첫 번째 분기에 별칭을 지정하여 출력 헤더를 제어하세요.
SELECT city AS location FROM customers
UNION ALL
SELECT town FROM suppliers
ORDER BY location;UNION을 선택해야 하는 경우
겹치는 행이 실제로 발생할 수 있고 중복 없는 각 행을 한 번씩만 원할 때만 UNION을 사용하세요. 예를 들어 같은 사람이 두 목록에 모두 포함될 수 있는 연락처 목록 두 개를 합치거나, 여러 원본에서 중복 없는 값 목록을 만들 때 사용합니다.
서로 겹치지 않는 원본임을 보장할 수 있다면 UNION ALL이 같은 결과를 더 빠르게 제공합니다.
SELECT email FROM web_signups
UNION
SELECT email FROM store_signups;
-- one row per distinct email across bothUNION ALL을 선택해야 하는 경우
중복이 발생할 수 없거나, 중복에 의미가 있거나, 이후에 집계할 예정이라면 UNION ALL을 사용하세요. 대표적인 예는 서로 같은 행을 포함하지 않는 월별 파티션 테이블을 쌓는 것입니다.
면접 팁: UNION ALL이 기본값이며, 중복 제거가 실제로 필요할 때만 UNION으로 전환한다고 말하세요.
SELECT * FROM sales_2023
UNION ALL
SELECT * FROM sales_2024;종합하기
잘 다듬은 면접 답변은 다음과 같습니다. "UNION은 중복 행을 제거하므로 정렬 또는 해시 작업이 필요하고, UNION ALL은 모든 행을 유지하므로 더 빠릅니다. 두 연산 모두 열 개수가 일치하고 형식이 호환되어야 하며, ORDER BY는 마지막에 한 번만 작성합니다. 중복 제거가 필요하지 않다면 UNION ALL을 기본값으로 사용합니다."
이 한 문장만으로도 정확성과 성능에 대한 이해를 함께 보여 줄 수 있습니다.
빠른 확인
UNION과 UNION ALL의 차이를 얼마나 이해했는지 확인해 보세요.
복습
핵심 내용:
UNION= 결합 + 중복 행 제거(암시적 DISTINCT, 추가 비용).UNION ALL= 모든 행을 결합하고 유지, 더 빠르며 합리적인 기본값.- 중복으로 판단하려면 모든 열이 일치해야 합니다.
ORDER BY는 마지막에 한 번만 작성하며 첫 번째 쿼리의 열 이름을 사용합니다.
UNION ALL을 기본값으로 사용하고, 중복 제거가 정말 필요할 때만 UNION으로 전환하세요.
자주 묻는 질문
“UNION과 UNION ALL 비교하기” 강의는 무료인가요?
네 — “UNION과 UNION ALL 비교하기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 SQL Interview Prep 강의 전체를 잠금 해제할 수 있습니다. SQL Interview Prep 강의에는 총 4개의 강의가 포함되어 있습니다.
“UNION과 UNION ALL 비교하기”에서 뭘 배우나요?
중복 제거와 성능의 차이, 그리고 일반적으로 UNION ALL이 의도된 방식인 이유를 알아봅니다. 브라우저에서 직접 실행하는 실습 코드로 SQL Interview Prep을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
SQL Interview Prep을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 SQL Interview Prep은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“UNION과 UNION ALL 비교하기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 SQL Interview Prep 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 SQL Interview Prep 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- UNION과 UNION ALL 비교하기
- 열 개수와 형식 호환성
- 비교를 위한 INTERSECT와 EXCEPT
- JOIN으로 집합 연산 흉내 내기