작성 순서 ≠ 실행 순서
SELECT
부터 쓰지만, 실제로는
FROM
부터 결과를 만듭니다
사람은 쿼리를 위에서 아래로 읽지만, DBMS는 먼저 대상과 조건을 정한 뒤 마지막에 보여 줄 컬럼을 선택합니다.
작성
쿼리를 적는 순서
보이는 문장 순서입니다.
1
SELECT
2
FROM
3
WHERE
4
GROUP BY
5
HAVING
6
ORDER BY
7
LIMIT
실행
DBMS가 처리하는 순서
대상 결정 → 필터 → 그룹 → 출력 → 정렬 순서입니다.
1
FROM
읽을 테이블과 조인 대상을 정함
2
WHERE
조건에 맞는 행만 먼저 남김
3
GROUP BY
행을 그룹 단위로 묶음
4
HAVING
만들어진 그룹만 다시 거름
5
SELECT
보여 줄 컬럼과 별칭을 확정
6
ORDER BY
완성된 결과를 정렬
7
LIMIT
필요한 수만큼만 잘라 반환
WHERE에서 별칭을 못 쓰는 이유
WHERE가 먼저 실행
되므로,
SELECT AS
로 만든 이름이 아직 없습니다.
HAVING에서 집계 함수를 쓰는 이유
GROUP BY 다음
에 실행되므로, 이미 만들어진 그룹을 기준으로 검사할 수 있습니다.
ORDER BY에서 별칭을 쓸 수 있는 이유
SELECT 뒤
에 실행되므로, 확정된 별칭으로 결과를 정렬할 수 있습니다.