본문 바로가기
SQL

[ORACLE] 기본 문법 5_ 데이터 정의어

by YOU R PLANET 2022. 1. 3.
 데이터 정의어 (DDL:Data Definition Language)
    (1) 데이터를 보관하고 관리하기 위해 제공되는 여러 객체(object)의
    생성`변경`삭제 관련 기능을 수행하는 명령어
    (2) 데이터 조작어(DML)과 달리 데이터 정의어(DDL)은 실행하면 자동으로 COMMIT된다.
자료형(data type)
    (1) VARCHAR2(길이)
        4000byte만큼의 가변 길이 문자열 데이터를 저장할 수 있다.
    (2) NUMBER(전제 자릿수, 소수점 이하 자릿수)
        . ±38 자릿수의 숫자를 저장할 수 있다.
        . NUMBER(p, s)와 같이 표기할 경우 s자리만큼 소수점 이하 자릿수를 표현하고,
          이 소수점 자리를 포함한 전체 p자리만큼 숫자 데이터를 저장한다.
    (3) DATE
        날짜 형식을 저장하기 위해 사용하는 자료형으로
        세기, 년, 월, 일, 시, 분, 초 저장이 가능하다.
    (4) CHAR(길이)
        4000byte만큼의 고정 길이 문자열 데이터를 저장할 수 있다.   

 CREATE문

    (1) 정의
        데이터베이스 객체를 생성하는 데 사용하는 명령어

    (2) 기본 형식
        - 소유계정 이름은 생략 가능하다.
        CREATE TABLE 소유계정.테이블 이름(
            열1 이름 열1 자료형,
            열2 이름 열2 자료형,
            ...
            열N 이름 열N 자료형
        );

    (3) 테이블 이름 생성 규칙
        1. 테이블 이름은 문자로 시작해야 한다(한글도 가능하며 숫자로 시작할 수 없음)
            ex) EMP90(O), 90EMP(X)
        2. 테이블 이름은 30byte 이하여야 한다(즉 영어는 30글자, 한글은 15글자까지 사용 가능)
        3. 같은 사용자 소유의 테이블 이름은 중복될 수 없다(SCOTT 계정에 두 EMP 테이블은 존재할 수 없음)
        4. 테이블 이름은 영문자(한글 가능), 숫자(0-9)와 특수 문자 $, #, _를 사용할 수 있다.
            ex) EMP#90_OB
        5. SQL 키워드는 테이블 이름으로 사용할 수 없다(SELECT, FROM 등은 테이블 이름으로 사용 불가)

    (4) 열 이름 생성 규칙
        1. 열 이름은 문자로 시작해야 한다.
        2. 열 이름은 30byte 이하여야 한다.
        3. 한 테이블의 열 이름은 중복될 수 없다(EMP 테이블에 EMPNO 열이 두 개 존재할 수 없음)
        4. 열 이름은 영문자(한글 가능), 숫자(0-9)와 특수 문자 $, #, _를 사용할 수 있다.
        5. SQL 키워드는 열 이름으로 사용할 수 없다.

사용 예시↓

새 테이블을 생성하는 방법 4가지
1. 자료형을 각각 정의하여 새 테이블 생성하기

CREATE TABLE EMP_DDL(
    EMPNO       NUMBER(4),
    ENAME       VARCHAR2(10),
    JOB         VARCHAR2(9),
    MGR         NUMBER(4),
    HIREDATE    DATE,
    SAL         NUMBER(7, 2),       -- 자연수는 5자리까지, 소수점 이하는 2자리까지
    COMM        NUMBER(7, 2),
    DEPTNO      NUMBER(2)
);
DESC EMP_DDL;

 

2. 기존 테이블 열 구조와 데이터를 복사하여 새 테이블 생성하기

CREATE TABLE DEPT_DDL
    AS SELECT * FROM DEPT;

 

3. 기존 테이블 열 구조와 일부 데이터만 복사하여 새 테이블 생성하기

CREATE TABLE EMP_DDL_30
    AS SELECT *
        FROM EMP
    WHERE DEPTNO = 30;


4. 기존 테이블의 열 구조만 복사하여 새 테이블 생성하기

CREATE TABLE EMPDEPT_DDL
    AS SELECT E.EMPNO, E.ENAME, E.JOB, E.MGR, E.HIREDATE, E.SAL, E.COMM, E.DEPTNO, D.DNAME, D.LOC
        FROM EMP E, DEPT D
    WHERE 1<>1;

 


ALTER문

    (1) 정의
        데이터베이스 객체를 변경할 때 사용하는 명령어
        ex) 테이블에 새 열을 추가 또는 삭제, 열의 자료형 또는 길이를 변경

    (2) 종류
        ADD      : 테이블에 열 추가
        RENAME   : 열 이름 변경
        MODIFY   : 열의 자료형 변경
        DROP     : 특정 열을 삭제

 

