본문으로 건너뛰기

Day 2: SQL 기초

  • DDL (Data Definition Language)
    • CREATE, DROP, ALTER
  • DML (Data Manipulation Language)
    • SELECT, INSERT, UPDATE, DELETE
  • DQL, DCL, TCL
    • SELECT문의 세부 옵션과 JOIN
    • 권한 제어(GRANT, REVOKE)
    • 트랜잭션 제어(COMMIT, ROLLBACK, SAVEPOINT)
  • 기본 SQL 예제와 실습 아이디어

1. DDL (Data Definition Language)

DDL은 데이터베이스 스키마를 정의·변경·삭제하기 위한 언어다. 스키마 구조(테이블, 인덱스, 뷰, 시퀀스 등)의 생성, 수정, 삭제에 관여한다.

  1. CREATE
    • 테이블이나 데이터베이스 개체(스키마, 인덱스, 뷰 등)를 생성
    • 예:
      CREATE TABLE users (
      id INT PRIMARY KEY AUTO_INCREMENT,
      username VARCHAR(50) NOT NULL,
      created_at DATETIME
      );
  2. DROP
    • 기존에 생성된 스키마(테이블, 인덱스, 뷰 등)를 완전히 제거
    • 예:
      DROP TABLE users;
  3. ALTER
    • 이미 존재하는 스키마 구조를 수정(컬럼 추가·삭제, 데이터타입 변경 등)
    • 예:
      ALTER TABLE users
      ADD COLUMN email VARCHAR(100) AFTER username;
      ALTER TABLE users
      MODIFY COLUMN username VARCHAR(100);

주의: DDL 명령은 기본적으로 오토 커밋(Auto Commit) 된다. 즉, 실행 즉시 변경 사항이 확정되어 롤백이 불가능한 경우가 많다.


2. DML (Data Manipulation Language)

DML은 실제 테이블에 저장된 데이터를 조작(추가, 수정, 삭제)하는 데 사용한다.

  1. INSERT
    • 새로운 레코드(행)을 테이블에 추가
    • 예:
      INSERT INTO users (username, email, created_at)
      VALUES ('alice', 'alice@example.com', NOW());
  2. UPDATE
    • 기존 레코드를 수정
    • 예:
      UPDATE users
      SET email = 'alice_new@example.com'
      WHERE id = 1;
  3. DELETE
    • 테이블에서 특정 레코드를 삭제
    • 예:
      DELETE FROM users
      WHERE id = 1;

DML을 통해 변경된 내용은 트랜잭션(TCL) 내에서 커밋(Commit) 되기 전까지 실제 반영이 확정되지 않는다.


3. DQL, DCL, TCL

3.1 DQL (Data Query Language)

일부 분류 체계에서는 SELECT 구문을 DQL로 별도 구분하기도 한다.

  • SELECT: 테이블 데이터를 조회한다.
    • 예:
      SELECT username, email
      FROM users
      WHERE created_at >= '2024-01-01 00:00:00'
      ORDER BY created_at DESC;
    • JOIN: 여러 테이블을 연결해 데이터를 조회
      SELECT u.username, p.post_title
      FROM users AS u
      JOIN posts AS p ON u.id = p.user_id
      WHERE u.username = 'alice';
    • 다양한 집계 함수(AVG, SUM, COUNT 등)와 GROUP BY, HAVING 구문 등을 통해 통계 조회 가능

3.2 DCL (Data Control Language)

데이터베이스 **권한(Privilege)**과 관련된 제어를 담당한다.

  1. GRANT
    • 특정 사용자/역할(Role)에게 DB 객체 접근권한을 부여
    • 예:
      GRANT SELECT, INSERT ON users TO 'bob'@'%';
  2. REVOKE
    • 기존에 부여된 권한을 회수
    • 예:
      REVOKE INSERT ON users FROM 'bob'@'%';

3.3 TCL (Transaction Control Language)

트랜잭션(논리적 작업 단위) 관련 동작을 제어한다.

  1. COMMIT
    • 현재 트랜잭션에서 이루어진 DML 작업을 확정(영구 반영)
    • 예:
      COMMIT;
  2. ROLLBACK
    • 현재 트랜잭션 범위 내의 변경 사항을 취소
    • 예:
      ROLLBACK;
  3. SAVEPOINT
    • 트랜잭션 내 특정 지점을 표시해두고, 그 지점 이후의 작업만 롤백할 수 있게 함
    • 예:
      SAVEPOINT sp1;
      -- 뭔가 작업...
      ROLLBACK TO sp1;

트랜잭션: 한 번에 여러 DML이 실행될 때, 모두 성공 또는 모두 실패를 보장해야 하는 경우 사용. 예를 들어 이체 작업(계좌 A 출금 + 계좌 B 입금)이 원자성(Atomicity) 있게 수행되어야 한다.


4. 기본 SQL 예제와 실습 아이디어

4.1 샘플 테이블 생성

CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
product_name VARCHAR(100) NOT NULL,
price DECIMAL(10,2) NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT NOT NULL,
quantity INT NOT NULL,
order_date DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (product_id) REFERENCES products(product_id)
);

4.2 데이터 삽입

INSERT INTO products (product_name, price)
VALUES ('Apple', 1000),
('Banana', 500),
('Cherry', 1500);
INSERT INTO orders (product_id, quantity)
VALUES (1, 3),
(2, 2),
(3, 1);

4.3 데이터 조회

SELECT p.product_name, p.price, o.quantity, o.order_date
FROM products AS p
JOIN orders AS o ON p.product_id = o.product_id;

4.4 데이터 수정

UPDATE products
SET price = 1200
WHERE product_id = 1;

4.5 데이터 삭제

DELETE FROM products
WHERE product_id = 3;

4.6 트랜잭션 활용

START TRANSACTION;

UPDATE products
SET price = 1100
WHERE product_id = 2;

INSERT INTO orders (product_id, quantity)
VALUES (2, 1);

COMMIT;

참고: SQL은 데이터베이스 종류에 따라 문법이나 지원하는 기능이 다를 수 있다. MySQL, PostgreSQL, Oracle, SQL Server 등 각 DBMS에 맞게 문법을 사용해야 한다.


용어 정리

  1. DDL: 테이블 및 스키마 구조 정의(생성/수정/삭제). 보통 오토 커밋
  2. DML: 데이터에 대한 CRUD(INSERT/UPDATE/DELETE 등), 트랜잭션 내부에서 실행
  3. DQL: SELECT를 통해 원하는 데이터를 조회, JOIN/집계함수/GROUP BY 등 활용
  4. DCL: 사용자/역할에 권한을 부여(GRANT), 회수(REVOKE)
  5. TCL: 트랜잭션 제어(COMMIT, ROLLBACK, SAVEPOINT)로 원자성 보장