티스토리 뷰

회사 물류팀 이전 작업 후 집책 동선을 최소화 하기 위해 `집책 체크 목록`의 순서를 임의로 설정해야 되는 상황이 발생했다.

물류 시스템은 `MariaDB`를 사용하고 있으며 위치 컬럼값을 기준으로 `ORDER BY`에 임의로 값을 설정해 정렬을 했다.

갑자기 든 생각은 `ORDER BY` 에 임의로 설정한 값이 해당 테이블 컬럼이 아닌데 `어떻게 정렬이 되지?`라는 의문이 들었고 `아마 ORDER BY 에 설정된 값은 해당 행에 추가 되며 각 행에 값이 추가된 후 정렬이 되는가 보다.` 라고 생각했지만 궁금해서 찾아봤다. (25년만에...)

 

ORDER BY 절의 기본 동작 과정

1. 데이터 선택 및 처리

 - SELECT 쿼리가 실행되면 지정된 테이블에서 데이터를 읽어온다.

 - 필요에 따라 WHERE 절 등을 사용하여 데이터를 필터링 한다.

 

2. 정렬 기준 계산

 - ORDER BY 절에 지정된 컬럼이나 표현식에 대해 각 행의 값을 계산한다.

 - ORDER BY CONCAT(column1, column2) 와 같은 표현식은 각 행의 column1 과 column2 를 합친 문자를 정렬한다.

-- 기본 컬럼 정렬
SELECT * FROM employees ORDER BY salary;

-- 표현식 정렬
SELECT * FROM employees ORDER BY salary + bonus;

-- 랜덤값 정렬
SELECT * FROM employees ORDER BY RAND();

-- 조건 정렬
SELECT * FROM employees ORDER BY CASE WHEN department = 'Sales' THEN 1 ELSE 2 END, name;

-- 서브쿼리 정렬
SELECT * FROM employees e ORDER BY (
	SELECT CONCAT(de.order, e.department) FROM employees_department ed WHERE ed.department = e.department
);

 

3. 정렬 수행

 - 계산된 정렬 기준에 따라 데이터를 정렬한다.

 - 임의의 값을 사용할 경우, 이는 정렬 기준으로 사용될 표현식이 된다. `ORDER BY rand()` 와 같은 표현식은 각 해에 대해 무작위 값을 생성하여 정렬한다.

 

4. 결과 반환 

- 정렬된 결과를 반환한다.

 

생각한게 맞나 보다 `ORDER BY`  절에 임의의 값을 설정하면 해당 값은 각 행마다 계산된 후, 그 값에 따라 정렬이 이루어진다.

`ORDER BY`는 정렬 기준이 되는 값을 계산하여 이를 기준으로 정렬하는 프로세스를 따른다.

댓글