SQL 기본 문법
1. SQL 문법과 실행 순서
- SQL 문법 순서:
SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY - SQL 실행 순서:
FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY - 문법 순서와 실행 순서가 다르므로, HAVING에서 별칭 사용이 제한될 수 있음.
2. GROUP BY와 집계 함수
- 집계 함수: COUNT, SUM, AVG, MIN, MAX
- GROUP BY: 데이터를 특정 기준으로 그룹화
- Excel 피벗 테이블과 유사한 개념
- 예: 성별 회원 수, 가입 연도별 집계, 생년월별 회원 수 등
3. WHERE vs HAVING
- WHERE: GROUP BY 이전 데이터 필터링
- HAVING: 그룹화 이후 집계된 데이터 필터링
- 예시:
- WHERE → GENDER='M' 조건으로 원본 데이터 필터
- HAVING → 그룹화된 결과에서 COUNT(MEM_NO) >= 100 조건 적용
4. SQL 코딩 테스트 예시
- 가입월별 회원 수 조회 (성별=여성, 가입월≥6월)
- 집계 결과 중 TOT_MEM ≥ 100인 데이터만 필터
- SERVICE_CODE별 QTY 합계/평균 집계
- 조건에 따라 HAVING으로 QTY_SUM ≤ 150 & QTY_AVG ≥ 3 필터링
* 이 글은 제로베이스 데이터사이언스 파트타임 스쿨의 강의 자료 일부를 발췌하여 작성되었습니다.
💡 생각 정리
이번 강의에서는 SQL의 실행 순서와 그룹화 개념을 명확히 이해하는 것이 핵심이었다.
지금까지는 단순히 SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY 순서로만 외웠지만, 실제 SQL이 내부적으로 실행되는 순서는 그 반대에 가깝다는 점이 인상 깊었다.
즉, SQL은 데이터를 먼저 불러오고(From), 조건으로 걸러낸 뒤(Where), 그룹화(Group By)한 후에 최종적으로 출력(Select) 한다는 원리를 따라간다.
이 실행 순서를 이해하니 왜 HAVING 절에서는 별칭(alias)을 사용할 수 없는지 자연스럽게 납득됐다.
별칭은 SELECT 단계에서 만들어지기 때문에, 그 이전 단계인 HAVING에서는 아직 존재하지 않는다는 구조적인 이유가 있었던 것이다.
또한 GROUP BY와 집계 함수의 조합이 단순한 데이터 요약을 넘어, “데이터의 의미를 한눈에 파악하는 도구”가 될 수 있다는 점이 인상적이었다.
예를 들어, Excel의 피벗 테이블처럼 성별·연령·기간 등으로 데이터를 그룹화하면, 단순한 숫자 집합이 정보로 변환되는 과정을 직접 경험할 수 있었다.
WHERE와 HAVING의 차이도 단순 문법이 아닌 “데이터 처리 시점의 차이”로 이해하게 되었다.
WHERE은 원본 데이터를 필터링하는 전처리,
HAVING은 그룹화된 결과를 필터링하는 후처리라는 인식이 생기면서, 복잡한 SQL 로직을 훨씬 명확하게 설계할 수 있게 되었다.
결국 이번 강의는 SQL을 단순한 조회 언어로 보는 관점을 넘어서, 데이터의 흐름과 구조를 논리적으로 설계하는 사고력을 기르는 계기가 되었다.
🚀 적용점
- SQL의 실행 순서(From → Where → Group By → Having → Select → Order By) 를 그림이나 순서도로 직접 정리하여 반복 학습한다.
- 동일한 쿼리를 작성하되, WHERE와 HAVING의 위치를 바꿔 실행해보며 결과 차이를 눈으로 확인한다.
- 실제 데이터셋에서 GROUP BY와 집계 함수를 조합해 성별, 연도, 지역 등 다양한 기준으로 데이터를 요약해본다.
- Excel 피벗 테이블과 SQL GROUP BY 결과를 비교하여, SQL의 강력한 데이터 처리 능력을 체감한다.
- 코딩 테스트나 실무 상황에서, WHERE은 전처리 / HAVING은 후처리라는 원칙을 염두에 두고 효율적인 쿼리 구조를 설계한다.
- 별칭(alias)을 사용하는 시점에 따라 오류가 발생할 수 있으므로, HAVING 절에서는 별칭 대신 원본 컬럼명 또는 집계함수를 사용하는 습관을 들인다.
👉 이번 강의는 SQL의 핵심인 “데이터 처리의 순서와 흐름”을 이해하는 단계였다.
이 개념을 확실히 익히면, 복잡한 서브쿼리나 윈도우 함수까지 훨씬 수월하게 이해할 수 있다.
'데이터' 카테고리의 다른 글
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-5 (0) | 2025.10.04 |
|---|---|
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-4 (0) | 2025.10.04 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-2 (0) | 2025.10.02 |
| 제로베이스 데이터사이언스 스쿨 - Part.02 데이터 분석을 위한 SQL-1 (0) | 2025.10.01 |
| 제로베이스 데이터사이언스 스쿨 - Part 01. 데이터 분석을 위한 Python_Chapter 03-3 (0) | 2025.09.30 |