[MSSQL] 여러개 쿼리 하나로 묶기_UNION ALL

SQL SERVER 에서 여러개의 쿼리를 하나의 쿼리로 담아야할 때 저는 아래와 같이 UNION ALL 을 사용합니다.

 

이는 담아야 하는 테이블은 많으나 JOIN할수 있는 조건이 없고

하나의 테이블에 모든 데이터를 담기 어려울 때가 있기 때문입니다.

 

저는 이럴때 아래와 같이 진행합니다.

 

만약 유저테이블의 이름을 뽑고 매출테이블의 금액을 뽑고 싶다..

(물론 위와 같은 케이스로 데이터를 뽑지는 않겠지만 예시로 봐주시면 좋을 것 같습니다.)

 

- 유저 테이블

유저 테이블 USER_NM USER_ID USER_AGE
  영희 1004 21
  철수 9999 25
  강인 7777 26

- 매출 테이블

매출 테이블 DATE USER_EN_NM DAY_PRICE
  20231125 YUNG 120,000
  20231126 YUNG 150,000
  20231125 CHUL 220,000
  20231125 KANG 333,000

 

 

SELECT	
		USER_NM	AS '유저이름',
		''	AS '날짜',
		''	AS '판매금액'
FROM 	유저

UNION ALL

SELECT 	
		''		AS '유저이름',
		DATE		AS '',
		DAY_PRICE	AS '판매금액'     
FROM    매출

 

데이터 형식을 맞추고, 컬럼 갯수를 맞춰서 쿼리를 짜줍니다.

 

결과 값을 하나로 맞추기 위해서는 GROUP BY 와

MAX(USER_NM), MAX(DAYE), DAY_PRICE 를 적절히 사용합니다.

 

UNION ALL을 사용하면 쿼리 속도가 저하될 수 있으니 가능한 지양하는 것이 좋습니다.

 

최소한의 조인 조건이 있다면 1개의 메인 쿼리를 뽑고

하위 서브쿼리에 조인조건의 데이터를 뽑아서 Join 하는것이 좋습니다.