반응형
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;
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 위한 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');
반응형