여정의 기록

[Mysql] UNION을 사용할 때 ORDER BY 사용법 본문

공부/SQL문

[Mysql] UNION을 사용할 때 ORDER BY 사용법

Chelsey 2023. 2. 22. 12:29
728x90

오늘도 계속된 에러 끝에 ORDER BY와 UNION의 사용법을 보게 되었다.

 

우리는 UNION을 사용할 때

 

SELECT ...

UNION

SELECT ...

 

와 같은 구조를 쓰게되는데 이 때 

 

SELECT ... ORDER BY ...

UNION

SELECT ... ORDER BY ....

 

와 같이 매번 ORDER BY 를 해주게 되는 경우에 대해 기록해보겠다.

방금 내가 시도했던 방법인데, 이런 경우 최종 결과물의 순서 정렬에 아무런 영향을 주지 않는다고 한다. 

최종적으로 나오는 결과에 대해서 ORDER BY를 실행해야 한다.

왜냐하면 UNION이 정렬되지 않는 것이 기본적으로 깔린 것이기 때문이고 그러기 위해서는

ORDER BY로 정렬되지 않은 상태의 데이터를 UNION해야 한다는 의미인것 같다.

 

그래서 정렬을 하고 싶다면 가장 마지막에 작성하면 되는데

SELECT ...

UNION

SELECT ...

ORDER BY ...

와 같이 작성하면된다.

 

혹은 더 보기 좋게

(SELECT ...)

UNION

(SELECT ...)

ORDER BY ...

와 같이 작성할 수도 있다.

 

테이블명과 함께 컬럼을 명시하는 경우에도 ORDER BY를 사용할 수 없다.

대신 별칭을 사용하여 명시할 수 있다.

 

만약 ORDER BY SUM.. MAX... 와 같은 함수(aggregate function) 를 사용하면

 ER_AGGREGATE_ORDER_FOR_UNION   와 같은 에러가 뜨게된다.

 

 

출처: https://dev.mysql.com/doc/refman/5.7/en/union.html#union-order-by-limit

728x90