Computer >> 컴퓨터 >  >> 프로그래밍 >> SQL Server

SQL Server UNION ALL 연산자 완벽 정리: 문법과 실전 예제

SQL Server에서 UNION ALL 연산자는 두 개 이상의 SELECT 문에서 반환된 결과 집합을 하나로 결합할 때 사용합니다.

UNION 연산자와 달리, UNION ALL은 쿼리의 모든 행을 그대로 반환하며 중복된 행을 제거하지 않습니다. 따라서 데이터의 양이 많더라도 중복 제거 작업이 없어 상대적으로 빠른 성능을 보입니다.

단, UNION ALL에 포함되는 각 SELECT 문은 결과 집합의 열 개수가 서로 같아야 하고, 대응되는 열의 데이터 타입도 일치해야 합니다.

UNION ALL 연산자 기본 문법

SELECT bieu_thuc1, bieu_thuc2, ... bieu_thucn
FROM bang
[WHERE dieu_kien]
UNION ALL
SELECT bieu_thuc1, bieu_thuc2, ... bieu_thucn
FROM bang
[WHERE dieu_kien];

매개변수 설명

bieu_thuc1, bieu_thuc2, ... bieu_thucn
조회하고자 하는 열 또는 계산식을 의미합니다.

bang
레코드를 가져올 테이블입니다. FROM 절에는 최소한 하나의 테이블이 반드시 지정되어야 합니다.

WHERE dieu_kien
선택 사항입니다. 조회하려는 레코드가 만족해야 하는 조건을 지정합니다.

사용 시 주의사항

  1. 두 SELECT 문은 표현식(열)의 개수가 동일해야 합니다.
  2. 각 SELECT 문에서 대응되는 열은 데이터 타입이 서로 같아야 합니다.
  3. UNION ALL은 중복된 행을 제거하지 않습니다. 중복 제거가 필요하다면 UNION 연산자를 사용하세요.
  4. 중복 제거 방식이 궁금하다면 UNION 연산자 관련 문서를 함께 참고하는 것이 좋습니다.

예제 1: 단일 열 반환하기

SELECT sanpham_id
FROM sanpham
UNION ALL
SELECT sanpham_id
FROM hangtonkho;

위 예제는 sanpham 테이블과 hangtonkho 테이블 양쪽에 존재하는 모든 sanpham_id 값을 결과 집합으로 반환합니다. 두 테이블에 동일한 ID가 있더라도 중복 없이 모두 출력됩니다. 만약 중복 행을 제거하고 싶다면 UNION ALL 대신 UNION 연산자를 사용하면 됩니다.

예제 2: ORDER BY 절과 함께 사용하기

UNION ALL 연산자는 ORDER BY 절과 함께 사용하여 쿼리 결과를 정렬할 수 있습니다.

SELECT danhba_id, danhba_ten
FROM danhba
WHERE ten_trang = 'QuanTriMang.com'
UNION ALL
SELECT congty_id, congty_ten
FROM congty
WHERE ten_trang = 'TrangCuaBan.com'
ORDER BY 2;

이 예제에서 주목할 점은 두 SELECT 문의 열 이름이 서로 다르다는 것입니다(danhba_ten과 congty_ten). 이런 경우 열 이름 대신 결과 집합에서의 열 위치를 기준으로 정렬하는 것이 더 간편합니다.

위 쿼리에서 ORDER BY 2는 결과 집합의 두 번째 열, 즉 danhba_ten / congty_ten 열을 기준으로 오름차순 정렬하라는 의미입니다. 이처럼 위치 번호를 활용하면 이름이 다른 여러 열을 한 번에 손쉽게 정렬할 수 있습니다.