최원종의 개발 블로그

SQL 쿼리 실행 순서 본문

MySQL

SQL 쿼리 실행 순서

chl6698 2026. 4. 6. 17:22

SQL 쿼리 실행 순서 차이

우리가 쓰는 순서:
  SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY → LIMIT

실제 실행 순서:
  FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT

 


일반적인 실행 순서 상세

순서 역할
1 FROM / JOIN 테이블을 가져와 결합
2 ON JOIN 조건 적용
3 WHERE 개별 행 필터
4 GROUP BY 행을 그룹으로 묶기
5 HAVING 그룹 필터
6 SELECT 출력할 컬럼 결정
7 DISTINCT 중복 제거
8 ORDER BY 정렬
9 LIMIT 행 수 제한

 


 

ORDER BY에서 SELECT별칭을 쓸 수 있는 이유

ORDER BY 는 SELECT 이후에 실행됩니다.
그래서 SELECT 에서 정의한 별칭을 ORDER BY 에서 사용할 수 있습니다.

SELECT COUNT(*) AS 좋아요수      ← 6번째 실행 (별칭 정의)
FROM like_log
GROUP BY post_id
ORDER BY 좋아요수 DESC;          ← 8번째 실행 (별칭 사용 가능)

 

WHERE에서 집계함수를 쑬 수 없는 이유

WHERE 는 3번째 실행, 집계함수는 GROUP BY(4번) 이후에 계산됩니다.
아직 집계가 안 된 상태에서 집계 결과를 조건으로 쓸 수 없습니다.

WHERE COUNT(*) >= 3     -- 오류! 아직 COUNT 결과가 없음 (3번째 실행)
HAVING COUNT(*) >= 3    -- 정상! GROUP BY 이후에 COUNT 결과 존재 (5번째 실행)

 


LIMIT와 OFFSET

use shop;

-- 1 페이에 5건 보여 줌 
select * from product order by id limit 5 offset 0; 

-- 2 페이지에 5건을 또 보여 줘야 함. 
select * from product order by id limit 5 offset 5;

-- 3 페이지에 5건을 또 보여 줘야 함.  
-- 1 페이지당 5건 / 
-- 3 페이지라면 몇 건을 건너 뛰어야 할까? 10건 
select * from product order by id limit 5 offset 10;

-- 4 페이지라면 몇 건을 건너 뛰어야 할까? 15건 
 select * from product order by id limit 5 offset 15;
더보기

1페이지에 5건

2페이지에 5건

 

'MySQL' 카테고리의 다른 글

DISTINCT 와 COUNT - 20  (0) 2026.04.06
GROUP BY 와 HAVING 절 - 19  (0) 2026.04.06
MySQL 주요 함수 - 18  (0) 2026.04.05
샘플 데이터 활용 문제 - 17 _ 1(인라인 필터 추가 설명)  (1) 2026.04.05
샘플 데이터 활용 문제 - 17  (1) 2026.04.04