SQL 쿼리에서 각 절이 실행되는 순서를 자주 까먹어서 오늘은 순서를 정리해보고 실제 작성된 쿼리를 대상으로 실행 순서를 작성해 보려고 합니다.
SQL 쿼리는 다음과 같은 순서로 각 절이 실행됩니다.
(FROM -> JOIN -> ON) -> WHERE -> GROUP BY -> HAVING -> ORDER BY -> LIMIT
https://blog.bytebytego.com/p/ep50-visualizing-a-sql-query
EP50: Visualizing a SQL Query
This week’s system design refresher: Cloud-native vs. Cloud computing (Youtube video) Visualizing a SQL query Evolution of programming languages Linux Storage Stack Diagram The most useful engineering conversation you’ll hear each week (Sponsored) Dev
blog.bytebytego.com
제가 참고한 사이트 입니다. 그림이 매우 잘 그려져 있어서 많은 도움이 됐습니다.
이 문제를 대상으로 쿼리가 어떤 순서로 실행되는지 알아봅시다.
https://school.programmers.co.kr/learn/courses/30/lessons/131534
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
-- 코드를 입력하세요
SELECT YEAR(SALES_DATE) AS YEAR,
MONTH(SALES_DATE) AS MONTH,
COUNT(distinct USER_INFO.USER_ID) AS PURCHASED_USERS,
ROUND(
COUNT(distinct USER_INFO.USER_ID) / (
SELECT COUNT(*)
FROM USER_INFO
WHERE USER_INFO.JOINED LIKE '2021-%'
),
1
) AS PURCHASED_RATIO
FROM USER_INFO
INNER JOIN ONLINE_SALE
ON USER_INFO.USER_ID = ONLINE_SALE.USER_ID
WHERE USER_INFO.JOINED LIKE '2021-%'
GROUP BY DATE_FORMAT(SALES_DATE,'%Y-%m')
ORDER BY YEAR, MONTH
;
1. FROM and Join
먼저 FROM 과 Join으로 작업해야 할 전체 테이블을 여기서 만들어 줍니다.
FROM 에서 선택한 테이블 USER_INFO 와 JOIN 으로 선택한 테이블 ONLINE_SALE 을 INNER JOIN 한 테이블을 만들어 줍니다.
2. WHERE
FROM 절 이후에 내려온 테이블에 조건을 적용해서 필요한 행만 뽑아내는 구간입니다.
USER_INFO.JOINED LIKE '2021-%'
2021- 이라는 문자를 앞부분에 가지고 있는 행들만 뽑아줍니다.
3. GROUP BY
GROUP BY 컬럼 이 주어지면 컬럼을 기준으로 데이터를 그룹화 해줍니다.
GROUP BY DATE_FORMAT(SALES_DATE,'%Y-%m')
년 월 별로 그룹화된 테이블이 만들어 집니다.
2022-01 2022-02 ... 이런 식으로 각 값에 해당되는 행들이 그룹화 됩니다.
4. ORDER BY
ORDER BY 로 테이블을 오름차순 해줍니다.
SQL 쿼리에서 **각 절(Clause)**이 실행되는 순서에 대한 이해는 쿼리 최적화나 성능 분석에서 중요합니다!
'DBMS' 카테고리의 다른 글
[RDB] MariaDB Master-Slave Replication (0) | 2025.03.10 |
---|---|
Jpa Audit (2) | 2024.10.21 |