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 처리 등에서 차이가 발생합니다.