SQLD 개념 정리
2026.03.05. 16:11
1️⃣ 서브쿼리 유형
비연관 서브쿼리
메인쿼리와 독립적으로 실행
먼저 실행 → 결과를 메인쿼리에 전달
SELECT *
FROM emp
WHERE salary > (
SELECT AVG(salary)
FROM emp
);핵심 문장
메인쿼리에 값을 제공하기 위한 목적
연관 서브쿼리
메인쿼리 컬럼을 참조
행마다 서브쿼리 실행
SELECT e1.*
FROM emp e1
WHERE salary >
(SELECT AVG(salary)
FROM emp e2
WHERE e2.dept = e1.dept);핵심 문장
메인쿼리의 각 행마다 실행된다.
2️⃣ 서브쿼리 종류
종류위치특징스칼라 서브쿼리SELECT1행 1열 반환인라인 뷰FROM가상 테이블서브쿼리WHERE조건 비교
인라인 뷰
SELECT *
FROM (
SELECT dept_id, AVG(salary) avg_sal
FROM emp
GROUP BY dept_id
) t
WHERE avg_sal > 3000;3️⃣ 단일행 vs 다중행 서브쿼리
구분연산자단일행=, >, <, >=, <=다중행IN, ANY, ALL, EXISTS
4️⃣ IN 연산자
col IN (1,2,3)의미
col =1 OR col=2 OR col=3👉 앞에 비교 대상이 반드시 필요
5️⃣ HAVING
GROUP BY 이후 조건
집계 함수 사용 가능
SELECT dept_id, COUNT(*)
FROM emp
GROUP BY dept_id
HAVING COUNT(*) > 5;GROUP BY 없이도 사용 가능
이 경우
전체 테이블 = 하나의 그룹6️⃣ CASE + COUNT 패턴
COUNT(CASE WHEN a = 0 THEN 1 END)의미
조건을 만족하는 행 개수이유
COUNT는 NULL을 세지 않는다7️⃣ 윈도우 함수 (OVER)
기본 구조
함수() OVER(
PARTITION BY ...
ORDER BY ...
)옵션의미PARTITION BY그룹ORDER BY정렬
ROWS BETWEEN
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW의미
첫 행 ~ 현재 행👉 누적합
CURRENT ROW
현재 행예
ROWS CURRENT ROW→ 현재 행만
8️⃣ ROW_NUMBER()
ROW_NUMBER() OVER(
PARTITION BY dept
ORDER BY salary DESC
)의미
그룹 내 순위9️⃣ GROUPING 함수
ROLLUP / CUBE에서 생성된 NULL 구분
GROUPING(col)값의미0실제 데이터1집계로 생성된 NULL
⚠️
NULL이라고 해서 항상 GROUPING=1 아님🔟 ROLLUP vs CUBE
ROLLUP
GROUP BY ROLLUP(A,B)생성 그룹
(A,B)
(A,NULL)
(NULL,NULL)→ 계층적 집계
CUBE
GROUP BY CUBE(A,B)생성 그룹
(A,B)
(A,NULL)
(NULL,B)
(NULL,NULL)→ 모든 조합
1️⃣1️⃣ 뷰(View)
정의
SELECT 문을 저장한 가상 테이블특징
특징설명데이터 저장XSELECT 저장O보안컬럼 제한 가능
뷰 장점 (시험 중요)
1️⃣ 논리적 데이터 독립성
2️⃣ 보안
3️⃣ 편리성
4️⃣ 재사용성
1️⃣2️⃣ 테이블 구조 변경 vs 뷰
변경영향컬럼 추가자동 반영 안됨컬럼 삭제뷰 오류컬럼 변경오류 가능
하지만
뷰를 수정하면
응용프로그램은 수정 안 해도 된다→ 논리적 데이터 독립성
1️⃣3️⃣ 윈도우 함수 문제 풀이 핵심
예
ROW_NUMBER() OVER(PARTITION BY 부서 ORDER BY 연봉 DESC)→ 부서별 연봉 순위
📌 SQLD 시험에서 진짜 많이 나오는 것
출제 빈도 TOP
1️⃣ ROLLUP / CUBE
2️⃣ GROUPING
3️⃣ OVER (ROW_NUMBER / SUM)
4️⃣ HAVING vs WHERE
5️⃣ 서브쿼리 종류
6️⃣ 인라인뷰
7️⃣ COUNT + CASE