[SQL] SQL 개념 정리, DCL

유은선·2023년 5월 6일
0

SQL

목록 보기
1/3
post-thumbnail

📖 SQL의 개념

DDL (Data Define Language, 데이터 정의어)
DDL은 SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의하거나 변경 또는 삭제할 때 사용하는 언어이다.

  • CREATE : SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 정의한다.
  • ALTER : TABLE에 대한 정의를 변경하는데 사용한다.
  • DROP : SCHEMA, DOMAIN, TABLE, VIEW, INDEX를 삭제한다.

DML(Data Manipulation Language, 데이터 조작어)
DML은 데이터베이스 사용자가 응용 프로그램이나 질의어를 통해 저장된 데이터를 실질적으로 처리하는 데 사용되는 언어이다.

  • SELECT : 테이블에서 조건에 맞는 튜플을 검색한다.
  • INSERT : 테이블에 새로운 튜플을 삽입한다.
  • DELETE : 테이블에서 조건에 맞는 튜플을 삭제한다.
  • UPDATE : 테이블에서 조건에 맞는 튜플의 내용을 변경한다.

📖 DDL

🍀 CREATE TABLE

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

ON DELETE, ON UPDATE 옵션에는 NO ACTION, CASCADE, SET NULL, SET DEFAULT가 있다.

  • NO ACTION : 참조 테이블에 변화가 있어도 기본 테이블에는 아무런 조취를 취하지 않는다.
  • CASCADE : 참조 테이블의 튜플이 삭제되면 기본 테이블의 관련 튜플도 모두 삭제되고, 속성이 변경되면 관련 튜플의 속성 값도 모두 변경된다.
  • SET NULL : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 NULL로 변경한다.
  • SET DEFAULT : 참조 테이블에 변화가 있으면 기본 테이블의 관련 튜플의 속성 값을 기본값으로 변경한다.

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

  • '이름'은 NULL이 올 수 없고, '학번'은 기본키이다.
  • '전공'은 <학과> 테이블의 '학과코드'를 참조하는 외래키로 사용된다.
  • <학과> 테이블에서 삭제가 일어나면 관련된 튜플들의 전공 값을 NULL로 만든다.
  • <학과> 테이블에서 '학과코드'가 변경되면 전공 값도 같은 값으로 변경한다.
  • '생년월일'은 1980-01-01 이후의 데이터만 저장할 수 있다.
  • 제약 조건의 이름은 '생년월일제약'으로 한다.
  • 각 속성의 데이터 타입은 적당하게 지정한다. 단 '성별'은 도메인 'SEX'를 사용한다.
CREATE TABLE 학생
	(이름 VARCHAR(15) NOT NULL,
     학번 CHAR(8),
     전공 CHAR(5),
     성별 SEX,
     생년월일 DATE,
     PRIMARY KEY (학번),
     FOREIGN KEY (전공) REFERENCES 학과(학과코드)
     	ON DELETE SET NULL
        ON UPDATE CASCADE,
     CONSTRAINT 생년월일제약
     	CHECK(생년월일>='1980-01-01'));

다른 테이블을 이용한 테이블 정의

기존 테이블의 정보를 이용해 새로운 테이블을 정의할 수 있습니다.

CREATE TABLE 신규테이블명 AS SELECT 속성명[, 속성명, ...] FROM 기본테이블명;

💡 예제 <학생> 테이블의 '학번, 이름, 학년' 속성을 이용하여 <재학생> 테이블을 정의하는 SQL문을 작성하시오.

CREATE TABLE 재학생 AS SELECT 학번, 이름, 학년 FROM 학생;

🍀 ALTER TABLE

ALTER TABLE은 테이블에 대한 정의를 변경하는 명령문이다.

ALTER TABLE 테이블명 ADD 속성명 데이터_타입 [DEFAULT 기본값];
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT 기본값];
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];

  • ADD : 새로운 속성(열)을 추가할 때 사용한다.
  • ALTER : 특정 속성의 default 값을 변경할 때 사용한다.
  • DROP COLUMN : 특정 속성을 삭제할 때 사용한다.

💡 예제 <학생> 테이블에 최대 3문자로 구성되는 '학년' 속성을 추가하시오.

ALTER TABLE 학생 ADD 학년 VARCHAR(3);

💡 예제 <학생> 테이블의 '학번' 필드의 데이터 타입과 크기를 VARCHAR(10)으로 하고 NULL 값이 입력되지 않도록 변경하시오.

ALTER TABLE 학생 ALTER 학번 VARCHAR(10) NOT NULL;

🍀 DROP

DROP TABLE 테이블명 [CASCADE | RESTRICT];

  • CASCADE : 제거할 요소를 참조하는 다른 모든 개체를 함께 제거한다. 즉 주 테이블의 데이터 제거 시 각 외래키와 관계를 맺고 있는 모든 데이터를 제거하는 참조 무결성 제약 조건을 설정하기 위해 사용된다.
  • RESTRICT : 다른 개체가 제거할 요소를 참조중일 때는 제거를 취소한다.
profile
뭐든지 난 열심히 하지

0개의 댓글