개발
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 가 실행 순서를 실제로 바꾸고 다양한 실행 계획을 세우기 때문에 일어난 일인데, 선언적 언어가 좋으면서도 위험한 것 같기도 하네요