DataBase/Oracle

[DDL] CREATE (TABLE/CTAS/VIEW)

브라우니란 2024. 11. 14. 16:51

 

0. DDL이란?

Data Definition Language 의 약자로, 데이터 정의어이다.

DDL 문에는 CREATE, ALTER, DROP, RENAME, TRUNCATE, COMMENT 가 있다.

 

DDL문을 사용하여 데이터베이스 오브젝트를 생성, 변경, 삭제한다.

(* 데이터베이스 오브젝트에는 대표적으로 테이블, 인덱스, 뷰, 시퀀스 등이 있다.)

 

 

1. CREATE TABLE

  • 테이블을 생성한다. 이때, 테이블 이름을 정한다.
  • 컬럼 이름 및 데이터 타입도 정해야한다.
  • TABLESPACE 지정하며, 지정하지 않는 경우 해당 유저에 대한 DEFAULT SPACE 에 저장한다.
  • 테이블을 생성하기 전에, 현재 접속 유저에게 테이블을 생성 할 수 있는 권한이 있는지 확인해야 한다.
    • CREATE TABLE 시스템 권한 
    • 테이블을 저장할 수 있는 테이블 스페이스 권한

 

# emp 테이블 생성 예시

CREATE TABLE emp(
        id number(4),
        name varchar2(30),
        day date default sysdate)
TABLESPACE users;

 

 

[테이블 생성 규칙]

  • 테이블 이름, 컬럼 이름, 유저 이름, 다른 객체 이름, 제약 조건 이름을 정한다.
  • 문자로 시작해야 한다. 
  • 문자의 길이: 1 ~ 30
  • 문자, 숫자, 특수문자(_,$,#) 가능하다
  • 대소문자는 구분하지 않는다.
  • 동일한 유저가 소유한 객체 이름은 중복 할 수 없다.
  • 예약어는 사용할 수 없다.

 

 

 

2. CTAS

  • 테이블 복제
  • 테이블 구조, 행(데이터), 제약 조건에서는 NOT NULL만 복제된다.

 

# CTAS 로 테이블 생성 예시

-- 1) CTAS로 테이블 구조 복제
CREATE TABLE hr.emp 
AS 
SELECT *
FROM hr.employees;

-- 2) 테이블 복제 확인(빈 테이블)
SELECT *
FROM hr.emp;

-- 3) 테이블 정보 확인

-- hr이 생성한 테이블 정보
SELECT *
FROM user_tables;

-- hr DEFAULT TABLESPACE 확인
SELECT *
FROM user_users;

 

 

 

1. 테이블 전체 복제(구조 + 데이터)

  • 데이터까지 같이 동일하게 복제된다.
CREATE TABLE hr.emp 
AS 
SELECT employee_id AS id
     , UPPER(last_name||' '||first_name) AS name
     , salary * 12 sal
FROM hr.employees;

 

 

 

 

2. TABLESPACE 옵션 

  • 옵션 생략 시 DEFAULT TABLESPACE 로 지정되어 있는 TABLESPACE에 저장
-- DEFAULT TABLESPACE 확인
SELECT *
FROM user_users;

CREATE TABLE hr.emp 
TABLESPACE users -- user 테이블 스페이스에 저장
AS 
SELECT employee_id AS id
     , UPPER(last_name||' '||first_name) AS name
     , salary * 12 sal
FROM hr.employees;

 

 

 

3. 테이블 구조만 복제

  • FALSE 조건 추가
CREATE TABLE hr.emp 
TABLESPACE users 
AS 
SELECT *
FROM hr.employees
WHERE 1 = 2 -- FALSE 조건

-- 테이블 구조 복제 확인
-- 껍데기 확인
SELECT *
FROM hr.emp;

 

 

 

 

3. CREATE VIEW

  • VIEW는 SELECT 문을 가지고 있는 객체이다.
  • 유지 관리의 목적으로 테이블에 직접적인 접근 권한을 제어하기 위해 주로 사용한다.
  • 단순뷰이면 DML을 사용하여 수정가능하나, 복합뷰이면 DML 작업을 수행할 수 없다.

 

# CREATE VIEW 생성 예시

-- VIEW 생성
CREATE VIEW hr.emp_2023
AS 
SELECT employee_id
     , last_name
     , first_name
     , job_id
     , manager_id
     , department_id
FROM hr.employees;

-- VIEW 생성 확인
SELECT *
FROM hr.emp_2023;

 

 

 

만약 VIEW ONLY READ 옵션을 사용한다면, 뷰를 통해서 읽기만 가능하고 DML을 사용하여 수정 할 수 없다.

 

CREATE OR REPLACE VIEW hr.emp_20_view
AS
SELECT id, name, sal
FROM hr.emp_20
WITH READ ONLY;