반응형
UNION은 언제 사용할까요? 일반적으로 테이블을 연결시키기 위해서는 JOIN문을 많이 사용합니다. 정규화되지 않은 테이블을 서로 합치기 위해서 UNION을 사용합니다. 하나의 테이블을 성능향상을 위하여 두개이상으로 나누어서 설계하는 경우가 있습니다.
회원정보가 1000만명이 있다고 가정을 하고 그중에 거의 최초가입후 사용하지 않는 계정이 800만명이 있다고 가정해보겠습니다. 이럴경우 사용하지 않는 휴먼계정을 별도 테이블로 구분을 하여 저장하고 실제 사용되는 200만명에 대하여 서비스를 하면 서비스의 성능이 올라갈겁니다. 물론 테이블을 파티셔닝하여 구분하는 방법도 있으나 DB버전에 따라 지원이 되지 않는경우도 있고, 이미 서비스가 위와같이 테이블을 분리하여 사용을 하고 있는 경우에는 UNION을 이용하여 비정규화된 테이블의 값을 연결하여 사용할수 있습니다.
회원테이블을 아래와 같이 일반회원, 휴먼회원테이블로 만들어보겠습니다. 물론 실제 운영하는 사이트에는 일반회원,휴먼회원이 중복이되면 안되겠지만 중복값이 들어간다는 가정하에 아래와 같이 만들어 보겠습니다.
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
CREATE TABLE memebers
(
memberid int primary key,
name nvarchar(50)
)
CREATE TABLE dormant_memebers
(
memberid int primary key,
name nvarchar(50)
)
insert into memebers values (1,'홍길동')
insert into memebers values (2,'가나다')
insert into dormant_memebers values (2,'가나다')
insert into dormant_memebers values (9000,'휴먼1')
insert into dormant_memebers values (9001,'휴먼2')
|
|
Union과 Union All 결과값
Union은 중복이 제거됨, Union All은 테이블을 있는 그대로 연결해주며 중복값도 표출됩니다.
|
1
2
3
4
5
6
7
8
9
10
|
// union
select * from memebers
union
select * from dormant_memebers
// union all
select * from memebers
union all
select * from dormant_memebers
|
|
쿼리결과

반응형
'프로그래밍 > DB' 카테고리의 다른 글
| [DB] MSSQL datetime to yyyymmddhhmmss (0) | 2020.12.21 |
|---|---|
| [DB] MSSQL Sleep처리방법(waitfor delay) (0) | 2020.12.20 |
| [DB] MSSQL 추적단위. Cpu(밀리세컨드), Duration(마이크로세컨드) (0) | 2020.11.16 |
| [DB] MSSQL sa계정 대체할 시스템 관리자계정 생성방법 (0) | 2020.11.15 |
| [DB] MSSQL DB접속포트 두개이상 지정하기 (다중포트사용) (0) | 2020.11.15 |