데이터 처리 도구/SQL

SQL 실행 순서 (= SQL 논리적 처리 순서)

yourhm 2025. 4. 26. 17:02
더보기

FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 

"FROM부터 데이터 만든 후, 필터링하고, 그룹핑하고, 최종적으로 SELECT하고, 마지막에 정렬한다."

 

기본적으로 표준 SQL(ANSI SQL 표준)이 정의한 실행 순서:

1. FROM
2. WHERE
3. GROUP BY
4. HAVING
5. SELECT
6. ORDER BY

 

어떤 RDBMS이건(Oracle, MySQL, PostgreSQL, SQL Server 등) 이 기본 흐름을 따른다.

 

 

GROUP BY절에서 SELECT절에 정의한 별칭(alias)을 바로 사용할 수 없다.

왜냐하면, GROUP BY는 SELECT보다 먼저 실행되기 때문에 아직 SELECT에서 alias가 정의되기 전이라서 인식할 수가 없음. 그래서 GROUP BY에서는 원본 컬럼명이나 식(expression)을 직접 써야 한다.

 

일부 DBMS는 특수하게 GROUP BY에서도 alias를 허용하는 경우가 있긴 하다. (MySQL이나 SQLite 같은 느슨한 규칙을 가진 DB들에서 허용하기도 하지만 표준 SQL은 아님.) 예외적으로 alias 써도 되는 경우가 있지만 이식성 떨어짐! 다른 DB 옮기면 깨질 수 있기 때문에 코드 이식성(여러 DB에서 다 돌아가게)을 생각하면, 항상 GROUP BY에서는 alias 대신 직접 식을 쓰는 게 안전하다.

 

예시 (❌)

SELECT price * quantity AS total_price
FROM sales
GROUP BY total_price; -- 알리아스 그대로 적으면, 에러 발생할 가능성이 높음

 

 

예시 (⭕)

SELECT price * quantity AS total_price
FROM sales
GROUP BY price * quantity;