[MySQL] UNION

szlee·2024년 10월 20일
0

MySQL

목록 보기
5/16

MySQL에서 UNION과 UNION ALL은 두 개 이상의 SELECT 쿼리 결과를 결합할 때 사용됩니다. 두 가지의 중요한 차이점은 중복된 행을 어떻게 처리하는가에 있습니다.

UNION

UNION은 중복된 행을 제거한 후에 결과를 반환합니다.
중복된 데이터가 여러 번 발생할 경우, 한 번만 출력됩니다.
중복을 제거하기 위해 추가적인 연산(정렬 및 비교)이 필요하기 때문에 UNION은 UNION ALL보다 상대적으로 성능이 느릴 수 있습니다.

예시


SELECT id, name FROM employees
UNION
SELECT id, name FROM managers;

두 테이블에서 중복된 (id, name) 값을 하나만 출력합니다.

특징
UNION은 중복된 행을 제거하는 기본 동작을 합니다.
결과를 정렬하여 중복을 제거하므로, UNION은 약간의 성능 비용이 발생할 수 있습니다.

UNION ALL

UNION ALL은 중복된 행을 제거하지 않고, 모든 행을 그대로 반환합니다.
중복 여부를 체크하지 않기 때문에, UNION ALL은 UNION보다 성능이 더 빠를 수 있습니다.


SELECT id, name FROM employees
UNION ALL
SELECT id, name FROM managers;

두 테이블에서 중복된 (id, name) 값이 있더라도 모두 출력합니다.

특징
중복을 제거하지 않고 모든 결과를 출력합니다.
추가적인 중복 제거 작업이 없기 때문에, UNION ALL은 UNION보다 더 효율적이고 빠릅니다.

차이점 정리

기능UNIONUNION ALL
중복 제거중복된 행을 제거함중복된 행을 제거하지 않음
성능중복 제거 과정 때문에 더 느림중복 제거 과정이 없어서 더 빠름
사용 예중복된 데이터를 제거하고 싶을 때중복된 데이터를 포함해야 할 때

언제 UNION과 UNION ALL을 사용할까?

UNION: 중복된 데이터가 의미 없고, 중복을 제거하고 싶은 경우 사용합니다.
예: 두 테이블에서 동일한 직원 목록을 병합하고 중복된 직원은 한 번만 출력하고 싶을 때.

UNION ALL: 중복된 데이터도 의미가 있을 때나 중복 여부를 따지지 않고 빠르게 데이터를 결합하고자 할 때 사용합니다.
예: 두 테이블의 모든 행을 그대로 결합하고 중복이 허용될 때.

이를 통해 두 개 이상의 테이블의 데이터를 합칠 때 필요한 도구로, 각각의 상황에 맞게 사용할 수 있습니다.

컬럼 맞추기

MySQL에서 UNION 또는 UNION ALL을 사용할 때, 결합하려는 테이블이나 SELECT 쿼리 간에 없는 컬럼이 있을 경우, 컬럼의 개수를 맞춰야 합니다.
이를 해결하기 위해 없는 컬럼에 대해 NULL을 명시적으로 추가하여 컬럼 수와 순서를 동일하게 맞출 수 있습니다.

문제 상황
테이블 A에는 a, b, c 컬럼이 있고, 테이블 B에는 b, c 컬럼만 있다고 가정해보겠습니다. 이때 UNION을 사용하여 두 테이블을 결합하려고 할 때, A 테이블에만 있는 a 컬럼 때문에 오류가 발생할 수 있습니다.

해결 방법
테이블 B에서 없는 컬럼(a)에 대해 NULL 값을 넣어서 컬럼 수를 맞춰주면 UNION이나 UNION ALL을 사용할 수 있습니다.

예시: UNION을 사용할 경우


SELECT a, b, c
FROM A
UNION
SELECT NULL AS a, b, c
FROM B;

예시: UNION ALL을 사용할 경우


SELECT a, b, c
FROM A
UNION ALL
SELECT NULL AS a, b, c
FROM B;

설명:
첫 번째 SELECT: A 테이블의 a, b, c 컬럼을 그대로 선택합니다.
두 번째 SELECT: B 테이블에는 a 컬럼이 없으므로, NULL AS a를 사용하여 a 컬럼을 대신합니다. 그 외에 B 테이블의 b, c 컬럼을 선택합니다.
이 방식은 UNION이든 UNION ALL이든 동일하게 사용할 수 있으며, 없는 컬럼을 NULL로 채워서 오류 없이 결과를 결합할 수 있습니다.

요약:
UNION 또는 UNION ALL을 사용할 때, 모든 SELECT 쿼리의 컬럼 수가 동일해야 합니다.
없는 컬럼에 대해서는 NULL을 명시적으로 추가하여 컬럼 수를 맞춥니다.
각 SELECT 쿼리의 컬럼 순서도 동일하게 맞춰야 합니다.

profile
🌱

0개의 댓글