정보처리기사

SQL 정의어(DDL) - CREATE

르네 루덴스 2021. 7. 15. 17:50

정의어(DDL)는 관계 데이터베이스에서 사용될 테이블, 스키마, 도메인, 인덱스, 뷰 등을 정의(생성)하거나 수정 • 제거 하기 위해 사용되는 언어이다.

 

정의어에 종류에는 CREATE문, ALTER문, DROP문이 있다.

 

CREATE

CREATE 명령어는 테이블, 스키마, 도메인, 인덱스, 뷰 등을 정의(생성)하기 위해 사용하는 명령문이다.

 

①테이블 정의

• 테이블은 CREATE TABLE문에 의해 생성되며, 다음과 같은 구문에 따라 만들어집니다.

 

•구문

 CREATE TABLE 테이블_이름
 ({속성_이름 데이터_타입[NOT NULL],}
 [PRIMARY KEY(속성_이름_),]
 [UNIQUE(속성_ 이름),]
 [FOREIGN KEY(속성_이름)REFERENCES 참조테이블_이름(속성_이름)]
     [ON DELETE CASCADE | SET NULL | SET DEFAULT | NO ACTION]
     [ON UPDATE CASCADE | SET NULL | SET DEFAULT | NO ACTION],
 [CONSTRAINT 제약조건_이름 CHECK (속성_이름=범위 값)]
);

- 구문에서 표현된 '{ }'는 반복, '[ ]'는 생략 가능, ' | ' 는 선택을 의미한다.

- CREATE TABLE 테이블_이름 : 테이블을 만들겠다는 의미이며 '테이블_이름'에는 테이블의 이름을 기입한다.

- [속성_이름 데이터_타입 [NOT NULL]} : 테이블을 구성할 속성 이름과 데이터 타입 등을 기입한다. { }가 반복의 의미이므로 필요 없을 때는 생략한다.

- PRIMARY KEY(속성_이름) : 테이블 생성 시 특정 속성의 값에 중복된 값이 없도록 하며, 즉 모든 속성값이 고유한 값을 가지도록 지정할 때 사용한다.

- FOREIGN KEY (속성_이름) REFERENCES 참조테이블_이름(속성_이름): 외래키를 지정할 때 사용된다.

 • FOREIGN KEY (속성_이름): 현재 생성되는 테이블에서 외래키로 사용될 속성 이름을 기입한다.

 • 참조테이블_이름(속성_이름): 외래키를 이용해서 참조할 테이블과 기본키로 지정된 속성 이름을 기입한다.

- CONSTRAINT 제약조건_이름 CHECK(속성_이름=범위 값) : 테이블을 생성할 때 특정 속성에 대해 속성값의 범위를 지정할 때 사용된다.

- SQL 정의어, 조작어, 제어어는 시작부터 ~ ';'까지가 하나의 문장이다.

 

 

예) 다음 주어진 지시사항에 따라 테이블을 만드는 SQL문을 완성하시오.

 

<테이블 생성 지시사항>

• 학번, 성명, 학과, 학점으로 구성된 [학생] 테이블을 만들어라.
• 학번과 학년은 숫자형 자료이며, 나머지는 문자형이다.
• 성명은 가변길이 문자로 최대 25자리로, 학과는 고정길이 문자로 10자리로, 학점은 고정길이 문자로 1자리 문자형이다.
• 학번을 기본키로 지정한다.
• 성명 속성은 공백이 있을 수 없다.
• 학과 속성을 이용하여 [수강] 테이블의 학과를 참조하도록 외래키를 지정하며, 참조 테이블에서 삭제가 발생하면 NULL 값으로 하고, 수정이 발생하면 연쇄적으로 수정하도록 한다.
• 학년의 속성값은 4이하의 값을 갖도록 'hak' 이름으로 제약한다.

 

<풀이>

CREATE TABLE 학생
( 학번 INT,
  성명 CHAR(5) NOT NULL,
  학과 INT,
  학년 INT,
  학점 CHAR(1),
  PRIMARY KEY(학번),
  FOREIGN KEY(학과) REFERENCES 수강(학과)
    ON DELETE SET NULL
    ON UPDATE CASCADE,
  CONSTRAINT hak CHECK(학년 <=4));

<결과>

학번 성명 학과 학년  학점
         
... ... ... ... ...

 

② 스키마 정의

• 시스템 관리자가 일반 사용자에게 스키마에 대한 권한을 주기 위한 스키마를 만들기 위해 사용한다.

• 스키마는 CREATE SCHEMA 문에 의해 생성되며, 다음과 같은 구문에 따라 만들어진다.

• 구문

 CREATE SCHEMA 스키마_이름 AUTHORIZATION 사용자;

예) 스키마 이름이 'SALLY' 이고, 허가권자가 'LUCAS'인 스키마를 정의하시오.

CREATE SCHEMA SALLY AUTHORIZATION LUCAS;

 

③ 도메인 정의

• 한 속성 값의 범위를 지정하기 위한 도메인은 CREATE DOMAIN 문에 의해 생성되며, 다음과 같은 구문에 따라 만들어진다.

• 구문

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

예) 속성의 값으로 'T'와 'F'로만 구성되는 'success'라는 이름의 도메인을 정의하시오(단, 속성값이 입력되지 않을 경우 기본값은 'T'로 한다.)

CREATE DOMAIN success CHAR(1)
 DEFAULT 'T'
 CONSTRAINT success CHECK (VALUE IN (('T','F'));

 

④ 인덱스 정의

• 데이터 베이스 내의 자료를 보다 효율적으로 검색하기 위해 인덱스를 만들며, 시스템에 의해 자동 관리된다.

• 인덱스는 CREATE INDEX문에 의해 생성되며, 다음과 같은 구문에 따라 만들어진다.

• 구문

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

 -UNIQUE : 중복을 허용하지 않도록 인덱스를 생성할 때 사용되며, 생략시 중복이 허용된다.

 -ON 테이블_이름(속성_이름): 지저된 테이블의 속성으로 인덱스를 만든다.

  • [ASC|DESC]:인덱스로 사용될 속성값의 정렬 방법을 나타내며 ASC는 오름차순, DESC는 내림차순을 의미한다.

 -CLUSTER : 인접된 튜플들을 물리적인 그룹으로 묶어 저장하도록 할 때 사용된다.

 

예) [학생] 테이블의 학과 속성값을 오름차순 정렬하여, 중복을 허용하지 않도록 'stud_idx'라는 이름의 인덱스를 정의하시오.

 CREATE UNIQUE INDEX stud_idx
  ON 학생(학과 ASC);

ALL RIGHTS RESERVED BY 영진닷컴