Chapter 9. DDL (CREATE)

김승현·2021년 10월 13일
0

DDL


  • 데이터 정의 언어

  • 객체(Object)를 만들고 (CREATE), 수정하고 (ALTER), 삭제 (DROP) 할 수 있는 구문

  • 오라클 객체의 종류

    • 테이블(TABLE), 뷰(VIEW), 시퀀스(SEQUENCE), 인덱스(INDEX), 패키지(PACKAGE),
      프로시져(PROCEDURE), 함수(FUNCTION), 트리거(TRIGGER), 동의어(SYNONYM) 등이 있음




CREATE


  • CREATE는 OBJECT를 만들기 위해서 사용
  • 표현식
    • CREATE TABLE 테이블명 (컬럼명 자료형(크기), 컬럼명 자료형(크기), ....);
 CREATE TABLE MEMBER(
      USER_ID VARCHAR2(20),
      USER_PW VARCHAR2(20),
      USER_NAME NVARCHAR2(20),
      GENDER NVARCHAR2(1)
);



커럼별 주석


  • 생성된 테이블에는 컬럼별 Comment를 작성할 수 있다

  • 표현식

    • COMMENT ON COLUMN 테이블명.컬럼명 IS '주석';




제약조건 (CONSTRAINTS)


  • 테이블이나 속성에 부적절한 데이터가 들어오는 것을 사전에 차단하도록 제약조건을 정하는 것
  • 데이터 무결성을 지키기 위해 제한된 조건
    • 데이터 무결성 : 데이터의 정확성과 일관성을 유지하기 위한 것
구분의미적용 위치
NOT NULL- 데이터에 NULL을 허용하지 않음컬럼 레벨
UNIQUE- 중복된 값을 허용하지 않음
- UNIQUE 제약 조건이 설정되었다 하더라도 NULL값은 중복 삽입됨
- 이때 해결 방법은 UNIQUE 제약조건과 NOT NULL 제약 조건을 같이 주면 됨
컬럼레벨/테이블 레벨
PRIMARY KEY
(기본키)
- NULL을 허용하지 않고, 중복값도 허용하지 않음
- 컬럼의 고유 식별자(Identifier)로 사용
- 테이블당 한개만 설정 가능
- 테이블 레벨에서 설정하면 복합키로 설정이 가능함
컬럼레벨/테이블 레벨
FOREIGN KEY
(외래키)
- 참조 무결성을 유지하기 위한 제약 조건
- 참조된 다른 테이블이 제공하는 값만 사용할 수 있도록 제한을 거는 것
- 참조하는 컬럼과 참조된 컬럼을 통해 테이블간의 관계가 형성 됨
- 해당 컬럼 값은 참조된 테이블의 컬럼 값 중의 하나와 일치하거나 NULL을 가질 수 있음
컬럼레벨/테이블 레벨
CHECK- 저장 가능한 데이터 값의 범위나 조건을 지정하여 설정한 값만 허용 함컬럼레벨

※ 복합키란? 컬럼 두개 이상을 묶어서 설정하는 키 (UNIQUE 나 PRIMARYKEY에 사용)
※ PRIMARY KEY는 한번만 설정가능하기 때문에 묶어서 설정 해야함
CREATE TABLE MEMBER(
    USER_ID VARCHAR2(20) ,
    USER_PW VARCHAR2(20) ,
    USER_NAME NVARCHAR2(20), 
    GENDER NVARCHAR2(1),
    PRIMARY KEY(USER_ID, USER_PW)  -- 테이블 레벨에서 컬럼 묶어서 설정 가능
);

※ 외래키 설정시 삭제 옵션을 지정하지 않은 상태에서 참조되는 테이블의 데이터 삭제 불가능

  • 삭제 옵션
    • ON DELETE RESTRICTED

      • 참조하는 데이터 삭제 ->자신이 참조하는 컬럼의 값을 null 로 설정
    • ON DELETE CASCADE

      • 참조하는 데이터 삭제 -> 자신이 참조하는 컬럼에 속한 행 자체 삭제



DEFAULT


  • 테이블 생성시 DEFAULT 값을 설정하면 데이터 삽입시 특정 컬럼에 대한 기본데이터를 설정할 수 있다.



EX) 제약조건, DEFAULT 사용하여 테이블 생성

CREATE TABLE MEMBER(
    USER_ID VARCHAR2(20) PRIMARY KEY,
    USER_PW VARCHAR2(20),
    USER_NAME NVARCHAR2(20) NOT NULL UNIQUE, -- 컬럼에 주면 컬럼 레벨
    GENDER NVARCHAR2(1) CHECK( GENDER IN ('남', '여')),
    JOIN_DATE DATE DEFAULT SYSDATE,
    UNIQUE(USER_PW)  -- 마지막에 주면 테이블 레벨
);

CREATE TABLE SHOPPING(
    USER_ID VARCHAR2(20) ,
    PRODUCT_NAME VARCHAR2(50),
    PRICE NUMBER,
    FOREIGN KEY(USER_ID) REFERENCES MEMBER(USER_ID)
);
  • CONSTRAINT_TYPE

    구분의미
    PPRIMARY KEY
    RFOREIGN KEY
    CCHECK 또는 NOT NULL
    UUNIQUE

- 제약 조건 정보 확인
SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명';


SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME 
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME='테이블명'
UNION
SELECT TABLE_NAME,CONSTRAINT_NAME, CONSTRAINT_TYPE 
FROM USER_CONSTRAINTS
WHERE TABLE_NAME='테이블명'
ORDER BY 3 DESC;
  <BR/><BR/>

SubQuery를 이용한 CREATE Table


  • 서브쿼리를 이용해서 SELECT의 조회결과로 테이블을 생성하는 방법
  • 컬럼명과 데이터 타입, 값 이 복사되고, 제약조건은 NOT NULL만 복사 된다.
  • 작성법
    CREATE TABLE 테이블명 AS (서브쿼리);

EX) EMP_ID,EMP_NAME,SALARY,DEPT_TITLE,JOB_NAME 을 출력하는 결과로 별도의 테이블을 생성하고 싶다면?

CREATE TABLE EMP_DET_JOB AS(
SELECT EMP_ID, EMP_NAME, SALARY, DEPT_TITLE, JOB_NAME
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE=DEPT_ID)
LEFT JOIN JOB USING (JOB_CODE));
profile
개발자로 매일 한 걸음

0개의 댓글