DB

SQL 실행 순서

SQL은 쓰는 순서와 실행되는 순서가 다릅니다. 데이터베이스는 FROM으로 테이블을 가져온 다음 행을 거르고, 묶고, 계산하고, 정렬합니다. 단계마다 표가 어떻게 바뀌는지 따라가 보세요.

SQL 쿼리가 실행 순서대로 표를 바꾸는 과정을 보여 주는 시뮬레이터

1. 조건을 바꿔 보세요

2. 실행 단계를 하나씩 넘기세요

위쪽 두 줄은 쿼리를 쓰는 순서와 실제로 실행되는 순서입니다. 같은 단계가 두 줄에서 함께 강조되니, 위치가 얼마나 다른지 비교해 보세요.

실행 1FROM
실행 2WHERE
실행 3GROUP BY
실행 4HAVING
실행 5SELECT
실행 6ORDER BY
실행 7LIMIT

WHERE와 HAVING은 거르는 대상이 다릅니다

WHERE는 그룹을 만들기 전에 행 하나하나를 거르고, HAVING은 그룹을 만든 뒤 그룹을 거릅니다. 그래서 COUNT(*)나 AVG() 같은 집계 함수는 WHERE에 쓸 수 없고 HAVING에만 쓸 수 있습니다. 반대로 행 단위로 거를 수 있는 조건은 WHERE에 써야 그룹을 만들 데이터가 줄어 빠릅니다.

별칭은 SELECT 이후에만 보입니다

AS로 붙인 별칭(평균, 인원)은 5단계 SELECT에서 처음 만들어집니다. 그보다 먼저 실행되는 WHERE, GROUP BY, HAVING에서는 별칭을 쓸 수 없고, 뒤에 실행되는 ORDER BY에서는 쓸 수 있습니다. MySQL처럼 일부 DB는 GROUP BY와 HAVING에서도 별칭을 허용하지만, 표준과 다른 동작이므로 기대지 않는 편이 안전합니다.

코테·면접에서는

"부서별 평균 급여가 3,500 이상인 부서" 같은 문제는 GROUP BY + HAVING, "급여가 3,000 이상인 직원들의 부서별 평균"은 WHERE + GROUP BY입니다. 문장에서 조건이 개별 행에 걸리는지 그룹 집계에 걸리는지부터 구분하세요. GROUP BY를 쓰면 SELECT에는 GROUP BY에 쓴 열과 집계 함수만 올 수 있습니다.