[MSSQL] Union,UnionAll 사용법 & 예제

Union이란? 

Union은 여러개의 SQL문을 합쳐 하나의 SQL문으로 만들어주는 방법입니다.

두개의 쿼리의 합집합을 만들어준다고 생각하면 될듯합니다.                    


Union과 UnionAll의 차이점 

Union과 UnionAll은 두 쿼리문을 하나로 합쳐준다는것에 공통점이 있습니다.

하지만 Union은 두 쿼리의 결과의 중복값을 제거해서 보여주고,

UnionAll은 중복된값도 전부 다 보여준다는 차이점이 있습니다.

속도는 당연히 중복값제거를 위해 연산을 한번 더 해야하기때문에 

UnionAll이 Union보다 더 빠르겠죠?


Union 사용시 주의점

☞ 칼럼명이 같아야한다. (같지않을경우 AS를 사용하여 같게 만들어주면 됩니다.)

☞ 칼럼별 데이터타입이 같아야합니다.


UNION / UNION ALL 사용법

쿼리문1
Union/UnionAll
쿼리문2


1. 두개의 테이블조회 쿼리문 합집합 구하기

SELECT * FROM EX_TABLE1
Union/UnionAll
SELECT * FROM EX_TABLE2


2. 품목별 총 합계금액 구하기

SELECT
COMPANY,
ITEM,
MAX(AM) AS AM,
MAX(QT_IO) AS QT_IO,
MAX(AM_RETURN) AS AM_RETURN,
MAX(QT_RETURN) AS QT_RETURN,
MAX(AM)*MAX(QT_IO)-MAX(AM_RETURN)*MAX(QT_RETURN) AS AM_TOT
FROM
(
    SELECT
    COMPANY,
    ITEM,
    AM,
    QT_IO,
    '0'AM_RETURN,
    '0'QT_RETURN
    FROM EX_TABLE01
UNION ALL
    SELECT
    COMPANY,
    ITEM,
    '0'AM,
    '0'QT_IO,
    AM AS AM_RETURN,
    QT_RETURN
    FROM EX_TABLE02
)UN
group by COMPANY,ITEM


[MS_SQL] 서브쿼리(SubQuery) 사용법 & 예제

[MS_SQL] 프로시저 생성,조회,수정,삭제

[MS_SQL] 피벗테이블을 활용하여 세로로 된 데이터 가로로 출력하기

[MS_SQL] 반복문(WHILE)사용법 & 예제

[MS_SQL] SET NOCOUNT 정의와 사용법 (프로시저 성능 향상)


댓글(2)

  • MSSQL 초보
    2021.06.18 11:11

    SELECT
    Adidas,
    Reebok,
    MAX(nike) AS AM,
    MAX(gucci) AS QT_IO,
    MAX(hermes) AS AM_RETURN,
    MAX(soccer) AS QT_RETURN,
    MAX(AM)*MAX(QT_IO)-MAX(AM_RETURN)*MAX(QT_RETURN) AS AM_TOT
    FROM
    (
    SELECT
    Adidas,
    Reebok,
    AM,
    QT_IO,
    '0'AM_RETURN,
    '0'QT_RETURN
    FROM TEST
    UNION ALL
    SELECT
    Adidas,
    Reebok,
    '0'AM,
    '0'QT_IO,
    AM AS AM_RETURN,
    QT_RETURN
    FROM TEST2
    )UN
    group by adidas,Reebok


    테이블과 칼럼만 바꿔서 해봤는데 자꾸 에러가 떠서 질문드립니다.

    Msg 207, Level 16, State 1, Line 14
    Invalid column name 'AM'.
    Msg 207, Level 16, State 1, Line 15
    Invalid column name 'QT_IO'.
    Msg 207, Level 16, State 1, Line 22
    Invalid column name 'Reebok'.
    Msg 207, Level 16, State 1, Line 25
    Invalid column name 'AM'.
    Msg 207, Level 16, State 1, Line 26
    Invalid column name 'QT_RETURN'.
    Msg 4104, Level 16, State 1, Line 4
    The multi-part identifier "test.Nike" could not be bound.
    Msg 207, Level 16, State 1, Line 5
    Invalid column name 'gucci'.
    Msg 207, Level 16, State 1, Line 6
    Invalid column name 'hermes'.
    Msg 207, Level 16, State 1, Line 7
    Invalid column name 'soccer'.

    도와주세요 ㅠ

    • 2021.06.18 11:23 신고

      FROM절에 저렇게 서브쿼리 안쓰셔도 될거같은데 음.. 일단 FROM의 서브쿼리안에 AM, QT_IO, Reebok, QT_RETURN이 등 컬럼이 실제로 있는 컬럼인가요?? TEST 테이블과 TEST2 테이블에 있는 컬럼 다시한번 확인해보시고 위에서도 MAX(nike)이런식으로 쓰셨는데 nike컬럼을 from절에서 조회하고 있지 않아 여기도 문제네요 한번 확인해보세요

Designed by JB FACTORY