본문 바로가기
Develop/DataBase

테이블 구조 생성, 변경 및 삭제하는 DDL

by jaekk 2018. 7. 11.
1
2
3
4
5
6
7
8
/*
DDL: auto commit
DML: commit해야함
DML 작업 후 DDL -> 그 전 DML 명령어까지 commit
*/
cs








1
2
3
4
5
6
7
8
--# 테이블 생성
create table emp01 (
    empno number(4),
    ename varchar2(20),
-- 영문자 20자리, 한글 10자리    
    sal number(7,2)
-- 7자리 중 소수점 2자리    
);
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
--# 서브쿼리로 테이블 생성
/*
  - 자료형 타입을 가져옴 (구조 + size)
  - 테이블 백업할 때
  - 테이블 구조 분할해서 만들 때
  - 제약 조건은 가져오지 X
   -> alter 명령어로 추가
*/
 
--#1. 서브쿼리로 테이블 생성 - 테이블
 
create table emp02
as
select * from emp
;
 
--#2. 서브 쿼리로 테이블 생성 - 컬럼 지정
 
create table emp03
as
select empno, ename, sal from emp
 
 
--#3. 서브쿼리로 테이블 생성 - where절로 행 지정
create table emp_sales
as
    select * from emp where deptno = 30 -- 결과는 테이블
;
 
--#4. 서브쿼리로 테이블 생성 - 구조만 복사: where절 조건 항상 거짓
create table emp06
as
select * from emp where 10=50
;
cs



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/*
테이블 구조 변경: alter table
컬럼 추가, 수정, 삭제
*/
 
--# 컬럼 추가
--  맨 마지막에 추가, 원하는 위치 삽입 불가
--  이전에 추가한 row 존재-> 컬럼값 null로 입력
alter table emp03
add(job varchar2(9));
 
--# 컬럼 변경
--  타입, 크기, 기본값등을 변경한다는 뜻
alter table emp03
modify (job varchar2 (30));
 
--# 컬럼 삭제
alter table emp03
drop column job;
cs


1
2
3
4
--# ROW 삭제 
--  물리적(DDL): TRUNCATE 테이블 모든 row 제거
--  논리적(DML): DELETE 
TRUNCATE TABLE emp03;
cs


1
2
--# 테이블명 변경 RENAME
rename emp02 to test;
cs






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
--#제약 조건 정의
-- 컬럼 레벨
-- 테이블 레벨
 
 
--# not null 제약조건
--      1. 컬럼 레벨에서만 가능
--      2. 지정하지 않으면 해당 컬럼 null 저장 가능
*/
 
--not null
create table emp01(
    empno number(4not null,
    ename varchar2(20not null,
    job varchar2(20),
    deptno number(2)  
);
 
insert into emp01 values (9001,NULL,NULL,10);
-- 제약조건 위반
insert into emp01 (ENAME,JOB) values ('TIGER','MANAGER'); 
-- 암묵적 null 추가( null,'tiger','manager',null);
-- insert는 row단위로 값이 추가된다.
 
--# Unique 제약 조건
create table emp03 (
    empno number(4unique,
    ename varchar2(20not null,
    job varchar2(20),
    deptno number(2)
);
 
--# UNIQUE
--  특정 컬럼에 대해 중복 X
--  컬럼 레벨 기술
--  예시: 주민번호, 전화번호, email
create table emp03 (
    empno number(4unique,
    ename varchar2(20not null,
    job varchar2(20),
    deptno number(2)
);
 
--# 무결성 제약조건명 기술
create table emp03 (
    empno number(4constraint emp03_empno_uk unique-- 논리적 제약 사항
    ename varchar2(20not null,
    job varchar2(20),
    deptno number(2)
);
 
--# primary key 제약 조건
create table emp03 (
    empno number(4constraint emp03_empno_pk primary key
    ename varchar2(20not null,
    job varchar2(20),
    deptno number(2)
);
 
--# 참조 무결성을 위한 foreign key
-- 부모 테이블의 primary key를 알아야(유일) 자식 테이블의 foreign key를 사용할 수 있다.
-- 자식테이블 : 참조하지 않으면 null을 사용하여라
create table emp03 (
    empno number(4not null
    ename varchar2(20not null,
    job varchar2(20),
    deptno number(2constraint emp03_deptno_fk references dept(deptno)
    --references 참조하고자하는 테이블명(컬럼명)
);
 
--# CHECK 제약 조건
--  설정 값 이외 값 추가 제한
--  값의 범위, 특정 패턴의 숫자 or 문자값
--  data dictionary에 정의: 데이터 표준화
create table emp03 (
    empno number(4constraint emp03_empno_pk primary key
    ename varchar2(20not null,
    job varchar2(20),
    sal number(7,2constraint emp03_sal_ck check(sal between 500 and 5000),
    gender char(1constraint emp03_gender_ck check(gender in ('m','f')),
    deptno number(2constraint emp03_dept_fk references dept(deptno)
    --references 참조하고자하는 테이블명(컬럼명)
);
 
--# DEFAULT 제약 조건
--  아무것도 입력하지 않았을 때 defalut 입력
create table emp03 (
    empno number(4constraint emp03_empno_pk primary key
    ename varchar2(20not null,
    job varchar2(20default 'MANAGER'-- 아무것도 정의하지 않으면 manager 입력
    sal number(7,2constraint emp03_sal_ck check(sal between 500 and 5000),
    gender char(1constraint emp03_gender_ck check(gender in ('m','f')),
    deptno number(2constraint emp03_dept_fk references dept(deptno)
    --references 참조하고자하는 테이블명(컬럼명)
);
 
 
 
 
 
 
 
 
 
 
 
 
 
cs




'Develop > DataBase' 카테고리의 다른 글

트랜잭션  (0) 2018.07.11
테이블의 내용 추가, 수정, 삭제하는 DML  (0) 2018.07.11
Oracle 11g 다운로드  (0) 2018.07.10
Oracle 11g 설치  (0) 2018.07.10
SQL 기초  (0) 2018.07.10

댓글