개발

SELECT 에 없어도 ORDER BY 는 동작한다.

우리로 2023. 8. 18. 14:37

MySQL 에서 SQL 쿼리는 

FROM - > ON -> JOIN -> WHERE -> GROUP BY -> HAVING -> SELECT -> DISTINCT -> ORDER BY

순서로 동작한다고 알려져있습니다. FROM 으로 선택한 테이블에서 SELECT 로 원하는 칼럼을 추출하고 ORDER BY 로 정렬을 하는 구조입니다. 

 

만약에 SELECT 절에 A 칼럼만 보도록 적었는데 ORDER BY 에 B 칼럼을 적으면 정렬이 될까요?

 

신기하게도 잘 됩니다!!

SELECT name, created_at FROM store ORDER BY created_at asc 
=========================
이름       생성 시각
A	2021-05-11 06:12:50
B	2021-05-11 06:12:50
C	2021-05-11 06:12:50
D	2021-05-28 06:08:15
E	2021-05-31 03:13:52

위의 SELECT 절에서 created_at 을 제거하더라도 순서가 보존됩니다. 

SELECT name FROM partner ORDER BY created_at asc 
=====================
이름
A
B
C
D
E

 

혹시 원래 A,B,C,D,E 순서대로 저장된건 아닐까요? 이번엔 정렬 순서를 반대로 해봅시다 

SELECT name FROM partner ORDER BY created_at DESC
========================
이름
Z
Y
X
W
V

 

 

순서가 잘 바뀌는 걸 확인할 수 있습니다.

 

제게는 상당히 신기한 경험이었습니다. Query Optimizer 가 실행 순서를 실제로 바꾸고 다양한 실행 계획을 세우기 때문에 일어난 일인데, 선언적 언어가 좋으면서도 위험한 것 같기도 하네요