티스토리 뷰
회사 물류팀 이전 작업 후 집책 동선을 최소화 하기 위해 `집책 체크 목록`의 순서를 임의로 설정해야 되는 상황이 발생했다.
물류 시스템은 `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`는 정렬 기준이 되는 값을 계산하여 이를 기준으로 정렬하는 프로세스를 따른다.
- Total
- Today
- Yesterday
- linux folder
- php7
- php-fpm
- 강변웨딩스퀘어
- osx centos7
- htmltopdf
- access denined
- WKHTMLTOPDF
- 폴더권한
- 나의결혼식
- nginx
- 비아트리
- PHP에서 PDF저장
- CONVERTING HTML TO PDF
- 맥북virtualbox
- badgateway
- httpd log 검색
- nginx403
- 세션저장이안됨
- input not clickable
- niginx
- 구글10가지진실
- jquery dialog 오류
- 세션문제
- 부트스트랩 modal input
- Linux
- javascript
- 비아트리스튜디오
- sms문자제한
- 구글의철학