SQL 기본 및 활용

SELECT문과 실행 순서 — SQLD, 별칭은 어디서 쓸 수 있나

CBT 전자문제집 편집팀
#SQLD#SELECT#실행순서#별칭#WHERE#HAVING

SELECT문은 테이블에서 원하는 행·열을 조회하는 SQL의 기본입니다. SQLD 제2과목에서는 이 단원 자체보다 "논리적 실행 순서" 를 알아야 풀리는 문제가 다른 단원까지 이어집니다. 순서를 알면 별칭을 어디서 쓸 수 있는지, WHERE와 HAVING이 왜 다른지가 한 번에 풀립니다.

이 단원, 시험에서 어디에 나오나 (출제 비중)

  • 제2과목 「SQL 기본 및 활용」 = 40문항 · 80점(문항당 2점, 전체의 80%). 합격을 좌우하는 과목입니다.
  • 제2과목은 긴 SQL을 주고 "최종 결과표"를 예측하게 하는 문제가 많습니다. 그 토대가 이 실행 순서라, 여기서 흔들리면 조인·그룹함수까지 연쇄로 틀립니다. (단원별 문항수는 공개되지 않습니다 — 출처: KDATA 출제기준.)

출제 포인트 — 시험이 실제로 묻는 것

  1. 논리적 실행 순서 FROM→WHERE→GROUP BY→HAVING→SELECT→ORDER BY (최다 함정)
  2. 별칭(alias)을 쓸 수 있는 위치 — WHERE·GROUP BY엔 못 쓰고 ORDER BY에서만
  3. WHERE(그룹 전) vs HAVING(그룹 후) 의 필터링 시점

① 논리적 실행 순서 — 작성 순서와 다르다

우리가 쓰는 순서SELECT … FROM … WHERE … 지만, DB가 실행하는 순서는 다릅니다.

SELECT 논리적 실행 순서: FROM, WHERE, GROUP BY, HAVING, SELECT, ORDER BY 순서로 실행되며 WHERE는 그룹 전 행 필터, HAVING은 그룹 후 필터이고, 별칭은 SELECT에서 만들어져 ORDER BY에서만 쓸 수 있음

그림 1. 실행 순서. FROM으로 테이블을 잡고 → WHERE로 행을 거른 뒤 → 그룹을 만들고 → HAVING으로 그룹을 거른 다음 → SELECT로 열을 고르고 → 마지막에 ORDER BY로 정렬합니다. (자작 도식)

순서하는 일
1FROM대상 테이블·조인
2WHERE개별 행 필터(그룹 전)
3GROUP BY행을 그룹으로 묶음
4HAVING그룹 필터(그룹 후)
5SELECT열 선택·별칭 생성
6ORDER BY정렬(맨 마지막)

② 별칭은 ORDER BY에서만 — 대표 함정

별칭은 5번(SELECT)에서 비로소 만들어집니다. 그래서 그보다 먼저 실행되는 WHERE·GROUP BY·HAVING에서는 별칭을 쓸 수 없습니다. 별칭을 쓸 수 있는 곳은 실행이 더 뒤인 ORDER BY입니다.

SELECT 급여 * 12 AS 연봉
FROM   사원
WHERE  연봉 >= 60000000     -- ✘ 오류: WHERE는 SELECT보다 먼저라 '연봉'을 모름
ORDER BY 연봉 DESC;          -- ✔ ORDER BY는 SELECT 뒤라 별칭 사용 가능

WHERE 에서 별칭을 쓰려면 별칭 대신 원래 식(급여 * 12 >= 60000000)을 써야 합니다.

③ WHERE와 HAVING은 "거르는 시점"이 다르다

같은 필터 같지만, WHERE는 그룹을 만들기 전 개별 행을, HAVING은 그룹을 만든 뒤 그룹을 거릅니다. 그래서 집계 함수 조건은 HAVING에만 쓸 수 있습니다.

SELECT 부서, AVG(급여)
FROM   사원
WHERE  입사일 >= '2020-01-01'   -- 행 조건(그룹 전)
GROUP BY 부서
HAVING AVG(급여) >= 5000;        -- 집계 조건(그룹 후) → WHERE엔 못 씀

(WHERE·HAVING의 자세한 차이는 [GROUP BY·HAVING] 단원에서 이어집니다.)

한 장 정리 (암기 카드)

  • 실행 순서: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
  • 별칭은 SELECT(5)에서 생성WHERE·GROUP BY·HAVING엔 못 쓰고 ORDER BY(6)에서만.
  • WHERE = 그룹 전 행, HAVING = 그룹 후 그룹(집계 조건은 HAVING).
  • 헷갈리면 "쓰는 순서 ≠ 실행 순서"를 떠올린다.

참고 출처

CBT 전자문제집 편집팀

자격증 개념과 기출 유형을 쉽게 정리합니다.

관련 글