Taeyoung Kim

Data Systems

SQL 핵심 정리

SQL 핵심 정리 학습 내용을 정리한 백필 노트입니다.

이 글은 2025년 학습 기록을 블로그 형식으로 정리한 백필 노트입니다.


1. SQL 개요

SQL(Structured Query Language): 관계형 데이터베이스 관리 시스템(RDBMS)에서 데이터를 정의, 조회, 수정, 삭제하기 위해 사용하는 표준 언어

  • 특징
    • 선언적 언어: ‘무엇을 할 것인가’를 명시
    • 표준화된 문법(SQL 표준)
    • 대부분의 RDBMS(MySQL, Oracle, SQL Server, PostgreSQL 등)에서 지원
  • SQL 분류
    1. DDL (Data Definition Language): 테이블, 뷰, 스키마 등 구조 정의
      • CREATE, ALTER, DROP, TRUNCATE
    2. DML (Data Manipulation Language): 데이터 조작
      • SELECT, INSERT, UPDATE, DELETE, MERGE
    3. DCL (Data Control Language): 권한 관리
      • GRANT, REVOKE
    4. TCL (Transaction Control Language): 트랜잭션 관리
      • COMMIT, ROLLBACK, SAVEPOINT

2. 데이터 정의(DDL)

  • CREATE
    • 테이블, 뷰, 인덱스 생성
CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    department VARCHAR(50),
    salary DECIMAL(10,2),
    hire_date DATE DEFAULT CURRENT_DATE
);
  • ALTER
    • 테이블 구조 변경(컬럼 추가/삭제/수정)
ALTER TABLE employees ADD email VARCHAR(100);
ALTER TABLE employees MODIFY salary DECIMAL(12,2);
ALTER TABLE employees DROP COLUMN department;
  • DROP & TRUNCATE
    • DROP: 테이블 자체 삭제 (데이터 + 구조 모두 삭제)
    • TRUNCATE: 데이터만 삭제, 구조는 유지

3. 데이터 조작(DML)

  • SELECT
    • 데이터 조회, 조건 및 정렬 가능

기본 조회

SELECT name, salary FROM employees;

조건 조회

SELECT * FROM employees WHERE salary > 5000 AND department='IT';

정렬

SELECT * FROM employees ORDER BY salary DESC;

집계 함수

  • SUM, AVG, COUNT, MAX, MIN
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 4000;

JOIN

  • 테이블 간 관계를 이용해 데이터 조회
  1. INNER JOIN: 공통 데이터만
  2. LEFT JOIN: 왼쪽 테이블 기준 모두
  3. RIGHT JOIN: 오른쪽 테이블 기준 모두
  4. FULL OUTER JOIN: 양쪽 모두
SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d
ON e.department = d.dept_id;

서브쿼리

SELECT name FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
  • INSERT
INSERT INTO employees (emp_id, name, department, salary)
VALUES (1, '홍길동', 'IT', 5000);
  • UPDATE
UPDATE employees
SET salary = salary * 1.1
WHERE department = 'IT';
  • DELETE
DELETE FROM employees
WHERE emp_id = 1;

4. 데이터 제어(DCL)

  • GRANT
    • 권한 부여
GRANT SELECT, INSERT ON employees TO user1;
  • REVOKE
    • 권한 회수
REVOKE INSERT ON employees FROM user1;

5. 트랜잭션 관리(TCL)

  • 트랜잭션: 논리적 작업 단위
  • ACID 특성
    • Atomicity(원자성)
    • Consistency(일관성)
    • Isolation(독립성)
    • Durability(영속성)

사용 예

BEGIN TRANSACTION;

UPDATE accounts SET balance = balance - 100 WHERE acc_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE acc_id = 2;

COMMIT;  -- 정상 완료
-- ROLLBACK; -- 오류 발생 시 취소

6. 인덱스와 성능 최적화

  • 인덱스(Index): 조회 속도 향상, 읽기 빠름, 쓰기 느림
CREATE INDEX idx_salary ON employees(salary);
  • 뷰(View): 자주 사용하는 SELECT문 재사용 가능
CREATE VIEW high_salary AS
SELECT name, salary FROM employees WHERE salary > 5000;
  • 조인 최적화: 인덱스 활용, 서브쿼리 최소화, 필요 컬럼만 조회

7. 기타 고급 기능

  • 제약조건
    • PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK
CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    department INT REFERENCES departments(dept_id),
    salary DECIMAL(10,2) CHECK(salary > 0)
);
  • 함수 및 연산
    • 문자열: CONCAT, SUBSTRING, LENGTH
    • 숫자: ROUND, FLOOR, CEIL
    • 날짜: NOW(), DATEADD(), DATEDIFF()
  • 트리거(Trigger)
    • 특정 이벤트 시 자동 실행
CREATE TRIGGER trg_salary_update
AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO audit_log(emp_id, old_salary, new_salary)
    VALUES (OLD.emp_id, OLD.salary, NEW.salary);
END;

8. 실무 시 유의점

  1. 데이터 무결성: 제약조건 활용
  2. 트랜잭션 처리: ROLLBACK/COMMIT 필수
  3. 인덱스 남용 주의: 삽입/업데이트 성능 저하
  4. JOIN 최적화: 서브쿼리 vs 조인 전략 선택
  5. SQL 표준 준수: 이식성을 위해 기본 SQL 문법 우선