✍ 테이블과 컬럼을 정의하는 명령어로 생성, 수정, 삭제 등의 데이터 전체 골격을 결정하는 역할을 담당한다.
| 용어 | 설명 |
|---|---|
| CREATE | 테이블을 생성 |
| ALTER | 테이블의 구조를 수정 |
| DROP | 테이블을 삭제 |
| RENAME | 테이블의 이름을 변경 |
| TRUNCATE | 테이블을 초기화 |
✍ CREATE 명령어는 데이터베이스 객체를 생성하는 데 사용되며, 이 명령어를 사용하여 테이블, 인덱스, 뷰, 스키마 등을 만들 수 있다.
-- DDL
-- CREATE
CREATE TABLE DEPT (
DEPTNO NUMBER(2),
DNAME VARCHAR2(14),
LOC VARCHAR2(13)
);
SELECT * FROM DEPT;
-- CTAS
CREATE TABLE EMP2 AS SELECT * FROM EMPLOYEES;
CREATE TABLE EMP3 AS SELECT * FROM EMPLOYEES WHERE 1=2;
-- ALTER ADD
CREATE TABLE EMP_DEPT50
AS SELECT EMPLOYEE_ID, FIRST_NAME, SALARY * 12 AS ANN_SAL, HIRE_DATE
FROM EMPLOYEES
WHERE DEPARTMENT_ID = 50;
✍ ALTER 명령어는 기존의 데이터베이스 객체를 변경하는 데 사용되며, 테이블의 구조를 수정하거나 인덱스, 뷰 등을 변경할 때 사용된다.
-- 컬럼 추가
ALTER TABLE EMP_DEPT50
ADD (JOB VARCHAR2(10));
-- 테이블 구조 확인
DESC EMP_DEPT50;
-- 컬럼 이름 변경 (JOB -> JOB_ID)
ALTER TABLE EMP_DEPT50
RENAME COLUMN JOB TO JOB_ID;
-- 컬럼 수정, 기존의 데이터를 손상되게 크기를 조정할 순 없다.
-- FIRST_NAME의 길이가 VARCHAR(20)에서 30으로 늘어났다.
ALTER TABLE EMP_DEPT50
MODIFY (FIRST_NAME VARCHAR(30));
-- FIRST_NAME의 가장 긴 길이가 8바이트로 나온다.
SELECT MAX(LENGTHB(FIRST_NAME)) FROM EMP_DEPT50;
-- 그 보다 더 작은 길이로 줄이려 해 ERROR 발생
ALTER TABLE EMP_DEPT50
MODIFY (FIRST_NAME VARCHAR(7));
✍ DROP 명령어는 데이터베이스 객체를 삭제하는 데 사용. 이 명령어는 테이블, 인덱스, 뷰 등을 삭제할 수 있으며, 삭제된 객체는 복구할 수 없다.
-- 열 삭제
ALTER TABLE EMP_DEPT50
DROP COLUMN JOB_ID;
-- JOB_ID가 삭제된 것을 볼 수 있다.
DESC EMP_DEPT50;
✍ RENAME 명령어는 데이터베이스 객체의 이름을 변경하는 데 사용. 이 명령어를 사용하여 테이블, 인덱스, 뷰 등의 이름을 변경할 수 있다.
-- 테이블 이름 변경
RENAME EMP_DEPT50 TO EMPLOYEES_DEPT50;
-- 조회되지 않는다.
SELECT * FROM EMP_DEPT50;
DROP TABLE EMPLOYEES_DEPT50;
DESC EMPLOYEES_DEPT50;
✍ TRUNCATE 명령어는 테이블의 모든 데이터를 빠르고 효율적으로 삭제하는 데 사용된다. DELETE와 달리, TRUNCATE는 데이터만 제거하고 테이블의 구조는 유지. 또한, TRUNCATE는 일반적으로 롤백할 수 없다.
-- TRUNCATE = 테이블의 데이터는 모두 삭제하고 구조는 남긴다.
TRUNCATE TABLE EMP2;
SELECT * FROM EMP2;
DESC EMP2;
✍ SET UNUSED 명령어는 테이블의 컬럼을 논리적으로 비활성화한다. 즉, 이 컬럼은 더 이상 쿼리 결과에 나타나지 않고, 새로운 데이터도 입력되지 않지만, 물리적으로 식제하려면 따로 DROP UNUSED COLUMNS를 사용하여 삭제해야한다.
-- SET UNUSED = 하나 이상의 열을 "사용되지 않았음"을 표시
ALTER TABLE EMP_DEPT50
SET UNUSED (FIRST_NAME);
-- FIRST_NAME 컬럼이 보이지 않 는다.
DESC EMP_DEPT50;
-- FIRST_NAME 컬럼이 보이지 않는다.
SELECT * FROM EMP_DEPT50;
-- UNUSED된 컬럼들을 삭제한다.
ALTER TABLE EMP_DEPT50
DROP UNUSED COLUMNS;
인프런 오라클 데이터베이스