ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MSSQL UNION과 정렬
    Database/MSSQL 2017. 5. 26. 10:10
    반응형

    A테이블과 B테이블을 합칠 때

    UNION을 쓰면 A와 B의 중복값을 제거하고 합쳐지고,

    UNION ALL을 쓰면 A와 B의 중복값을 포함하여 모두 합쳐진다.

    이때 중요한 포인트는 A테이블과 B테이블의 열 형식이 같아야 한다.


    A테이블

     DeviceTime

     UserID

     UserName

     InOut 

     2017-05-25 08:50

     1001 

     이씨 

     IN 

     2017-05-25 08:30

     1002 

     박씨

     IN

     2017-05-25 09:00

     1003

     최씨

     IN


    B테이블

     DeviceTime

     UserID

     UserName

     InOut 

     2017-05-25 08:50

     1001 

     이씨 

     OUT 

     2017-05-25 08:30

     1002 

     박씨

     OUT

     2017-05-25 18:00

     1003

     최씨

     OUT


    A테이블과 B테이블을 합칠 때

     - SELECT * FROM A UNION SELCT * FROM B

     - SELECT * FROM A UNION ALL SELECT * FROM B

    UNION과 UNION ALL의 결과값은 차이가 없다.

    다른 열들이 중복된다고 해도 열 InOut은 중복이 되지 않기 때문이다.


    열 InOut을 빼고 UNION을 하면 다음과 같이 나오고,

     - SELECT DeviceTime, UserID, UserName FROM A UNION SELECT DeviceTime, UserID, UserName FROM B

     DeviceTime 

     UserID

     UserName 

     2017-05-25 08:50

     1001

     이씨

     2017-05-25 08:30

     1002

     박씨

     2017-05-25 09:00

     1003

     최씨

     2017-05-25 18:00

     1003

     최씨


    UNION ALL은 다음과 같이 나온다.

     - SELECT DeviceTime, UserID, UserName FROM A UNION ALL SELECT DeviceTime, UserID, UserName FROM B

     DeviceTime 

     UserID

     UserName

     2017-05-25 08:50

     1001

     이씨 

     2017-05-25 08:50

     1001 

     이씨 

     2017-05-25 08:30

     1002

     박씨 

     2017-05-25 08:30

     1002

     박씨 

     2017-05-25 09:00

     1003

     최씨 

     2017-05-25 18:00

     1003

     최씨 



    이때 합쳐지고 나서 시간별로 정렬하고 싶을 때, 

    여기선 DeviceTime으로 정렬하는 방법은 다음과 같다. 


    SELECT DeviceTime, UserID, UserName FROM 

    (
     SELECT DeviceTime, UserID, UserName FROM A
     UNION
     SELECT DeviceTime, UserID, UserName FROM B
    ) as ab

    ORDER BY DeviceTime

    반응형

    댓글

Designed by Tistory.