반응형
UNION이란 무엇인가?
UNION은 두 개 이상의 쿼리를 합쳐 하나의 쿼리로 만들어 주는 역할을 한다. 이 때 각 컬럼명은 같아야하며 데이터타입 역시 동일해야한다. 만일 컬럼명이 다른 경우엔 AS 를 사용해 컬럼명을 통일시켜주어야 한다.
UNION VS UNION ALL
우선 기본적으로 UNION은 UNIONDistinct를 줄여서 쓰는 개념이다. 즉, 중복을 허락하지 않는다.
예를 들어 EX_TABLE1 에서 select 한 값이 'test1', 'test2' 이고
EX_TABLE2에서 select 한 값이 'test1', 'test3'이라고 가정해보자.
이때 UNION을 써서 두 sql을 합쳐주면 결과는 'test1', 'test2', 'test3'으로
중복을 제거한 결과값을 돌려준다.
하지만 Union all을 사용해 두 sql을 합친다면 결과는
'test1', 'test2', 'test1', 'test3' 가 될 것이다.
UNION의 경우 중복을 제거하는 작업을 시행해주기 때문에 UNION ALL 에 비해 처리 속도가 느리다.
그렇기 때문에 중복되어도 크게 이상이 없는 경우에는 되도록 UNION ALL 을 사용해주는 것이 좋다.
쿼리(QUERY)문을 이용하여 각각 COUNT or SUM을 출력하여 code상에서 합(sum)을 할 수도 있으나,
UNION ALL을 사용하여 COUNT 값만 가지와서 SUM을 할 수 있다.
이때 아래와 같이 사용함으로 결과값에 대한 SUM을 하여 사용 할 수 있다.
-- 테스트1 테이블
SELECT COUNT(*)
FROM test1 -- 결과: 5
-- 테스트2 테이블
SELECT COUNT(*)
FROM test2 -- 결과: 3
-- UNION ALL 사용해서 합치기
SELECT COUNT(a.cnt)
FROM ( (SELECT COUNT(*) AS cnt
FROM test1)
UNION ALL
(SELECT COUNT(*) AS cnt
FROM test2)
)AS a;
--> 결과는 8로 나온다.
-- 테스트1 테이블
SELECT money_id, SUM(money)
FROM test1
GROUP BY money_id
-- 결과: 50,000
-- 테스트2 테이블
SELECT money_id, SUM(money)
FROM test1
GROUP BY money_id
-- 결과: 100,000
-- UNION ALL 사용해서 합치기
SELECT SUM(a.mney)
FROM ( (SELECT money_id, SUM(money) AS mney
FROM test1
GROUP BY money_id)
UNION ALL
(SELECT money_id, SUM(money) AS mney
FROM test1
GROUP BY money_id)
) AS a;
--> 결과는 150,000로 나온다.
반응형
'DB > MySQL' 카테고리의 다른 글
[Mysql] 소수점 존재하는 데이터 확인하기 (0) | 2022.10.04 |
---|---|
[Mysql] 문자열 합치기(CONCAT, GROUP_CONCAT) (0) | 2022.04.22 |
[MySQL] UNION, UNION ALL (0) | 2022.04.06 |
[MySQL] SQL ROUND, FLOOR, CEIL 함수 (0) | 2022.04.01 |
[MySQL] SQL 문자열 자르기 - SUBSTR / SUBSTRING / LEFT / RIGHT (0) | 2022.04.01 |