모든 강의를 무료로 볼 수 있어요. 회원가입 없이도 학습 가능합니다.

13강 / 전체 13강

SQL 심화 — 서브쿼리·뷰·인덱스·트랜잭션

6분 읽기 조회 1

서브쿼리 유형과 뷰·인덱스 구조를 이해하고, ACID 4속성과 트랜잭션 격리수준 4단계의 이상 현상을 완벽히 정리합니다.

🔄 서브쿼리의 종류와 실행 순서

이 섹션에서는 쿼리 안에 포함된 또 다른 쿼리인 서브쿼리의 종류와 특성을 살펴보겠습니다.

서브쿼리(Subquery)는 SELECT 문 안에 포함된 또 다른 SELECT 문입니다. 위치에 따라 WHERE 절 서브쿼리, FROM 절 서브쿼리(인라인 뷰), SELECT 절 서브쿼리(스칼라 서브쿼리)로 구분됩니다.

단일행 서브쿼리는 결과가 1행 1열인 서브쿼리로 =, >, <, >=, <= 비교 연산자를 사용합니다. 결과가 여러 행이면 오류가 발생합니다.

다중행 서브쿼리는 결과가 여러 행인 서브쿼리로 IN, ANY, ALL, EXISTS 연산자를 사용합니다.

연산자의미예시
IN목록 중 하나와 같으면 TRUEWHERE 학번 IN (SELECT 학번 FROM 우수학생)
ANY하나라도 조건 만족하면 TRUEWHERE 급여 > ANY (서브쿼리) → 최솟값보다 크면
ALL모두 조건 만족해야 TRUEWHERE 급여 > ALL (서브쿼리) → 최댓값보다 크면
EXISTS서브쿼리 결과가 존재하면 TRUEWHERE EXISTS (서브쿼리) → 행 존재 여부만 확인

상관 서브쿼리(Correlated Subquery)는 외부 쿼리의 값을 참조하는 서브쿼리로, 외부 쿼리의 각 행마다 서브쿼리가 실행됩니다. 실행 순서: 외부 쿼리 1행 읽기 → 서브쿼리 실행 → 결과로 외부 쿼리 조건 판단 → 외부 쿼리 다음 행으로 이동. 일반 서브쿼리는 서브쿼리가 먼저 실행되지만 상관 서브쿼리는 외부 쿼리가 먼저 시작됩니다.

기출 함정: "서브쿼리는 항상 외부 쿼리보다 먼저 실행된다" → 틀림. 상관 서브쿼리는 외부 쿼리의 각 행마다 실행됩니다. "IN과 EXISTS는 항상 동일한 결과를 반환한다" → 주의. NULL 처리 방식이 다릅니다.

👁️ 뷰(View) — 가상 테이블의 특성

이 섹션에서는 실제 데이터를 저장하지 않는 가상 테이블인 뷰의 개념과 특성을 살펴보겠습니다.

뷰(View)는 하나 이상의 기본 테이블에서 유도된 가상 테이블입니다. 뷰 자체는 데이터를 저장하지 않으며, 뷰를 조회할 때마다 정의된 SELECT 문이 실행됩니다.

뷰의 3가지 핵심 특성은 다음과 같습니다. 논리적 데이터 독립성: 기본 테이블 구조가 변경되어도 뷰를 통한 접근은 영향받지 않습니다. 보안성: 기본 테이블의 특정 열이나 행만 노출하여 민감 정보를 보호합니다. 사용 편의성: 복잡한 쿼리를 뷰로 정의하여 단순하게 사용할 수 있습니다.

뷰 수정 불가 조건: 뷰를 통한 데이터 수정(INSERT·UPDATE·DELETE)이 불가능한 경우가 있습니다. GROUP BY·HAVING·집계 함수가 포함된 뷰, DISTINCT가 포함된 뷰, UNION이 포함된 뷰, 복수 테이블 조인 뷰(일부 불가), 계산 열(산술식·함수)을 포함한 뷰는 수정이 제한됩니다.

기출 함정: "뷰는 독립적인 데이터를 저장한다" → 틀림. 뷰는 가상 테이블로 데이터를 저장하지 않습니다. "모든 뷰는 UPDATE가 가능하다" → 틀림. 집계 함수·GROUP BY 포함 뷰는 UPDATE 불가입니다.

🌲 인덱스 구조와 설계 기준

이 섹션에서는 데이터베이스 성능의 핵심인 인덱스의 구조와 설계 기준을 살펴보겠습니다.

인덱스(Index)는 테이블의 특정 열에 대한 검색 속도를 향상시키기 위한 데이터 구조입니다. 책의 색인과 유사하게, 인덱스를 통해 전체 테이블을 스캔하지 않고 원하는 데이터를 빠르게 찾을 수 있습니다.

