Oracle/SQL

2012.01.10 SQL 6일차(DDL에 들어가는 데이터타입들에 대한 설명, DDL)

에몽이ㅋ 2012. 1. 11. 09:08
데이터 타입

숫자

number(p, s)

p : 전체자리 수, s: 소수점 이하

) number(5,3) : 12.345, number(3) : 218 ...

number : 그냥 number만 쓰게 되면 총 38자리 양의정수

날짜

date

문자

char(n) : n 바이트 예약한 그대로 끝까지 사용하는 것(최대 2000bytes)

varchar2(n) : n바이트 예약하고, 남는 자리가 있으면 반환(최대 4000bytes)

varchar2의 단점 :
     
메모리반환 후에 update했는데 할당된 길이보다 길게 update해버렸을 때에는 곤란합니다.
 
이 경우에는 char는 별 문제가 되지 않습니다.

(, update시에는 varchar2가 불리합니다.)

(보통 insertupdate보다 훨씬 많이 수행하므로 일반적으로는 varchar2(n)를 많이 사용합니다.)


-----------------------------------------------------------------------------------------------


DDL 사용 예시들 :  http://gyh214.tistory.com/56 

DDL
  
: Data Definition Language

데이터의 내용이 아닌 구조와 관련이 있는 언어들이다.

1. 테이블생성(CREATE) 
문법)
   CREATE [GLOBAL TEMPORARY] TABLE [schema.] table
    (column datatype [DEFAULT expressioin] [column_constraint clause]
    [,……]);


2. 테이블생성(서브쿼리를 이용한)

사용예 1)
 서브쿼리 절을 이용하여 주소록 테이블의 구조와 데이터를 복사하여 addr_second
 테이블을 생성하세요.

CREATE TABLE  addr_second(id, name, addr, phone, email)
AS   SELECT * FROM address;
 
사용예 2)
  주소록 테이블에서 id , phone 칼럼만 복사하여 addr_third 테이블을 생성하세요
CREATE TABLE addr_third
 AS SELECT id, phone FROM address;
 
* TECHNIC : 다른 테이블에서 구조를 복사하고 싶을때
(WHERE절에 항상 거짓인 조건지정) ==> CTAS방법

address테이블의 id, name과 같은 구조를 가진 컬럼을 가진 addr_forth테이블생성
CREATE TABLE addr_forth
AS  SELECT id, name 
       FROM address
WHERE 1=2; 

3. 테이블 구조변경(칼럼추가)
문법) 
ALTER TABLE table
ADD (column datatype [DEFAULT expression],
     [column datatype]….);
  사용예 1)
   주소록 테이블에 날짜 타입을 가지는 birth 칼럼을 추가하세요.

 SQL>   ALTER TABLE address
	ADD (birth date);
------------------------------------------------------------------
  사용예 2)
    주소록 테이블에 문자 타입을 가지는 comment 칼럼을 추가하여라.
    기본값은 ‘No Comment’로 지정하여라.

 SQL>  ALTER TABLE address
	ADD (comments varchar2(200) DEFAULT ‘No Comment’);
 

4. 테이블 구조변경(칼럼삭제)
문법)
   ALTER TABLE tablename DROP COLUMN columnname;


5. 테이블 구조변경(칼럼데이터타입변경, 디폴트값 설정) 
문법)
ALTER TABLE table
MODIFY  (column datatype [ DEFAULT expression]
        [, column datatype]….);

*member 테이블의 passwd컬럼의 디폴트값을 '1234'로 지정하라.
SQL> alter table member modify (passwd DEFAULT '1234');

Table altered. 

제대로 적용되는지 TEST
  1  insert into member (userid, username)
  2* values('modify','test')
SQL> /

1 row created.

SQL> select userid, username, passwd from member
  2  where userid='modify';

USERID     USERNAME   PASSWD
---------- ---------- ----------
modify     test       1234 
*PASSWD 컬럼에 값을 넣어주지 않으면 자동으로 디폴트값이 들어감을 확인
---------다른 예시

* 주소록 테이블에서 phone 칼럼의 데이터 타입의 크기를 50으로 증가시키세요

SQL>  ALTER TABLE address
 	MODIFY phone  VARCHAR2(50);
 

* 동일 : ALTER TABLE address MODIFY (phone VARCHAR2(50));  

수정할 때 크기를 늘이는 것은 괜찮지만 줄일 경우 기존에 들어 있던 데이터보다 작은 값으로 줄이려고 할 경우 에러가 난다.

6. 테이블이름 변경

RENAME old_table TO new_table;


7. 테이블삭제(DROP, 구조까지 모두 삭제)
문법)
     DROP TABLE [schema.]table [cascade constraints];
 
사용예)
     SQL>  DROP TABLE addr_third;


8. 테이블삭제(TRUNCATE, 구조만 남겨두고 자료들 모조리 삭제)
문법)
    TRUNCATE TABLE [schema.] table

* TRUNCATE 명령어는 테이블 구조는 그대로 유지하고 데이터와 할당된 공간을 삭제하는 명령문이다.