본문 바로가기

SQL/Oracle

4.오라클 식구들(데이터베이스 객체)


CREATE TABLE
 [구문형식] 
 

CREATE TABLE 테이블명
( 컬럼 1 컬럼1타입,
  컬럼 2 컬럼2타입,
  컬럼2 컬럼3타입,
..
);

 테이블의 이름은 임의의 단어로 구성되며 최대 30BYTE 까지 쓸 수 있다.
 마찮가지로 컬럼명과 스키마 사용자 이름도 30BYTE까지 쓸수 있다. 또한 한 테이블에는 최대 255개까지 컬럼을
만들수 있다.

기본 데이터 타입
  - 
기본 데이터 타입은 크게 문자형 데이터, 숫자형 데이터, 날짜형 데이터 세 가지로 구분된다.

   문자형 데이터
   

 데이터 유형설명 길이 
 CHAR 고정길이 최대 크기 2000byte, 디폴트 값은
byte 값 size 디폴트 값은 1이다.
 VARCHAR2 가변 길이 반드시 size값 명시 최대크기 4000byte 디폴트 값은 byte,size값 생략 못함
 NCHAR 고정 길이 유니코드 문자형 데이터 최대 크기 2000byte size 디폴트 값은 1이다.
 NVARCHAR2 가변길이 유니코드 문자형 데이터 최대크기 4000byte size를 생략 못함
 LONG 가변 길이의 문자형 데이터 타입 최대 크기 2GB 이다.


여기서 고정길이와 가변길이의 예를 살펴 보자

CREATE TABLE char_exam1 (
   names1 CHAR(3 BYTE),
   names2 VARCHAR2(3 BYTE));

INSERT INTO chr_exam1 VALUES('AA', 'AA');

영문은 1BYTE를 차지하기 때문에 이 쿼리는 정상적으로 들어간다.

SELECT REPLACE(names1, '  ', 'B') nm1,
             REPLACE(names2, '  ', 'B') nm2, 

이 문장은 공백이 있으면 공백을 찾아서 B로 대체하라는 REPLACE 함수이다. 
위 문장을 실행한 결과 

NM1    NM2
-----------
AAB    AA

로 노출 되었다. 즉 고정 길이인 names1 컬럼은 3byte를 선언하였지만 실제로 공백까지 3byte를 차지하고 있었고 가변 길이는 2byte를 차지하고 있다는걸 알수 있다. 
그렇기 때문에 명확한 컬럼의 경우 CHAR 타입을 쓰고 변동적이라면 VARCHAR2를 사용한다. 다음 경우를 살펴보자

CREATE TABLE chr_exam2 (
name3 CHAR(3 BYTE),
name4 CHAR(3 CHAR),
name5 CHAR(3));

이렇다고 할때 3BYTE는 3BYTE를 갖지만  name4와 5에 영문자 AAA를 넣으면 정상적으로 들어가지만 홍길동을 넣으면 name4에만 들어갈 수 있다. 왜냐하면 char3 은 3바이트가 됫던 6바이트가 됫던 무조건 3글자가 들어가기 때문이다. 

 LONG 타입의 특징 
 1.SELECT 리스트, UPDATE 문의 SET 절, INSERT문의 VALUES 절에서 사용가능 
 2. 하나의 테이블에서 오직 하나 LONG 타입 지정
 3. GROUP BY, ORDER BY, CONNT BY 절에서 올수 없고 SELECT DISTINCT와 사용 못함
 4. GROUP BY 절을 포함한 SELECT 리스트에 올수 없다.
 5. UNION, INTERSECT, MINUS와 함께 쓰인 SELECT 리스트에 올 수 없다. 
 6. CREATE TABLE.. AS SELECT 문장에서 사용 못함. 
하지만 LOB 타입이 나온후 부터 더이상 LONG타입을 사용하지 않도록 권고하고 있다. 

숫자형 데이터
 
- 다양한 형태의 숫자 정보들을 저장하고 관리하기 위해 지원되는 데이터 타입

 

 데이터 유형설명 길이 
 BINARY_FLOAT32bit 부동 소수  4byte
 BINARY_DOUBLE64bit 부동 소수 8byte
 NUMBER[(prec|prec, scale)]가변 숫자 타입 
prec(전체 자릿수 1~38)
scale(-84~127) 소수점 이하 자릿수 
 최대값은 21byte


그럼 여기서 제일 많이 사용 하는 NUMBER 타입을 알아보자.

컬럼명 NUMBER (precision, scale)

 여기서 precision은 전체 자릿수 를 의미한다. 사전적인 의미는 정밀도나 정확성을 뜻한다.
 그리고 scale은 소수점 이하 자릿수를 의미한다. 물론 이 둘다 생략 가능하다.



'SQL > Oracle' 카테고리의 다른 글

집계와 조건분기  (0) 2019.05.24
실행 계획  (0) 2017.11.15
옵티마이저  (0) 2017.11.15
컬럼 속성(무결성 제약조건)  (0) 2017.11.15