쿼리에 적는 순서
문장은 위에서 아래로 읽히지만, 실행 순서는 다릅니다.
1
SELECT
2
FROM
3
WHERE
4
GROUP BY
5
HAVING
6
ORDER BY
7
LIMIT
겉으로는 SELECT가 먼저 보이지만, 실제로는 `FROM`부터 처리해야 어떤 행과 그룹을 다룰지 정할 수 있습니다.
`ORDER BY`와 `LIMIT`이 뒤에서 동작하는 이유는 간단합니다. DB는 먼저 `FROM`부터 행과 그룹을 만들고, `SELECT`에서 결과 컬럼과 별칭을 확정한 다음, 그 완성된 결과에 정렬과 개수 제한을 적용합니다.
문장은 위에서 아래로 읽히지만, 실행 순서는 다릅니다.
중요한 상태 변화만 남기면, 왜 별칭과 정렬이 뒤에 오는지 바로 보입니다.
이유: `WHERE`는 `SELECT`보다 먼저 실행됩니다. 평균값 별칭 `avg_price`는 아직 만들어지지 않았습니다.
이유: `SELECT`가 끝나 `avg_price`가 생긴 뒤이므로 정렬할 수 있고, 그 정렬 결과에서 상위 5개만 남길 수 있습니다.