인덱스 종류구조특징
B-Tree 인덱스균형 이진 탐색 트리가장 일반적, 범위 검색에 적합, O(log n)
클러스터드(Clustered)물리적 정렬과 동일테이블당 1개만 가능, 기본키에 자동 생성
논클러스터드(Non-clustered)별도 인덱스 구조테이블당 여러 개 가능, 추가 공간 필요
해시 인덱스해시 함수동등 검색 O(1), 범위 검색 불가
비트맵 인덱스비트 배열카디날리티가 낮은 열에 적합(성별·지역 등)

인덱스 설계 기준: WHERE 절에 자주 사용되는 열, JOIN 조건에 사용되는 열, ORDER BY·GROUP BY에 사용되는 열에 인덱스를 생성합니다. 반대로 데이터 변경(INSERT·UPDATE·DELETE)이 잦은 열은 인덱스 유지 비용이 크므로 피합니다.

⚛️ ACID 속성과 트랜잭션 격리수준

이 섹션에서는 트랜잭션의 4가지 ACID 속성과 격리수준 4단계별 이상 현상을 살펴보겠습니다.

ACID는 트랜잭션이 갖춰야 할 4가지 핵심 속성입니다.

  • 원자성(Atomicity): 트랜잭션 내 모든 연산은 완전히 실행되거나(COMMIT) 전혀 실행되지 않아야(ROLLBACK) 합니다. All or Nothing.
  • 일관성(Consistency): 트랜잭션 실행 전후로 데이터베이스는 일관된 상태를 유지해야 합니다. 제약조건이 항상 만족되어야 합니다.
  • 격리성(Isolation): 동시에 실행되는 트랜잭션들은 서로 간섭하지 않아야 합니다. 중간 결과가 다른 트랜잭션에 보이지 않아야 합니다.
  • 지속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 영구적으로 반영되어야 합니다. 시스템 장애에도 유지됩니다.

암기법: "아일격지(아이고 격리해!)" — 원자성·일관성·격리성·지속성.

격리수준Dirty ReadNon-Repeatable ReadPhantom Read
READ UNCOMMITTED발생발생발생
READ COMMITTED방지발생발생
REPEATABLE READ방지방지발생
SERIALIZABLE방지방지방지

3가지 이상 현상: Dirty Read — 아직 COMMIT되지 않은 데이터를 다른 트랜잭션이 읽음. Non-Repeatable Read — 같은 행을 두 번 읽었는데 결과가 달라짐(중간에 UPDATE/DELETE). Phantom Read — 같은 조건으로 두 번 조회했는데 행 수가 달라짐(중간에 INSERT).

기출 함정: "SERIALIZABLE은 성능이 가장 좋다" → 틀림. 가장 강한 격리수준이므로 성능이 가장 낮습니다. "READ COMMITTED에서 Dirty Read가 발생한다" → 틀림. READ COMMITTED는 Dirty Read를 방지합니다.

📌 13강 핵심 요약과 14강 예고

이 섹션에서는 13강 핵심 내용을 압축 정리합니다.

서브쿼리: 단일행(=·>)·다중행(IN·ANY·ALL·EXISTS). 상관 서브쿼리는 외부 쿼리 행마다 실행. IN은 값 비교, EXISTS는 존재 여부만 확인. 뷰: 가상 테이블, 데이터 저장 안 함. 집계함수·GROUP BY 포함 시 UPDATE 불가.

인덱스: B-Tree(범위검색)·클러스터드(1개)·논클러스터드(여러개)·해시(동등검색). ACID: 원자·일관·격리·지속. 격리수준: READ UNCOMMITTED→READ COMMITTED→REPEATABLE READ→SERIALIZABLE(강도 증가, 성능 감소). Dirty Read→Non-Repeatable Read→Phantom Read 순으로 방지.

다음 14강에서는 데이터 모델링과 정규화 — ER 표기법, 함수적 종속성, 1NF~BCNF 단계별 변환, 반정규화 유형과 트레이드오프를 완벽히 정리합니다.

관련 주제

  • 단일행 다중행 서브쿼리
  • 상관 서브쿼리
  • 뷰 생성 수정 삭제
  • 인덱스 B-Tree Hash Bitmap
  • ACID 4속성
  • 트랜잭션 격리수준 4단계
  • 자격증
  • 자격증 강의
  • 정보처리기사 필기 25강 — 핵심이론·기출 완전정복
  • 무료강의
  • 무료 온라인 강의
  • NUGUNA
  • 누구나

📚 시리즈 전체 공유

정보처리기사 필기 25강 — 핵심이론·기출 완전정복

이 강의가 속한 시리즈는 총 13강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.

댓글

0/1000

불러오는 중...