💬 SQL (Structured Query Language)
- 관계형 데이터베이스에서 데이터를 정의, 조작, 제어, 조회하기 위한 표준 언어
🔎 특징 요약
📚 SQL 분류
| 분류 | 설명 | 주요 명령 |
|---|---|---|
| 🏗️ DDL | 데이터베이스/테이블 정의 | CREATE, ALTER, DROP |
| 🛠️ DML | 데이터 조작 | INSERT, UPDATE, DELETE |
| 🔍 DQL | 데이터 조회 | SELECT |
| 🔐 DCL | 권한 관리 | GRANT, REVOKE |
| 🧾 TCL | 트랜잭션 제어 | COMMIT, ROLLBACK |
🐬 MySQL에서 자주 사용하는 자료형(Data Types)
🔢 숫자형
| 타입 | 크기(Byte) | 설명 |
|---|---|---|
INT | 4 | 일반 정수 |
BIGINT | 8 | 아주 큰 수 (예: 금액) |
DECIMAL(M,D) | 5~17 | 고정 소수점: 금융/정밀 계산 |
FLOAT, DOUBLE | 4 / 8 | 부동 소수점: 오차 존재 가능 |
⚠ SIGNED vs UNSIGNED
→ SIGNED: 음수 가능 / UNSIGNED: 0부터 시작 → 공간 절약
📆 날짜형
| 타입 | 설명 |
|---|---|
DATE | 연월일(YYYY-MM-DD) |
TIME | 시분초(HH\:MM\:SS) |
DATETIME | 날짜 + 시간 (절대 시간) |
TIMESTAMP | 날짜 + 시간 (서버의 타임존 기준, 상대 시간) |
YEAR | 연도(YYYY) |
→ DATETIME은 항상 동일하게 보이고
→ TIMESTAMP는 서버 환경에 따라 다르게 보일 수 있음 (기본: UTC)
🔤 문자형
| 타입 | 설명 |
|---|---|
CHAR(n) | 고정 길이 문자열 (빠름, 공간 낭비 있음) |
VARCHAR(n) | 가변 길이 문자열 (공간 효율적) |
TEXT, TINYTEXT, LONGTEXT | 긴 문자열 (게시글 등) |
ENUM | 지정된 문자열 중 하나 선택 |
SET | 여러 값 선택 가능 (최대 64개 항목 중 중복 없이 선택) |
🔍 CHAR vs VARCHAR
CHAR(10) → "Hi" 저장 시 나머지 공간 공백 채움VARCHAR(10) → "Hi"만 저장 (길이만큼 공간 사용)💡 기타 자료형
📏 제약 조건 (Constraint)
- 데이터를 안전하고 일관되게 유지하기 위한 규칙들
✅ 무결성(Integreity)의 3요소
| 요소 | 설명 |
|---|---|
| 정확성 | 데이터가 오류 없이 올바르게 저장 |
| 일관성 | 테이블 간 논리적 충돌 X |
| 완전성 | 필요한 모든 데이터가 누락되지 않도록 함 |
🧱 자주 쓰는 제약 조건
| 제약 조건 | 설명 |
|---|---|
NOT NULL | NULL 값 입력 방지 |
UNIQUE | 중복 입력 방지 |
PRIMARY KEY | 고유 + NOT NULL |
AUTO_INCREMENT | 자동 번호 증가 (PK 자주 사용) |
DEFAULT | 기본값 설정 |
FOREIGN KEY | 다른 테이블의 PK 참조 (관계 설정) |
> 외래 키(FK) 예시
CREATE TABLE orders (
order_id INT PRIMARY KEY,
customer_id INT,
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
→ 데이터 연결과 무결성 보장을 동시에 수행
> CASCADE
| 옵션 | 설명 |
|---|---|
ON DELETE CASCADE | 부모 데이터 삭제 시 자식도 삭제 |
ON UPDATE CASCADE | 부모 PK 변경 시 자식도 자동 반영 |
FOREIGN KEY(customer_id)
REFERENCES customers(customer_id)
ON DELETE CASCADE
🔗 JOIN (조인)이란?
- 여러 테이블을 연결해서 데이터를 조회하는 기술
→ 중복 없이 저장한 데이터를 필요에 따라 조합해서 사용

🚀 JOIN 종류 요약
| 종류 | 설명 | 그림 상 의미 |
|---|---|---|
🔁 INNER JOIN | 공통된 데이터만 반환 | 교집합 |
⬅️ LEFT JOIN | 왼쪽 테이블은 모두, 오른쪽은 일치하는 데이터만 | 왼쪽 기준 |
➡️ RIGHT JOIN | 오른쪽 테이블은 모두, 왼쪽은 일치하는 데이터만 | 오른쪽 기준 |
🟰 OUTER JOIN (FULL) | 양쪽 모두 포함, 일치 X도 포함 | 합집합 |
⚠ 대부분의 DB는 FULL OUTER JOIN을 지원하지 않음 → UNION 사용
🗒️ JOIN 예시 (고객 - 주문)
-- 고객 이름과 주문 날짜 조회
SELECT c.name, o.order_date
FROM customers c
JOIN orders o
ON c.customer_id = o.customer_id;