사용 예시↓

> HP 열 추가하기

ALTER TABLE EMP_ALTER ADD HP VARCHAR2(20);

> HP열 이름을 TEL로 변경하기

ALTER TABLE EMP_ALTER RENAME COLUMN HP TO TEL;

> EMPNO 열 길이 변경하기

ALTER TABLE EMP_ALTER
    MODIFY EMPNO NUMBER(5);

> TEL 열 삭제하기

ALTER TABLE EMP_ALTER
    DROP COLUMN TEL;

RENAME
    테이블 이름을 변경할 때 사용하는 명령어

 

사용 예시 ↓

> EMP_ALTER 테이블명을 EMP_RENAME으로 변경하기

RENAME EMP_ALTER TO EMP_RENAME;

TRUNCATE
    특정 테이블의 모든 데이터를 삭제하는 명령어

 

사용 예시 ↓

> EMP_RENAME 테이블의 전체 데이터 삭제하기

TRUNCATE TABLE EMP_RENAME;

DROP
    데이터베이스 객체를 삭제하는 명령어

사용 예시 ↓

> EMP_RENAME 테이블 삭제하기

DROP TABLE EMP_RENAME;

시퀀스 
자동으로 번호를 부여하는 방법 

시퀀스 생성 
[1] INCREMENT BY 한번에 증가되는수
[2] START WITH 시작번호
[3] MAXVALUE 최대치
[4] MINVALUE 최소치
[5] NOCYCLE 번호가 MAX 에도달하면 다시 1이되는걸 방지
[6] NOCACHE 시퀀스 시작점을 여러개 설정할수있는것 NOCACHE 는 단일 시퀀스 이다. 

 

사용 예시 ↓

CREATE SEQUENCE SEQ_DEPT
    INCREMENT BY 1   // 1씩 증가하고,
    START WITH 1  // 1부터 시작,
    MAXVALUE 5  // 최대치는 5 ==  5개만 만들 수 있음
    MINVALUE 1  // 최소치는 1
    NOCYCLE    // MAX에 도달하고 다시 1되는 것 방지
    NOCACHE;  // 단일 시퀀스 (시작점 여러개 설정할지 말지)

----------------------- 시퀀스 테이블 생성 --------------------------

INSERT INTO DEPT_SEQQ (DEPTNO, DNAME, LOC) VALUES (SEQ_DEPT.NEXTVAL , 'DATABASE' , 'SEOUL');
=> 6번 시행하면, 마지막엔 추가 오류가 뜸(최대치에 도달했기 때문)

DROP SEQUENCE SEQ_DEPT; // 시퀀스 테이블 삭제
COMMIT;

INSERT INTO DEPT_SEQQ (DEPTNO, DNAME, LOC) VALUES (11 , 'DATABASE' , 'SEOUL');
=> 시퀀스(숫자 자동 증가)를 삭제했으므로 추가 가능

 

 


NOT NULL 
컬럼에 NOT NULL 옵션을 적용시키면 NULL 이나 빈값을 설정할수없다. 

 

사용 예시 ↓

CREATE TABLE TEST_NOTNULL(
    LOGIN_ID VARCHAR(20) NOT NULL,
    LOGIN_PWD VARCHAR(20) NOT NULL,
    TEL VARCHAR(20)
);

INSERT INTO TEST_NOTNULL VALUES('TEST1' , NULL , '010-111-111');
=> 에러 발생 NULL 값 적용 불가능

PRIMARY KEY
NOT NULL 과 UNIQUE 특성을 가지고있다.
빈값을 넣어서도 안되고 중복되는 값을 넣어서도안된다.
로그인할시 아이디나 , 넘버에 주로사용한다. 
줄여서 PK 라고 한다.

사용 예시 ↓

CREATE TABLE TEST_PK(
LOGIN_ID VARCHAR(20) PRIMARY KEY,
LOGIN_PWD VARCHAR(20) NOT NULL,
TEL VARCHAR(20) );

INSERT INTO TEST_PK VALUES(NULL , '1234' , '010-111-111');
=> 에러 발생, NULL 값 적용 불가능

INSERT INTO TEST_PK (LOGIN_ID , LOGIN_PWD , TEL )VALUES('TEST1' , '1234' , '010-111-111');
=> 아래내용을 두번 적용시켜보자 ( 아이디가 중복되므로 두번째는 에러가 발생된다)

 

'SQL' 카테고리의 다른 글

[ORACLE] 기본 문법 4 _데이터 조작어  (0) 2022.01.03
[ORACLE] 기본 문법 3  (0) 2022.01.03
[ORACLE] 기본 문법 2  (0) 2022.01.03
[ORACLE] 기본 문법 1  (0) 2022.01.03
[Oracle] 오라클 사용법_기초  (0) 2022.01.03

댓글