본문 바로가기
자격증 준비/SQLD

SQL 실행 순서 한 번에 이해하기: SELECT문을 읽는 기본 구조

by 코딩사무소장 2026. 3. 10.
반응형

SQL 실행 순서 한 번에 이해하기: SELECT문을 읽는 기본 구조

SQL을 처음 공부할 때 가장 헷갈리는 부분 중 하나가 SQL 실행 순서입니다. 쿼리는 SELECT → FROM → WHERE처럼 보이는데, 실제로는 그 순서대로 동작하지 않습니다. 결론부터 말하면 보통 SQL은 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 흐름으로 이해하는 것이 가장 쉽습니다. 이 글에서는 SQL 초보자도 바로 이해할 수 있도록 SQL 실행 순서와 각 단계의 역할을 예제와 함께 정리해보겠습니다.

이 글은 이런 분께 추천합니다
  • SELECT문은 읽을 줄 아는데 실행 흐름이 헷갈리는 분
  • WHERE, GROUP BY, HAVING 위치가 자꾸 섞이는 분
  • SQLD를 준비하면서 SQL 문제풀이가 막히는 분
  • 비전공자 기준으로 SQL 기본 구조를 정리하고 싶은 분

SQL 실행 순서를 먼저 한 줄로 정리하면

SQL은 보통 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 순서로 이해하면 됩니다.

초보자가 헷갈리는 이유는 SQL 문장을 쓰는 순서와 실제 처리 흐름이 다르기 때문입니다. 쿼리는 SELECT로 시작하지만, 실제로는 어떤 테이블에서 데이터를 가져올지 먼저 정한 뒤, 조건을 걸고, 그룹을 만들고, 마지막에 보여줄 컬럼을 선택하는 식으로 생각하는 편이 훨씬 이해하기 쉽습니다.

왜 SQL 실행 순서를 알아야 할까

SQL 실행 순서를 모르면 아래 같은 부분에서 자주 막힙니다.

  • WHERE와 HAVING 차이가 헷갈린다
  • 집계 함수가 언제 계산되는지 모르겠다
  • GROUP BY를 썼을 때 왜 특정 컬럼이 오류가 나는지 모르겠다
  • 문제를 풀 때 조건절 위치를 자꾸 틀린다

특히 SQLD처럼 개념 차이를 묻는 문제에서는 실행 순서를 이해하고 있으면 오답을 많이 줄일 수 있습니다.

SQL 문장 작성 순서와 실행 순서는 다르다

보통 우리가 쓰는 SELECT문은 이렇게 생겼습니다.

SELECT column
FROM table
WHERE condition
GROUP BY column
HAVING condition
ORDER BY column;

하지만 이해할 때는 아래처럼 생각하는 것이 좋습니다.

구분 순서 의미
작성 순서 SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY 우리가 눈으로 보는 쿼리 형태
이해용 실행 순서 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY SQL이 데이터를 처리하는 흐름

1단계: FROM - 어떤 테이블에서 가져올지 정한다

SQL 실행은 보통 FROM부터 생각하면 쉽습니다. 먼저 어떤 테이블에서 데이터를 가져올지 정하는 단계입니다.

SELECT *
FROM employees;

이 단계에서는 “어디서 데이터를 가져올 것인가”를 정한다고 생각하면 됩니다.

2단계: WHERE - 필요한 행만 먼저 걸러낸다

테이블을 정한 뒤에는 WHERE로 조건에 맞는 행만 먼저 골라냅니다. 즉, 아직 그룹화 전이고 개별 행(row)을 필터링하는 단계입니다.

SELECT *
FROM employees
WHERE department = '개발팀';

즉, 전체 직원 중에서 개발팀 직원만 먼저 남기는 것입니다.

3단계: GROUP BY - 같은 값끼리 묶는다

WHERE로 행을 줄인 뒤에는 GROUP BY로 같은 값을 기준으로 묶을 수 있습니다. 이 단계부터는 개별 행보다 그룹 단위로 보게 됩니다.

SELECT department
FROM employees
GROUP BY department;

위 쿼리는 부서별로 데이터를 묶는다고 이해하면 됩니다.

4단계: HAVING - 그룹 결과에 조건을 건다

GROUP BY 뒤에는 HAVING을 사용할 수 있습니다. HAVING은 그룹화가 끝난 뒤 나온 결과를 다시 필터링하는 단계입니다.

SELECT department, COUNT(*) AS cnt
FROM employees
GROUP BY department
HAVING COUNT(*) >= 5;

여기서는 부서별로 묶은 뒤, 인원이 5명 이상인 부서만 남기고 있습니다.

