SQLD - DDL (Data Definition Language)

헨도·2024년 1월 29일
0

SQLD

목록 보기
14/28
post-thumbnail

테이블(Table) 생성

  • 데이터베이스를 사용하기 위해서는 테이블을 먼저 생성해야 한다.
  • 테이블 생성은 Create Table 문을 사용하고 테이블 변경은 Alter Table 문을 사용한다.
    마지막으로 생성된 테이블을 삭제하고 싶을 때는 Drop Table 문을 사용하면 된다.

테이블 관리 SQL문

SQL 문설명
Create Table- 새로운 테이블을 생성한다.
- 테이블을 생성할 때 기본키, 외래키, 제약사항 등을 설정할 수 있다.
Alter Table- 생성된 테이블을 변경한다.
- 컬럼을 추가하거나 변경, 삭제할 수 있다.
- 기본키를 설정하거나, 외래키를 설정할 수 있다.
Drop Table- 해당 테이블을 삭제한다.
- 테이블의 데이터 구조뿐만 아니라 저장된 데이터도 모두 삭제된다.

기본적인 테이블 생성

  • 테이블을 생성하는 방법은 여러 가지가 있다.
    먼저 아주 간단한 테이블 생성 방법을 확인해보자.

    [1] Create Table EMP
        (
        	[2] empno number(10) [4]primary key
          [2] ename (3) varchar2(20)
          [2] sal number(6)
        );
    
    Create Table 문설명
    [1] Create Table- "Create Table EMP" 는 "EMP" 테이블을 생성하라는 의미이다.
    - "( )" 사이에 컬럼을 쓰고 마지막은 세미콜론으로 끝난다.
    [2] 컬럼 정보- 테이블에 생성되는 컬럼 이름과 데이터 타입을 입력한다.
    - 컬럼 이름은 영문, 한글, 숫자 모두 가능하다.
    [3] 데이터 타입- number 는 컬럼의 데이터 타입을 숫자형 타입으로, varchar2는 가변 길이 문자열로 지정할 때 사용한다.
    - char 는 컬럼의 데이터 타입을 고정된 크기의 문자로 지정할 때, date 는 날짜형 타입으로 지정할 때 사용한다.
    [4] 기본키- 기본키를 지정할 때 컬럼 옆에 primary key 를 입력한다.

테이블의 구조 확인

  • SQL 중에 DESC 문이 있다. DESC 문은 테이블의 구조를 확인할 때 사용한다.
  • 즉, Create Table 로 생성된 테이블의 구조를 보고 싶을 때 사용한다.
DESC [테이블 명];

제약조건 사용

  • 기본키, 외래키, 기본값, not null 등은 테이블을 생성할 때 지정할 수 있다.
  Create Table EMP (
      empno number(10),
      ename varchar2(20),
      sal number(10,2) default 0, [-> 기본값을 0으로 지정한다.]
      deptno varchar2(4) not null,
      createdate date default sysdate, [-> 기본값을 sysdate - 오늘 날짜 시분초 로 지정한다.]
      constraint emppk primary key(empno)
  );
  • 위 예에서, "constraint"를 사용하여 기본키(empno)와 기본키의 이름(emppk)을 지정할 수 있다.

  • 만약 위의 예에서 두 개의 컬럼으로 기본키를 지정하고자 한다면 "constraint emppk primary key(empno, ename)"으로 지정하면 된다.

  • sal 컬럼은 number(10,2)로 지정했다.
    이것은 소수점 둘째 자리까지 저장하게 된다.

  • Oracle 데이터베이스에서 "sysdate"는 오늘의 날짜를 조회한다.
    이를 default 옵션을 사용해서 오늘 날짜를 기본값으로 지정할 수 있다.

    Create Table DEPT(
    		deptno varchar2(4) primary key,
    		deptname varchar2(20)
    );
    
     Create Table EMP(
       empno number(10),
       ename varchar2(20),
       sal number(10,2) default 0,
       deptno varchar2(4) not null,
       createdate date default sysdate,
       constraint emppk primary key(empno)
       cnostraint deptfk foreign key (deptno) references dept (deptno)
    );
  • 외래키(foreign key)를 지정하려면, 먼저 마스터 테이블이 생성되어야 한다.
    즉, 사원과 부서 테이블에서는 부서가 마스터 테이블이 된다.

  • 즉, 사원 테이블이 부서 테이블의 deptno를 참조해야 하는 것이다.

  • 그리고 EMP 테이블을 생성할 때 constraint 를 사용하여 외래키 이름인 "deptfk" 를 입력 후 외래키를 생성한다.

constraint deptfk foreign key(deptno) references dept(deptno)

테이블 생성 시 CASCADE 사용

  • 테이블을 생성할 때 CASCADE 옵션을 사용할 수 있다.
    CASCADE 옵션은 참조 관계(기본키와 외래키 관계)가 있을 경우 참조되는 데이터를 자동으로 반영할 수 있는 것이다.
  • 먼저 마스터 테이블 생성한다. 즉, DEPT 테이블을 생성하고 데이터를 입력한다.
  • 그 다음 EMP 테이블을 생성하고 데이터를 입력한다.
    단, EMP 테이블을 생성할 때, "ON DELETE CASCADE" 옵션을 사용한다.
  • 그리고 DEPT 데이터 중 한개의 데이터를 삭제하면 ON DELETE CASCADE 옵션으로 (EMP)데이터가 삭제되는 옵션이다.
  • ON DELETE CASCADE 옵션을 사용하면 참조 무결성을 준수할 수 있다.
    참조 무결성이란, 마스터 테이블(DEPT)에는 해당 부서번호(DEPTNO)가 없는데, 슬레이브 테이블(EMP)에는 해당 부서번호가 있는 경우를 참조 무결성 위배로 볼 수 있다.

