[Spring] Database (2)

이연우·2025년 7월 24일

TIL

목록 보기
38/100

💬 SQL (Structured Query Language)

  • 관계형 데이터베이스에서 데이터를 정의, 조작, 제어, 조회하기 위한 표준 언어

🔎 특징 요약

  • 대부분의 RDBMS(MySQL, PostgreSQL 등)에서 사용
  • 대소문자 구분 X → 보통 명령어는 대문자, 값은 소문자
  • 제품마다 SQL 문법의 미묘한 차이 존재 (함수, 타입 등)

📚 SQL 분류

분류설명주요 명령
🏗️ DDL데이터베이스/테이블 정의CREATE, ALTER, DROP
🛠️ DML데이터 조작INSERT, UPDATE, DELETE
🔍 DQL데이터 조회SELECT
🔐 DCL권한 관리GRANT, REVOKE
🧾 TCL트랜잭션 제어COMMIT, ROLLBACK

🐬 MySQL에서 자주 사용하는 자료형(Data Types)

🔢 숫자형

타입크기(Byte)설명
INT4일반 정수
BIGINT8아주 큰 수 (예: 금액)
DECIMAL(M,D)5~17고정 소수점: 금융/정밀 계산
FLOAT, DOUBLE4 / 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"만 저장 (길이만큼 공간 사용)

💡 기타 자료형

  • BOOLEAN: TINYINT(1)로 동작 (0=false, 1=true)
  • JSON: MySQL 5.7+부터 지원
  • GEOMETRY: 공간/위치 정보 저장용

📏 제약 조건 (Constraint)

  • 데이터를 안전하고 일관되게 유지하기 위한 규칙들

✅ 무결성(Integreity)의 3요소

요소설명
정확성데이터가 오류 없이 올바르게 저장
일관성테이블 간 논리적 충돌 X
완전성필요한 모든 데이터가 누락되지 않도록 함

🧱 자주 쓰는 제약 조건

제약 조건설명
NOT NULLNULL 값 입력 방지
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;

0개의 댓글