5단계: SELECT - 최종적으로 보여줄 컬럼을 고른다

이제 SELECT 단계에서 최종적으로 어떤 값을 보여줄지 결정합니다. 초보자 입장에서는 SQL이 SELECT로 시작하니까 가장 먼저 실행된다고 느끼기 쉽지만, 실제로는 앞 단계들이 먼저 처리된다고 이해하는 편이 좋습니다.

쉽게 말하면 데이터를 먼저 고르고, 걸러내고, 묶고, 그다음 보여줄 값을 선택한다고 생각하면 됩니다.

6단계: ORDER BY - 마지막에 정렬한다

마지막에는 ORDER BY로 결과를 정렬합니다. 즉, 이미 만들어진 최종 결과를 보기 좋게 순서만 바꾸는 단계라고 이해하면 됩니다.

SELECT department, COUNT(*) AS cnt
FROM employees
GROUP BY department
ORDER BY cnt DESC;

이렇게 하면 부서별 인원 수를 구한 뒤, 많은 순서대로 정렬하게 됩니다.

예제로 SQL 실행 순서를 한 번에 보면

SELECT department, COUNT(*) AS cnt
FROM employees
WHERE hire_year >= 2024
GROUP BY department
HAVING COUNT(*) >= 3
ORDER BY cnt DESC;

이 쿼리는 아래 흐름으로 이해하면 됩니다.

  1. FROM: employees 테이블에서 가져온다
  2. WHERE: 2024년 이후 입사자만 남긴다
  3. GROUP BY: department 기준으로 묶는다
  4. HAVING: 인원이 3명 이상인 부서만 남긴다
  5. SELECT: 부서명과 인원 수를 보여준다
  6. ORDER BY: 인원 수 많은 순으로 정렬한다

SQL 실행 순서를 모르면 자주 하는 실수

자주 하는 실수 1

집계 함수 조건을 WHERE에 넣는 것

WHERE는 그룹화 전 조건이라 COUNT, SUM 같은 집계 결과를 기준으로 필터링하는 데는 맞지 않는 경우가 많습니다.

자주 하는 실수 2

SELECT에 있는 컬럼이 가장 먼저 선택된다고 생각하는 것

실제로는 FROM과 WHERE를 거친 뒤 필요한 데이터 범위가 먼저 정해집니다.

자주 하는 실수 3

WHERE와 HAVING 역할을 섞어 쓰는 것

WHERE는 행 조건, HAVING은 그룹 조건이라는 기준을 같이 기억해야 헷갈림이 줄어듭니다.

헷갈릴 때는 이렇게 외우면 쉽다

  • FROM = 어디서 가져올까
  • WHERE = 어떤 행만 남길까
  • GROUP BY = 무엇끼리 묶을까
  • HAVING = 어떤 그룹만 남길까
  • SELECT = 무엇을 보여줄까
  • ORDER BY = 어떤 순서로 보여줄까

핵심 요약

  • SQL은 눈에 보이는 작성 순서와 이해용 실행 순서가 다릅니다.
  • 보통 FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY 흐름으로 이해하면 쉽습니다.
  • WHERE는 행 조건, HAVING은 그룹 조건입니다.
  • 실행 순서를 이해하면 SQLD 문제풀이에서도 실수를 줄이기 좋습니다.

FAQ

SQL은 왜 SELECT로 쓰는데 FROM부터 이해하나요?

SQL은 문장을 작성하는 순서와 데이터를 처리하는 흐름이 다르기 때문입니다. 초보자는 FROM부터 이해하는 편이 전체 구조를 잡기 쉽습니다.

WHERE와 HAVING은 실행 순서에서 어떻게 다른가요?

WHERE는 GROUP BY 전에 행을 걸러내고, HAVING은 GROUP BY 후 그룹 결과를 걸러냅니다.

ORDER BY는 언제 적용되나요?

최종 결과가 만들어진 뒤 마지막에 정렬하는 단계라고 이해하면 쉽습니다.

SQLD에서도 SQL 실행 순서를 외워야 하나요?

단순 암기보다 개념 이해가 중요하지만, 실행 순서를 알고 있으면 WHERE/HAVING, GROUP BY 관련 문제를 더 쉽게 풀 수 있습니다.

비전공자는 SQL 실행 순서를 어떻게 외우는 게 좋나요?

테이블 선택 → 행 필터링 → 그룹화 → 그룹 필터링 → 결과 선택 → 정렬 흐름으로 문장처럼 외우면 기억하기 쉽습니다.

반응형