테이블(Table) 변경

  • ALTER TABLE 문을 통해 테이블 변경을 할 수 있으며, 테이블명 변경, 컬럼 추가, 변경, 삭제 등을 할 수 있다.

테이블명 변경

  • 테이블명 변경은 ALTER TABLE ~ RENAME TO 문을 사용하면 된다.
ALTER TABLE EMP RENAME TO NEW_EMP;

-> EMP 테이블을 NEW_EMP 테이블로 변경한다.

컬럼 추가

  • 생성된 EMP 테이블에 ALTER TABLE ~ ADD 문을 사용해서 컬럼을 추가한다.
ALTER TABLE EMP ADD (age number(2) default 1);

-> EMP 테이블에 age 컬럼을 추가한다.

컬럼 변경

  • 컬럼의 변경은 ALTER TABLE ~ MODIFY 문을 사용하면 된다.
    컬럼 변경을 통해 데이터 타입을 변경하거나 데이터의 길이를 변경할 수 있다.
  • 컬럼을 변경할 때 제약조건을 설정할 수도 있다.
  • 컬럼의 데이터 타입을 변경할 때 기존 데이터가 있는 경우 에러가 발생한다.
    예를 들어 숫자 타입이고 숫자 데이터가 저장되어 있는데 문자형 데이터 타입으로 변경하면 에러가 발생하는 것이다.
ALTER TABLE EMP MODIFY (ename varchar2(40) not null);

-> EMP 테이블에 ename 컬럼의 길이를 20에서 40으로 변경하고 NOT NULL 조건을 설정했다.

컬럼 삭제

  • 컬럼에 대한 삭제는 ALTER TABLE ~ DROP COLUMN 문으로 삭제한다.
ALTER TABLE EMP DROP COLUMN age;

-> EMP 테이블에 age 컬럼을 삭제한다.

컬럼명 변경

  • 컬럼명 변경은 ALTER TABLE ~ RENAME COLUMN ~ TO 문으로 변경할 수 있다.
ALTER TABLE EMP RENAME COLUMN ename to new_ename;

-> EMP 테이블에 ename 컬럼명을 new_ename으로 변경한다.

테이블(Table) 삭제

  • 테이블 삭제는 DROP TABLE 문을 사용해서 삭제할 수 있다.
  • DROP TABLE 은 테이블의 구조와 데이터를 모두 삭제한다.
DROP TABLE EMP;

-> EMP 테이블의 데이터와 테이블의 구조를 모두 삭제한다.
  • DROP TABLE 에서 "CASCADE CONSTRAINT" 옵션을 사용할 수 있다.
    "CASCADE CONSTRAINT" 옵션은 해당 테이블의 데이터를 외래키로 참조한 슬레이브 테이블과 관련된 제약사항도 삭제할 때 사용된다.
DROP TABLE EMP CASCADE CONSTRAINT;

-> 참조된 제약사항까지도 모두 삭제한다.

뷰(View) 생성과 삭제

  • 뷰란 테이블로부터 유도된 가상의 테이블이다.
  • 실제 데이터를 가지고 있지 않고 테이블을 참조해서 원하는 컬럼만을 조회할 수 있게 한다.
  • 뷰는 데이터 딕셔너리(Data Dictionary) 에 SQL 문 형태로 저장하되 실행 시에 참조된다.

뷰의 특징

특징
참조한 테이블이 변경되면 뷰도 변경된다.
뷰의 검색은 참조한 테이블과 동일하게 할 수 있지만, 뷰에 대한 입력, 수정, 삭제에는 제약이 있다.
특정 컬럼만 조회시켜서 보안성을 향상시킨다.
한번 생성된 뷰는 변경할 수 없고 변경을 원하면 삭제 후 재생성해야 한다.
ALTER 문을 사용해서 뷰를 변경할 수 없다.
  • 뷰를 생성할 때 CREATE VIEW 문을 사용하며 이때 참조할 테이블은 SELECT 문으로 지정한다.
CREATE VIEW T_EMP AS SELECT * FROM EMP;

-> EMP 테이블을 조회해서 그 결과로 T_EMP 라는 뷰(View)를 생성한다.
  • 뷰의 조회는 SELECT 문을 사용해서 일반 테이블처럼 조회한다.
SELECT * FROM T_EMP;

-> 뷰를 조회한다.
  • 뷰의 삭제는 "DROP VIEW" 를 사용한다.
    뷰를 삭제했다고 해서 참조했던 테이블 삭제되지는 않는다.
DROP VIEW T_EMP;

-> 뷰를 삭제한다.

뷰의 장점과 단점

장점단점
특정 컬럼만 조회할 수 있기 때문에 보안 기능이 있다.뷰는 독자적인 인덱스를 만들 수 없다.
데이터 관리가 간단하다.삽입, 수정, 삭제 연산이 제약된다.
SELECT 문이 간단해진다.데이터 구조를 변경할 수는 없다.
하나의 테이블에 여러 개의 뷰를 생성할 수 있다.
profile
Junior Backend Developer

0개의 댓글