데이터 베이스/데이터베이스 기본

Ch04. UNION - UNION 정렬

webmaster 2026. 5. 31. 11:42

"UNION" 또는 "UNION ALL" 사용하여 여러 "SELECT" 문의 결과를 합칠 , 최종 결과 집합에 대해 정렬(Sorting)을 적용할 있다. 이때 "ORDER BY" 절의 위치가 중요하다.

 

"ORDER BY" 절은 전체 "UNION" 연산의 가장 마지막에 번만 사용해야 한다. 만약 "SELECT"  안에 "ORDER BY" 사용하면 에러가 발생하거나, 예상과 다른 결과가 나올 있다. 왜냐하면 "UNION"은 각 "SELECT" 문의 개별적인 정렬 순서가 아니라, 합쳐진 최종 결과 전체에 대한 순서를 결정해야 하기 때문이다.

 

 

UNION 결과를 order by

"활동 고객과 탈퇴 고객의 명단을 합친 , 이름(name) 기준으로 오름차순 정렬하고 싶다"

select name, email from users
union
select name, email from retired_users
order by name;

쿼리 결과

  • "ORDER BY" 절을 "UNION" 연산자의 마지막에 배치함으로써, 합쳐진 모든 고객의 이름이 글자 순서대로 깔끔하게 정렬된 것을 확인할 있다

 

UNION 나오지 않는 필드를 사용한다면?

"UNION" 또는 "UNION ALL" 연산의 "ORDER BY" 절에서는 번째 "SELECT" 문의 컬럼 이름이나 해당 컬럼의 별칭(Alias) 사용할 있다. 이는 "UNION" 결과 집합의 컬럼 이름이 번째 "SELECT" 문을 따르기 때문이다

select name, email, create_at from users
union
select name, email, retired_date from retired_users
order by name;

쿼리 결과

  • 첫 번째 "SELECT" 문은 "created_at" 두 번째 "SELECT" 문은 "retired_date"를 사용했다.
  • 실행 결과를 보면 컬럼 이름에 "created_at"  들어가 있는 것을 확인할 있다.
  • 만약 첫 번째 "SELECT" 문에 없는 컬럼을 "ORDER BY" 절에서 사용하려고 하면 에러가 발생한다.
    • 예: retired_date를 정렬 조건에 넣으면 오류가 발생한다

별칭을 사용하기

다음의 "created_at" , "retired_date" 과 같이 이름이 다른 컬럼이 있다면 별칭을 사용하는 것을 권장한다.

나중에 쿼리를 다시 보거나 다른 개발자가 , "created_at" 이라는 이름만으로는 "retired_date" 포함하여 정렬된다는 사실을 즉시 파악하기 어려울 있기 때문이다. "event_date" 같은 중립적인 별칭은 해당 컬럼이 여러 종류의 날짜 정보를 담고 있음을 명확하게 보여준다.

select name, email, create_at as event_date from users
union
select name, email, retired_date as event_date from retired_users
order by event_date;

쿼리 결과

  • "created_at" , "retired_date"과 같이 이름이 다른 컬럼을 event_date라는 별칭을 사용해 정렬했다.

'데이터 베이스 > 데이터베이스 기본' 카테고리의 다른 글

Ch05. CASE문 - 그룹핑  (0) 2026.06.02
Ch05. CASE문 - CASE문 기본  (0) 2026.06.02
Ch04. UNION - UNION ALL  (0) 2026.05.31
Ch04. UNION - UNION  (0) 2026.05.31
Ch03. 서브쿼리 - 서브쿼리 VS Join  (0) 2026.05.30