CS지식/데이터베이스 (Database)

(데이터베이스) SQL 설명 기본 dml ,ddl ,vdl

불광동 물주먹 2025. 5. 10. 02:49

**SQL (Structured Query Language)**는 관계형 데이터베이스를 조작하고 정의하기 위한 표준화된 언어입니다.

SQL의 구성 요소

SQL은 단순한 조회 언어가 아닌, 다음 세 가지 기능을 포괄하는 종합적인 데이터베이스 언어입니다:

  • DDL (Data Definition Language): 테이블, 인덱스, 제약조건 등 정의 (e.g. CREATE, ALTER)
  • DML (Data Manipulation Language): 데이터 조작 (e.g. SELECT, INSERT, UPDATE, DELETE)
  • VDL (View Definition Language): 뷰 정의

💡 실제 구현은 각 RDBMS 벤더에 따라 차이가 있으며, Oracle, MySQL, PostgreSQL 등마다 SQL 구문 세부사항이 다름.


✅ SQL 용어 정리

 

관계형 모델 용어  SQL 용어
Relation Table
Attribute Column
Tuple Row (Record)
Domain Data Type
 

SQL은 **관계형 모델의 다중집합(Multiset)**을 따르므로, 중복된 튜플 허용됩니다.


✅ SQL과 RDBMS의 관계

  • SQL은 **관계형 데이터베이스(RDBMS)**의 표준 질의 언어입니다.
  • 그러나 RDBMS마다 SQL 구현이 상이하여,
    • 예: Oracle의 ROWNUM vs. MySQL의 LIMIT
    • 예: Oracle에서는 FROM DUAL이 필요, 다른 DB에서는 생략 가능

✅ Attribute (컬럼) 데이터 타입

🔹 숫자형


 

유형 설명  오라클 예시
정수형 INT, SMALLINT 등 NUMBER(5)
부동 소수점 FLOAT, DOUBLE FLOAT(7)
고정 소수점 DECIMAL, NUMERIC NUMBER(5,2)
 

Oracle은 일반적으로 NUMBER 타입 하나로 표현 (가변 정밀도 지원)


🔹 문자형


 

유형 설명 오라클 예시
고정 크기 문자 CHAR(n) CHAR(10)
가변 크기 문자 VARCHAR(n), VARCHAR2(n) VARCHAR2(100)
대용량 문자 TEXT, CLOB CLOB
 

Oracle은 VARCHAR보다 VARCHAR2 사용을 권장
(표준화 대비 호환성 확보 목적)


🔹 날짜/시간


 

유형 설명 오라클 예시
날짜 연/월/일 DATE
날짜+시간 타임스탬프 TIMESTAMP
시간대 포함 시간대와 함께 저장 TIMESTAMP WITH TIME ZONE
 

🔹 기타

  • BLOB, CLOB: 대용량 바이너리/문자 데이터
  • BOOLEAN: Oracle은 공식 BOOLEAN 미지원 (PL/SQL 내 사용 가능)
  • JSON: Oracle 21c부터 JSON 타입 정식 지원

✅ 제약조건 (Constraints)

🔹 Primary Key (기본키)

  • 튜플을 유일하게 식별
  • NULL 및 중복 허용하지 않음
  • 하나의 테이블에 1개만 설정 가능
CONSTRAINT pk_emp PRIMARY KEY(emp_id)

🔹 Unique Key

  • 중복 금지, 하지만 NULL은 허용
  • 테이블에 여러 개 설정 가능
     
     
CONSTRAINT uk_email UNIQUE(email)

🔹 Foreign Key (외래키)

  • 다른 테이블의 PRIMARY 또는 UNIQUE 키 참조
  • 삭제/갱신 시 행동 정의 옵션:

 

옵션 설명
CASCADE 참조된 행이 삭제/변경되면 같이 삭제/변경됨
SET NULL 참조된 행 삭제 시 외래키 컬럼을 NULL로 설정
SET DEFAULT 기본값으로 설정 (Oracle 미지원)
RESTRICT 참조된 행 있으면 삭제/갱신 불가 (MySQL 중심)
NO ACTION 기본값, 지연된 검사 없음 시 RESTRICT와 동일
 
CONSTRAINT fk_dept FOREIGN KEY(dept_id) REFERENCES departments(id) ON DELETE SET NULL
 

🔹 CHECK

  • 컬럼에 조건을 줄 때 사용
CHECK (salary >= 0)
 

🔹 제약조건 이름 명시

  • 명시하지 않으면 시스템이 자동 생성
  • 협업 및 유지보수 위해 이름 명시 추천

✅ 마무리

Oracle을 포함한 RDBMS는 대부분 SQL을 따르지만 세부 동작은 다를 수 있으므로, 개발 시 타겟 DBMS 문서 참고가 중요합니다.
예를 들어, BOOLEAN, LIMIT, AUTO_INCREMENT, DEFAULT 처리 등에서 차이가 발생합니다.