쌓고 쌓다

[Oracle] 데이터 타입 본문

프로그래밍/SQL

[Oracle] 데이터 타입

승민아 2022. 9. 25. 19:58

숫자형 데이터 타입

CHAR(n) : n 크기의 고정 길이 문자 데이터 타입 / 최소 1byte / 최대 2000byte

VARCHAR2(n) : n 크기의 가변 길이 문자 데이터 타입 / 최소 1byte / 최대 4000byte

NVARCHAR2(n) : n 크기의 가변 길이 유니코드 문자(다국어) / 최소 1byte / 최대 4000byte

 

LOB 데이터 타입

: 텍스트, 그래픽, 이미지, 동영상, 사운드 등 구조화되지 않은 대용량의 텍스트나 멀티미디어 데이터를 저장)

BLOB :  대용량의 바이너리 데이터를 저장하기 위한 데이터 타입 / 최대 4GB

CLOB : 대용량의 텍스트 데이터를 저장하기 위한 데이터 타입 / 최대 4GB

NCLOB : 국가별 문자(유니코드) 데이터 저장

BFILE : 대용량의 바이너리 데이터를 파일 형태로 저장하기 위한 데이터 타입 / 최대 4GB

 

날짜 데이터 타입

DATE : 날짜 형식을 저장

TIMESTAMP(n) : DATE 타입의 확장된 형태 / n은 milli second 자릿수 (최대:9) / 연, 월, 일, 시, 분, 초 + 밀리초

INTERVAL YEAR TO MONTH : 년과 월을 이용하여 기간을 저장

INTERVAL DAY TO SECOND : 일, 시, 분, 초를 이용하여 기간을 저장 / 두 날짜의 차이를 표현하는데 유용

 

 

NUMBER(p,s) : 정밀도(p)와 스케일(s)인 숫자 데이터 / p(소수점 포함 전체 몇자리) : 1~38 / s(소수점 몇자리) : -84 ~ 127

ROWID : 테이블내 행의 고유 주소를 가지는 64진수 문자 타입

 

CHAR 데이터 타입

  • 고정된 문자열을 저장 / 최대 2000byte
  • 지정된 길이보다 짧은 데이터가 입력되면, 나머지 공간은 공백으로 채움.

특징

  • 사용자가 데이터를 입력하지 않으면 공백이 입력
  • 지정된 길이보다 긴 데이터가 들어오면 오류 발생
  • 주소 데이터처럼 길이 편차가 심한 데이터를 저장할 때 저장 공간 낭비
  • 주민등록번호처럼 고정된 길이에 사용하는것이 좋다.

 

VARCHAR2 데이터 타입

  • 가변 길이의 문자열을 저장하기 위해 사용 / 최대 4000byte
  • 지정된 길이보다 짧은 문자열이 입력되면 뒷부분은 NULL로 처리하여 공간 낭비가 없음

특징

  • 사용자가 데이터를 입력하지 않으면 남은 공간 반환
  • 지정된 길이보다 긴 데이터가 들어오면 입력되지 않고 오류 발생
  • 길이 편차가 심한 데이터나 NULL이 많이 입력되는 경우 효율적
  • 실무에선 CHAR보단 VARCHAR2를 잘 씀

 

CHAR와 VARCHAR2의 = 비교시 동일한 데이터지만 비교 결과가 거짓이 되는 경우가 발생하기도 함.

 

문자형 데이터의 비교

CHAR과 CHAR의 비교 방법

a는 char(7)로 "sql"이 들어가고 남은 4자리는 공백으로 들어가 있음

b는 char(3)로 "sql"이 딱 들어감

이때 비교는 두개의 길이를 동일하게 맞추어서 비교한다.

즉 b가 char(7)이 되어 남은 자리에 공백이 들어가 비교함

결과 : a=b

CHAR과 VARCHAR2의 비교 방법

a는 char(7)로 "sql"과 남은 4자리 공백이 들어가 있다.

b는 varchar2(7)로 "sql"이 딱 들어가 있다

이때 비교는 길이가 짧은 문자열까지만 비교한다.

결과 : a>b (즉 a=b는 거짓이다.)

 

문자형 데이터 타입과 문자 상수의 비교

문자 상수는 문자 데이터 타입으로 내부 변환되어 비교한다.

동일한 문자 상수를 비교하는 경우에도 비교 대상 칼럼의 데이터 타입에 따라 비교 결과가 달라질 수 있다.

 

1. 문자 상수와  CHAR 데이터 타입 비교 -> 문자 상수를 CHAR 타입으로 변환 후 두 CHAR를 비교

2. 문자 상수와 VARCHAR2 데이터 타입 비교 -> 문자 상수를 VARCHAR2으로 변환후 두 VARCHAR2를 비교

 

예제)

CREATE TABLE test
	(c CHAR(10), v VARCHAR2(10));
    
INSERT INTO test
	VALUES('sql', 'sql');

테이블을 만들었다.

 

상수값, CHAR와 VARCHAR2 데이터 타입의 비교해보자.

SELECT * FROM test WHERE c='sql'; /* 결과: c v가 잘 나옴 */

SELECT * FROM test WHERE v='sql'; /* 결과: c v가 잘 나옴 */

SELECT * FROM test WHERE c=v;     /* 결과: 안나옴 -> char와 varchar2의 길이가 다르므로 거짓 */

 

NUMBER 데이터 타입

  • 숫자를 저장하며 가변 길이 데이터 타입으로 최대 38자리까지 저장
  • 소수는 NUMBER(precision, scale) 형식 / 지정된 자리 이하에서 반올림됨
  • 산술 연산이 필요한 데이터를 저장할 때 효율적

 

ROWID 데이터 타입

  • 테이블에서 행의 위치를 지정하는 주소 값
  • DB 전체에서 중복되지 않는 유일한 값
  • 행 삽입시 테이블 내부에서 자동적 생성
  • SELECT로 조회는 가능하나 DML(INSERT, UPDATE)로 수정 불가
  • 데이터 객체 번호, 상대적 파일 번호, 블록 번호, 행 번호로 구성

학생 테이블의 ROWID와 학번을 출력

SELECT ROWID, studno FROM student;

 

 

Comments