SQL 응용

DDL(Data Define Language, 데이터 정의어) b

DDL은 DB구조, 데이터 형식, 접근방식등 DB를 구축하거나 수정할 목적으로 사용하는 언어이다.

DDL 의 3가지 유형

명령어기능
CREATESCHEMA, DOMAIN, TABLE, VIEW, INDEX 를 정의함
ALTERTABL에 대한 정의를 변경하는데 사용함
DROPSCHEMA, DOMAIN, TABLE, VIEW, INDEX 를 삭제함

CREATE DOMAIN c

도메인을 정의하는 명령문

표기형식

CREATE DOMAIN 도메인명 [AS] 데이터_타입 
        [DEFAULT 기본값]
        [CONSTRAINT 제약조건명 CHECK (범위값)];

예제 : '성별' 을 '남' 또는 '여'와 같이 정해진 1개의 문자로 표현되는 도메인 SEX를 정의하는 SQL문

CREATE DOMAIN SEX CHAR(1)
        DEFAULT '남'
        CONSTRAINT VAILD-SEX CHECK(VALUE IN ('남','여'));
  1. 정의된 도메인은 이름이 'SEX'이며, 문자형이고 크기는 1자이다.
  2. 도메인 SEX를 지정한 속성의 기본값은 '남'이다.
  3. SEX를 지정한 속성에는 '남','여'중 하나의 값만을 저장할 수 있다.
CREATE DOMAIN 직위 VARCHAR2(10)
        DEFAULT '사원'
        CONSTRAINT VALD-직위 CHECK(VALUE IN('사원','대리','과장','부장','이사','사장'));

CREATE TABLE c

테이블을 정의하는 명령문

표기형식

CREATE TABLE 테이블명
        (속성명 데이터_타입 [DEFAULT 기본값] [NOT NULL], ...
        [, PRIMARY KEY(기본키_속성명, ...)]
        [, UNIQUE(대체키_속성명, ...)]
        [, FOREGIN KEY(외래키_속성명, ...)]
            REFERENCES 참조테이블(기본키_속성명, ...)]
            [ON DELETE 옵션]
            [ON UPDATE 옵션]
        [, CONSTRAINT 제약조건명] [CHECK (조건식)]);

(예제) '이름', '학번', '전공', '성별', '생년월일'로 구성된 학생 테이블을 정의하는 SQL문을 작성하시오. 단 제약조건은 다음과 같다.

CREATE TABLE 학색
        (이름 VARCHAR(15) NOT NULL,
        학번 CHAR(8),
        전공 CHAR(5),
        성별 SEX,
        생년월일 DATE,
        PRIMARY KEY(학번),
        FOREIGIN KEY(전공) REFERENCE 학과(학과코드)
            ON DELETE SET NULL 
            ON UPDATE SET CASCADE,
        CONSTRAINT 생년월일제약 
            CHECK(생년월일>='1980-01-01'));
  1. 학생 테이블을 생성한다.
  2. '이름'속성은 최대 문자 15자로 NULL 값을 갖지않는다.
  3. '학번'속성은 문자 8자이다.
  4. '전공'속성은 문자 5자이다.
  5. '성별'속성은 'SEX'도메인을 자료형으로 사용한다.
  6. '생년월일'속성은 DATE자료형을 갖는다.
  7. '학번'을 기본키로 정의한다.
  8. '전공'속성은 학과 테이블의 '학과코드' 속성을 참조하는 외래키이다.
  9. 학과테이블에서 튜플이 삭제되면 관련된 모든 튜플의 '전공' 속성의 값도 같은 값으로 변경한다.
  10. '생년월일' 속성에는 1980-01-01 이후의 값만을 저장할 수 있으며, 이 제약조건의 이름은 '생년월일제약'이다.

CREATE VIEW c

뷰(View)를 정의하는 명령문

CREATE VIEW 뷰명([속성명[,속성명,...])]
        AS SELECT문;

(예제) 고객 테이블에서 '주소'가 '안산시'인 고객들의 '성명'과 '전화번호'를 '안산고객'이라는 뷰로 정의하시오

CREATE VIEW 안산고객(성명, 전화번호)
        AS SELECT 성명, 전화번호
        FROM 고객 
        WHERE 주소 = '안산시';

CREATE INDEX a

인덱스를 정의하는 명령문이다.

표기형식

CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명 [ASC | DESC][,속성명 [ASC | DESC]]) 
[CLUSTER];