본문 바로가기
DataBase/MsSql

Union, Union ALL 차이점 및 사용 방법

by 아우럼 2024. 4. 4.
반응형

Union(all)은 여러 개의 select 문의 열을 합쳐 하나의 select 문으로 통합하여 data를 검색할 수 있습니다.

UNION, UNION ALL 차이점

UNION 특징.

  • 중복된 값을 제거하고 결과를 합집합으로 출력합니다.
  • 칼럼 명이 같아야 하며, 칼럼별 데이터 타입도 같아야 에러가 발생하지 않습니다.
  • 중복된 값을 제거하고 data를 출력합니다.
  • 성능 면에서 중복제거를 내부적으로 수행하므로 UNION ALL보다 느립니다.

UNION ALL 특징.

  • 중복된 값을 유지하면서 결과를 합집합으로 만들어 출력합니다.
  • 쿼리 결과를 합쳐서 하나의 결과 집합으로 반환합니다.
  • UNION 하고 동일하게 칼럼 명이 같아야 하며, 칼럼별 데이터 타입도 같아야 에러가 발생하지 않습니다.
  • 속도 면에서 중복 값 제거를 위해 연산을 한 번 더 해야 하므로 Union All이 Union보다 더 빠릅니다.

UNION, UNION ALL 사용법

UNION, UNION ALL 기본형식.

  • colName의 열의 개수가 같아야 하고 데이터 형식도 열 단위로 같아야 합니다.
select colName1,colName2,colName3
  from tableName1
 union (all)
select colName1,colName2,colName3
  from tableName2;

UNION, UNION ALL 사용.

  • UNION, UNION ALL의 데이터를 비교하면서 차이점을 확인해 보세요.
-- UNION 사용
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionOne
UNION 
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionTwo;

-- UNION ALL 사용
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionOne
UNION ALL
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionTwo;

union , union all 대한 설명 및 예제 입니다.

ORDER BY와 함께 UNION 사용.

  • Union에서 order by를 사용하려면 맨 마지막에서 사용해야 합니다. 즉, 개별로는 ORDER BY를 사용할 수 없습니다.
-- order by --> error
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionOne
order by  EmpID
UNION ALL
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionTwo
order by  EmpID;

-- order by --> good
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionOne
UNION ALL
SELECT EmpID,EmpName,Title,DeptID
FROM UserInfoForUnionTwo
order by  EmpID DESC;

union(all)에서 order by 사용 방법 및 주의 사항 입니다.

UNION 위한 data

  • 기본소스
DROP TABLE IF EXISTS UserInfoForUnionOne;
CREATE TABLE dbo.UserInfoForUnionOne
(
	EmpID SMALLINT NOT NULL, 
	EmpName NVARCHAR(40) NOT NULL,
	Title NVARCHAR(50) NOT NULL,
	DeptID SMALLINT NOT NULL 
);

DROP TABLE IF EXISTS UserInfoForUnionTwo;
CREATE TABLE dbo.UserInfoForUnionTwo
(
	EmpID SMALLINT NOT NULL, 
	EmpName NVARCHAR(40) NOT NULL,
	Title NVARCHAR(50) NOT NULL,
	DeptID SMALLINT NOT NULL 
);
  
 INSERT INTO UserInfoForUnionOne VALUES 
(110,'Jessica','태평양지점팀장','10'),
(111,'Alicia','태평양지점','10'),
(120,'Michael','미국지점팀장','20'),
(121,'Alicia','미국지점','20') ;

 INSERT INTO UserInfoForUnionTwo VALUES  
(120,'Michael','미국지점팀장','20'),
(121,'Alicia','미국지점','20'),
(130,'Laura','마케팅팀장','30'),
(131,'Stephen','마케팅팀','30');

반응형