정보처리기사

📘 [5일차] SQL 고급 문법 – 서브쿼리, 집계 함수, HAVING절 완전 정리

news800905 2025. 5. 3. 11:45
728x90

💡 주제: 조건문 안의 SELECT, 그룹 조건 필터링까지 실무형 SQL 스킬 익히기


🧩 오늘의 학습 목표

  • 서브쿼리(Subquery)의 개념과 활용법을 익힌다
  • 집계 함수(SUM, AVG, COUNT 등)의 사용법을 이해한다
  • HAVING절을 통해 그룹 결과에 조건을 거는 방법을 익힌다

🎯 이론 설명


✅ 1. 서브쿼리 (Subquery)

서브쿼리란?

  • SQL 문 안에서 또 다른 SELECT 문을 사용하는 구조
  • 주로 WHERE, FROM, SELECT 절 안에 사용

📌 예시 1: 특정 평균 이상인 학생 조회

sql
복사편집
SELECT name, score FROM student WHERE score > (SELECT AVG(score) FROM student);
  • 내부 쿼리: 전체 평균 점수
  • 외부 쿼리: 그보다 점수가 높은 학생 목록 조회

📌 예시 2: 다른 테이블의 값을 조건으로 활용

sql
복사편집
SELECT name FROM employee WHERE dept_id IN (SELECT dept_id FROM department WHERE location = '서울');

서울에 위치한 부서에 소속된 직원만 조회


✅ 2. 집계 함수 (Aggregate Functions)

집계 함수는 다수의 행 데이터를 요약하는 함수입니다.
주로 GROUP BY와 함께 사용됩니다.

함수의미
SUM() 합계
AVG() 평균
COUNT() 개수
MAX() 최대값
MIN() 최소값
 

📌 예시:

sql
복사편집
SELECT department, AVG(score) FROM student GROUP BY department;

학과별 평균 점수 계산


✅ 3. HAVING 절

HAVING은 GROUP BY로 묶은 결과에 조건을 걸 때 사용합니다.
WHERE은 행 필터링, HAVING은 그룹 필터링!

📌 예시: 평균 점수가 70 이상인 학과만 조회

sql
복사편집
SELECT department, AVG(score) FROM student GROUP BY department HAVING AVG(score) >= 70;

WHERE AVG(score) >= 70 이라고 쓰면 에러 발생! HAVING을 써야 함.


📝 기출문제 예제

문제: 다음 SQL 문장의 설명으로 옳은 것은?

sql
복사편집
SELECT department, COUNT(*) FROM employee GROUP BY department HAVING COUNT(*) > 5;

① 직원이 5명 이상인 부서를 조회
② 부서 수를 조회
③ 직원 수가 정확히 5명인 부서를 조회
④ 모든 부서와 직원 수를 조회

정답: ①

🧠 해설: GROUP BY department로 부서별 그룹을 만들고,
HAVING COUNT(*) > 5로 직원이 5명 이상인 그룹만 남깁니다.


💡 오늘의 정리 포인트

  • ✅ 서브쿼리는 WHERE, FROM, SELECT 절 내부에 들어가는 SELECT 문
  • ✅ 집계 함수는 여러 행을 계산하여 하나의 결과를 출력
  • ✅ HAVING은 GROUP BY 후 조건을 줄 때 사용, WHERE은 그룹 이전에 사용
  • ✅ 실기에서 많이 나오는 평균 이상 구하기, 최고값 찾기 유형 자주 연습할 것!
728x90