
✅ 1. SQL 기본 개념
구분 설명
| SQL | Structured Query Language. 관계형 DB 조작/정의 언어 |
| DML | SELECT, INSERT, UPDATE, DELETE |
| DDL | CREATE, ALTER, DROP |
| DCL | GRANT, REVOKE |
| TCL | COMMIT, ROLLBACK, SAVEPOINT |
✅ 2. SELECT 기본 문법
sql
복사편집
SELECT [DISTINCT] 컬럼명
FROM 테이블명
WHERE 조건
GROUP BY 그룹컬럼
HAVING 그룹조건
ORDER BY 정렬컬럼 [ASC|DESC]
- DISTINCT: 중복 제거
- WHERE vs HAVING:
- WHERE는 행 필터링,
- HAVING은 집계 결과 필터링
✅ 3. 함수
📍단일행 함수
함수 설명
| 숫자함수 | ROUND, TRUNC, MOD |
| 문자함수 | LENGTH, SUBSTR, CONCAT, UPPER/LOWER |
| 날짜함수 | SYSDATE, ADD_MONTHS, MONTHS_BETWEEN, LAST_DAY |
| 변환함수 | TO_CHAR, TO_DATE, CAST, CONVERT |
📍그룹 함수
함수 설명
| SUM, AVG, MIN, MAX, COUNT | 집계 함수 (NULL 제외) |
| COUNT(*) | NULL 포함 전체 행 수 |
✅ 4. JOIN
유형 설명
| INNER JOIN | 조건 일치하는 행만 |
| OUTER JOIN | LEFT, RIGHT, FULL (비교 테이블 없으면 NULL 채움) |
| SELF JOIN | 자기 자신과 JOIN |
| NATURAL JOIN | 같은 이름의 컬럼 자동 JOIN |
| USING | 특정 컬럼 기준으로 JOIN |
| ON | 조건 명시적 지정 |
sql
복사편집
SELECT *
FROM A
JOIN B ON A.id = B.id;
✅ 5. 서브쿼리
유형 설명
| 단일행 서브쿼리 | =, >, < 등 단일 값 비교 |
| 다중행 서브쿼리 | IN, ANY, ALL 사용 |
| 상관 서브쿼리 | 메인쿼리의 컬럼을 내부 쿼리에서 참조 |
| 인라인 뷰 | FROM 절에 사용하는 서브쿼리 |
| WITH절 | 공통 테이블 표현식 (CTE), 가독성 향상 |
✅ 6. 집합 연산자
연산자 설명
| UNION | 중복 제거 합집합 |
| UNION ALL | 중복 포함 합집합 |
| INTERSECT | 교집합 |
| MINUS / EXCEPT | 차집합 (A에 있고 B엔 없는 값) |
✅ 7. 데이터 변경
구문 설명
| INSERT INTO 테이블 VALUES (값) | 행 추가 |
| UPDATE 테이블 SET 컬럼 = 값 WHERE 조건 | 값 수정 |
| DELETE FROM 테이블 WHERE 조건 | 행 삭제 |
| MERGE | 조건에 따라 INSERT 또는 UPDATE 수행 |
✅ 8. 트랜잭션 제어 (TCL)
명령어 설명
| COMMIT | 변경 사항 저장 |
| ROLLBACK | 변경 사항 취소 |
| SAVEPOINT | 중간 저장점 설정 |
| SET AUTOCOMMIT | 자동 커밋 설정 여부 제어 (DBMS마다 다름) |
✅ 9. 인덱스 & 뷰
개념 설명
| 인덱스 | 검색 성능 향상, 자동/수동 생성 가능 |
| 뷰(View) | 가상 테이블, 실질 데이터 없음 |
| 인라인 뷰 | 서브쿼리를 FROM절에서 사용 |
| Materialized View (물리적 뷰) | 데이터를 저장, 성능↑, 자동 갱신 가능 |
✅ 10. 최신 출제 경향 정리 (2024~2025 기준)
테마 출제 포인트
| JOIN | INNER/OUTER JOIN 개념 및 결과 예측 문제 |
| 함수 | 날짜 + 문자 + 변환 함수 조합 문제 |
| 서브쿼리 | 상관 서브쿼리 vs 일반 서브쿼리 비교 |
| DML | UPDATE/DELETE with 조건 |
| 집합 연산 | 결과 값 추론 및 중복 포함 여부 |
| GROUP BY | 그룹화 컬럼 개수 및 HAVING 조건 해석 |
| DCL/TCL | GRANT/COMMIT 개념 이해 |
| WITH절 | 가독성 및 재사용 목적 파악 |
✅ 정규화 (Normalization)란?
데이터베이스 설계 시 데이터 중복을 최소화하고 **이상 현상(Anomaly)**을 방지하기 위해 릴레이션을 구조적으로 분해하는 과정을 말합니다.
🎯 정규화의 목적
- 데이터 중복 최소화
- 삽입/삭제/갱신 이상 방지
- 데이터 무결성 유지
- 구조적이고 논리적인 테이블 구성
✅ 이상 현상 (Anomaly)의 종류
구분 설명
| 삽입 이상 | 일부 속성만 알 때는 데이터를 삽입할 수 없음 |
| 삭제 이상 | 한 데이터를 삭제하면 다른 정보까지 함께 사라짐 |
| 갱신 이상 | 중복된 데이터의 일부만 수정될 경우 데이터 불일치 발생 |
✅ 정규형 (Normal Forms)
정규형 조건 해결하는 문제
| 제1정규형 (1NF) | 모든 속성의 값이 원자값(Atomic) | 반복되는 그룹 제거 |
| 제2정규형 (2NF) | 1NF 만족 + 부분 함수 종속 제거 | 복합키에서 일부 속성만 종속된 경우 분해 |
| 제3정규형 (3NF) | 2NF 만족 + 이행 함수 종속 제거 | 기본키가 아닌 속성에 의해 결정되는 속성 제거 |
| BCNF (보이스-코드 정규형) | 결정자가 후보키인 경우만 허용 | 3NF보다 더 엄격한 형태 |
| 제4정규형 (4NF) | 다치 종속(Multi-valued dependency) 제거 | 하나의 키에 여러 속성이 독립적으로 종속된 경우 분해 |
🔑 주요 용어 정리
- 함수 종속 (Functional Dependency)
- : X → Y는 X의 값이 주어지면 Y의 값이 유일하게 결정된다는 뜻
- 부분 함수 종속
- : 복합키의 일부에만 종속되는 경우
- 이행 함수 종속
- : A → B, B → C가 있을 때 A → C가 되는 경우 (A → B → C)
- 다치 종속
- : 하나의 키에 여러 속성이 독립적으로 종속될 때 발생
💡 정규화 예시 (간단한 흐름)
비정규형
학번 이름 수강과목1 수강과목2
→ 반복 속성 있음 → 1NF로 변환
1NF (원자값만)
학번 이름 수강과목
→ 과목이 키 일부(학번)에만 종속 → 2NF로 변환
→ 이름이 학번에 종속되며, 수강과목과는 무관 → 3NF로 변환
✅ 요약 표
정규형 기준 제거 대상
| 1NF | 원자값 | 반복 속성 |
| 2NF | 부분 함수 종속 제거 | 일부 키 종속 |
| 3NF | 이행 함수 종속 제거 | 비키 속성에 의한 결정 |
| BCNF | 결정자 → 후보키 | 모든 결정자 후보키화 |
| 4NF | 다치 종속 제거 | 독립적 다치 종속 |
'SQLD 공부' 카테고리의 다른 글
| JOIN (조인) (0) | 2025.07.04 |
|---|---|
| SQLD 대비 고급 SQL 문법 (JOIN, Subquery, SET) (0) | 2025.07.03 |
| 트랜잭션&락, EXPLAIN&인덱스, DDLvsDML 제약조건 (0) | 2025.06.19 |
| SQLD 2과목 핵심 개념 정리 (0) | 2025.06.17 |
| 데이터 모델과 SQL 개념정리 (0) | 2025.06.14 |