본문 바로가기

백엔드 스터디/데이터베이스

SQL - DDL, DML, DCL

SQL(Structured Query Language)

- 데이터베이스에 접근할 때 사용하는 언어

- 크게 DML과 DDL로 나눌 수 있다

 

1. DDL(데이터 정의어)

- SQL 중 데이터베이스의 테이블, 스키마 등을 정의, 변경, 제거하는 언어

① CREATE : 테이블 생성

CREATE TABLE 테이블명 (column datatype ... [DEFAULT expr]);

 [DEFAULT expr]  -> 옵션

 

CREATE TABLE employees (
			id NUMBER(8),
			hire_date DATE DEFAULT SYSDATE);

 

 

데이터 타입의 종류

데이터타입 정의
VARCHAR2(size) 가변 길이의 문자열 타입
CHAR2(size) 고정 길이의 문자열 타입
NUMBER(p, s) 길이가 p인 숫자에서 소수 아래 숫자가 s개인 십진수
DATE 날짜와 시간
LONG 2GB이상의 가변길이의 문자 데이터 타입
CLOB 4GB이상의 문자 데이터 타입
RAW and LONG RAW 행의 2진 데이터 타입
BLOB 4GB이상의 이진 데이터 타입
BFILE 2진 데이터가 저장된 외부의 파일
ROWID 테이블안의 특정 행의 주소를 대표하는 64개의 수로 이루어진 값

 

② ALTER 

- 테이블 생성 후 테이블의 구조 변경

- 칼럼을 추가(ADD), 수정(MODIFY), 삭제(DROP), 새로운 칼럼의 값 정의 등을 할 수 있음

 

ADD(추가)

ALTER TABLE 테이블명 ADD(column datatype [DEFAULT expr]);
ALTER TABLE dept ADD (job_id VARCHAR2(9));

 

 

MODIFY(수정)

ALTER TABLE 테이블명 MODIFY(column datatype [DEFAULT expr]);
ALTER TABLE dept MODIFY (job_id VARCHAR2(9));

 

 

DROP(삭제)

ALTER TABLE 테이블명 DROP COLUMN (column);
ALTER TABLE dept DROP COLUMN job_id;

 

 

③ DROP: 테이블 삭제

DROP TABLE 테이블명 [PURGE];

PURGE는 옵션, 사용하면 복구 안됨

DROP TABLE dept PURGE;

 

 

제약조건의 종류

- 테이블 수준에서 이루어지는 작업에 대한 규칙

- 모든 제약조건은 데이터 카탈로그에 저장

제약조건 의미
NOT NULL NULL값이 입력될 수 없음을 명시한다
UNIQUE 테이블 내의 모든 행은 컬럼 또는 컬럼 조합의 값이 반드시 유일해야 한다
PRIMARY KEY 테이블에서 각 행을 식별할 수 있는 특별한 칼럼이다
FOREIGN KEY 어떠한 칼럼과 그 칼럼에 관계를 가지고 있는 테이블의 칼럼이다(참조)
CHECK 조건을 명시하여 참인 경우에만 값을 받는다

 

제약조건 정의 - 제약조건을 attribute단에서 준 것(칼럼 기준)

column [CONSTRAINT constraint_name] constraint_type
CREATE TABLE employees(
	employee_id NUMBER(6)
    CONSTRAINT emp_id_pk PRIMARY KEY,
    first_name VARCHAR2(20)
    ...
);

 

제약조건 정의 - 제약조건을 전체 테이블에 준 것

column, ...
[CONSTRAINT constraint_name] constraint_type (column, 
...),

 

CREATE TABLE employees(
	employee_id NUMBER(6)
    first_name VARCHAR2(20),
    ...
    job_id VARCHAR(10) NOT NULL,
    CONSTRAINT emp_id_pk
    PRIMARY KEY (EMPLOYEE_ID)
);

 

 

① NOT NULL :  널이 칼럼에 삽입되는 것을 막음

학생 테이블

이름 학번 연락처
홍길동 2006150004 010-1234-5678
김길동 2007150004 (null)
이길동 2008150004 010-0123-4567

 

② UNIQUE :  한 테이블에 두 개의 행이 중복되지 않음

CREATE TABLE 학생(
	이름 VARCHAR2(6) NOT NULL
    email VARCHAR2(20),
    학과 VARCHAR2(10) NOT NULL,
    ...
    CONSTRAINT 학생_email_uk UNIQUE(email)
);

 

 

③ PRIMARY KEY :  테이블 하나에는 오직 하나의 기본키만 존재 (NOT NULL이면서 UNIQUE한 것)

CREATE TABLE 학생(
	이름 VARCHAR2(6),
    학번 NUMBER(9),
    ...
    핸드폰번호 VARCHAR2(13),
    CONSTRAINT 학생_학번_pk PRIMARY KEY (학번)
);

 

 

④ FOREIGN KEY

같은 테이블이나 다른 테이블과 관계를 맺을 때, 그 테이블의 PRIMARY KEY나 UNIQUE KEY 간에 성립

CREATE TABLE 학생(
	이름 VARCHAR2(6),
    학번 NUMBER(9),
    ...
    지도교수_ID NUMBER(3),
    CONSTRAINT 학생_교수_fk FOREIGN KEY (지도교수_ID)
    REFERENCES 교수(ID)
    ...
);

 

⑤ CHECK

칼럼에 대해 값의 범위를 지정함으로써, 범위 밖의 값은 삽입을 제한

CREATE TABLE 학생(
	이름 VARCHAR2(6),
    학번 NUMBER(9),
    ...
    지도교수_ID NUMBER(3),
    
    CONSTRAINT 학생_지도교수_ID
    CHECK (지도교수_ID >=100 AND 지도교수_ID <=103),
    
    CONSTRAINT 학생_교수_kf FOREIGN KEY (지도교수_ID)
    REFERENCES 교수(ID)
    ...
);

 

 

 

2. DML(데이터 조작어)

- 데이터베이스의 저장된 데이터들을 다룬다

SELECT문 - SQL에서 데이터 검색

SELECT 추출할 애트리뷰트
FROM 추출에 필요한 테이블
WHERE 추출하기 위한 조건
GROUP BY 그룹별로 묶을 기준이 되는 애트리뷰트
HAVING 그룹이 만족해야 할 조건
ORDER BY 추출한 데이터의 정렬

 

INSERT 문 

- 테이블에 새로운 튜플 삽입

- 자식 테이블의 외래키 칼럼에는 부모 테이블의 칼럼의 데이터들 중 하나가 입력되어야만 함

 

DELETE 문 

- 어떤 테이블에서 삭제가 이루어지냐에 따라 오류가 날 수도 있음

- FROM 절과 WHERE 절로 이루어짐

 

UPDATE 문 

- 테이블의 행 값을 수정할 때 사용

- 외래키나 기본키일 때 참조 무결성 제약조건을 위반하면 오류 발생

 

3. DCL(데이터 제어어)

- 데이터베이스에 대한 각종 권한을 부여, 회수 한다

 

GRANT 문

유저에게 권한 부여

 

REVOKE 문 

유저로부터 권한 회수

 

 

출처

[프리렉]오용철의 데이터베이스 모델링

https://youtu.be/2ihnrP9MjIw?si=23QJNBx8AZv_bVzR

https://youtu.be/Fug0d_1e4Dg?si=NYqc-REtVEYUwNuf

 

https://icedhotchoco.tistory.com/entry/SQL-DDL-DML-DCL-TCL