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