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

SQL Server UNION 연산자 완벽 가이드: 기본 문법부터 실전 예제까지

UNION 연산자는 2개 이상의 SELECT 문에서 반환된 결과 집합을 하나로 결합할 때 사용합니다. 이때 각 SELECT 문에서 중복되는 행은 자동으로 제거됩니다.

UNION 연산자에 포함되는 각 SELECT 문은 결과 집합의 열 개수가 동일해야 하며, 대응되는 열의 데이터 타입 역시 서로 일치해야 합니다.

UNION 연산자 기본 문법

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

매개변수 설명

bieu_thuc1, bieu_thuc2, ... bieu_thucn

조회하고자 하는 열 또는 계산 값을 의미합니다.

bang

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

WHERE dieu_kien

선택 사항입니다. 조회하려는 레코드가 충족해야 하는 조건을 나타냅니다.

사용 시 주의사항

  1. 두 SELECT 문은 동일한 수의 표현식(열)을 가져야 합니다.
  2. 각 SELECT 문에서 대응되는 열은 동일한 데이터 타입이어야 합니다.
  3. UNION 연산자는 중복된 행을 자동으로 제거합니다.
  4. 중복 제거 없이 모든 행을 그대로 유지하려면 UNION ALL 연산자를 사용하세요.

예제 1: 단일 열 반환하기

다음은 여러 SELECT 문에서 하나의 필드를 반환하는 UNION 연산자의 기본적인 활용 예입니다. 이때 각 필드는 동일한 데이터 타입이어야 합니다.

SELECT sanpham_id
FROM sanpham
UNION
SELECT sanpham_id
FROM hangtonkho;

위 예제에서 어떤 sanpham_id가 sanpham 테이블과 hangtonkho 테이블 양쪽에 모두 존재한다면, 결과 집합에는 해당 sanpham_id가 한 번만 나타납니다. 만약 중복 레코드를 제거하지 않고 그대로 유지하고 싶다면 UNION ALL 연산자를 사용하면 됩니다.

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

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

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

이 예제에서는 두 SELECT 문의 열 이름이 서로 다르기 때문에, ORDER BY 절에서 열 이름 대신 결과 집합 내의 위치를 기준으로 정렬하는 것이 더 편리합니다. 위 쿼리의 ORDER BY 2는 결과 집합의 두 번째 열인 danhba_ten / congty_ten을 기준으로 오름차순 정렬하라는 의미입니다.

즉, danhba_ten / congty_ten은 결과 집합에서 두 번째 위치에 있는 열입니다.