1. 오라클에서 지원하는 데이터 타입
데이터 타입의 종류 | 의미 | ||
CHAR(SIZE) | SIZE 크기의 고정 길이 문자 데이터 타입 (반드시 기입해야 한다.) 최대 크기 : 2,000 바이트 최소 크기 : 1 바이트 |
||
VARCHAR2(SIZE) | SIZE 크기의 가변 길이 문자 데이터 타입 (반드시 기입해야 한다.) 최대 크기 : 4,000 바이트 최소 크기 : 1 바이트 |
||
NVARCHAR2(SIZE) | 국가별(NATIONAL) 문자 집합에 따른 SIZE 크기의 문자 또는 바이트의 가변 길이 문자 데이터 타입 (반드시 기입해야 한다.) 최대 크기 : 4,000 바이트 최소 크기 : 1바이트 |
||
NUMBER(P, S) | 정밀도(P) 와 스케일(S) 로 표현되는 숫자 데이터 타입 P : 1 ~ 38 S : -84 ~ -127 |
||
DATE | 날짜 형식을 저장하기 위한 데이터 타입 | ||
ROWID | 테이블 내 행의 고유 주소를 가지는 64진수 문자 타입 행당 6 바이트(제한된 ROWID) 또는 10 바이트 (확장된 ROWID) |
||
BLOB | 대용량의 BINARY 데이터를 저장하기 위한 데이터 타입 최대 크기 : 4GB |
||
CLOB | 대용량의 CHARACTER 데이터를 저장하기 위한 데이터 타입 최대 크기 : 4GB |
||
BFILE | 대용량의 BINARY 데이터를 파일 형태로 저장하기 위한 데이터 타입 최대 크기 : 4GB |
||
TIMESTAMP(N) | DATE 데이터 타입의 확장된 형태 N 은 MILLI SECOND 자리수로 최대 9자리까지 표현 가능 |
||
INTERVAL YEAR TO MONTH | 년과 월을 이용하여 기간을 저장 | ||
INTERVAL DAY TO SECOND | 일, 시, 분, 초를 이용하여 기간을 저장 두 날짜 값의 정확한 차이를 표현하는 데에 유용 |
||
2. CHAR 데이터 타입과 VARCHAR2 데이터 타입 비교
CHAR | VARCHAR2 |
공통점 | |
1️⃣ 데이터 입력 시에 데이터가 입력되지 않으면 NULL 이 입력된다. 2️⃣ 지정된 길이보다 긴 데이터가 입력되면 오류가 발생한다. |
|
차이점 | |
1️⃣ 고정 길이 : 지정된 길이보다 짧은 데이터가 입력되는 경우, 나머지 공간은 공백으로 채워진다. 2️⃣ 최대 2,000 바이트 저장 가능하다. 3️⃣ 저장될 데이터의 길이 편차가 큰 경우에는 사용하지 않는 것이 좋다. 4️⃣ 길이가 고정적인 형태에 사용하는 것이 유리하다. 5️⃣ BOOLEAN 값을 저장하기 위한 목적으로 사용할 수도 있다. |
1️⃣ 가변 길이 : 지정된 길이보다 짧은 데이터가 입력되는 경우, 나머지 공간은 NULL 로 처리되어 공간 낭비가 없다. 2️⃣ 최대 4,000 바이트 저장 가능하다. 3️⃣ 입력 편차가 심하거나 NULL 값이 많이 입력되는 경우 사용하는 것이 좋다. |
1️⃣ 문자 상수와 CHAR 타입 비교
C CHAR(7)
INDERT INTO TABLE_NAME VALUES( 'SQL');
C 라는 컬럼은 CHAR 타입이고 7자리가 들어갈 수 있다.
여기에 'SQL' 이라는 문자 상수를 저장하면 다음과 같은 형태도 저장된다.
S | Q | L | (BLANK) | (BLANK) | (BLANK) | (BLANK) |
즉 저장한 문자 상수의 길이는 3 이지만 총 7자리로 기록되는 것이다.
이 때 만약 C 컬럼에 저장된 값과 'SQL' 문자 상수를 비교 연산하게 되면
다음과 같은 비교가 일어난다.
S | Q | L |
S | Q | L |
CHAR 타입은 빈 공간까지 저장하기 때문에 문자 상수와 비교하려 했을 때 FALSE 결과값을 얻게 된다.
문자 상수에도 공백을 똑같이 4칸을 주고 값을 비교하려 하면 TRUE 결과를 얻을 수 있다.
2️⃣ 문자 상수와 VARCHAR2 타입 비교
V VARCHAR(7)
INDERT INTO TABLE_NAME VALUES( 'SQL');
이렇게 저장하면 V 에는 문자 상수가 다음과 같이 저장된다.
S | Q | L |
즉 문자 상수 'SQL' 과 비교 연산을 하게 되면 TRUE 값을 얻을 수 있게 된다.
3. NUMBER 데이터 타입
SQL 에서는 자바와 달리 정수와 실수 모두 NUMBER 타입으로 표현 가능하다.
실수를 표현할 때에는 PRECISON 과 SCALE 형식이 필요하다.
PRECITION : 소수점을 포함하는 전체 자리 수
SCALE : 소수점 이하 자리 수
예를 들어 NUMBER(5, 2) 을 지정하면 총 다섯 개의 자리 수가 있는 것이고, 2 자리의 소수점 자리를 갖는 것이다.
PERCITION 을 지정하지 않고 숫자를 입력하는 경우
👉 입력한 숫자 값 크기만큼 저장 공간 할당
SCALE 을 지정하지 않고 숫자를 입력하는 경우
👉 소수점 이하는 반올림 되어 정수 값만 저장
4. DATE 데이터 타입
세기, 년도, 월, 일, 시간, 분, 초의 날짜와 시간 정보를 저장하기 위한 데이터 타입이다.
기본 날짜 형식은 YY/MM/DD 형식을 따르고, 국가 설정에 따라 기본 형식은 변환된다.
1️⃣ TO_DATE 함수 : 문자 👉 날짜
문자 상수로 되어 있는 정보를 날짜 타입으로 변환하는 함수이다.
TO_DATE('22/10/22', 'YYYY/MM/DD')
RESULT 👉 2022/10/22
2️⃣ SYSDATE 함수 : 시스템의 현재 날짜와 시간 반환
현재 시점의 날짜 또는 시간 정보를 얻고 싶을 때 사용할 수 있는 함수이다.
기본적으로 출력은 다음과 같이 할 수 있다.
SELECT SYSDATE
FROM DUAL;
하지만 이렇게 출력하면 날짜만 보이게 된다.
시간까지 함께 출력하거나, 또는 다른 형태로 출력하기 위해서는 TO_CHAR 함수를 이용할 수 있다.
SELECT TO_CHAR(SYSDATE, 'YYYY/MM/DD HH:MI:SS') AS "현재 시간"
FROM DUAL
5. LOB 데이터 타입
텍스트, 그래픽, 이미지, 동영상, 사운드 등과 같이 구조화 되어 있지 않은 대용량 텍스트 등의 데이터를 저장하기 위한 데이터 타입이다.
게시판 등의 글을 저장하기 위한 데이터로 활용 가능한 타입이다.
6. ROWID 데이터 타입
데이터 베이스 상에는 저장되지 않고 테이블에 새로운 행이 삽입되면 의사 컬럼(PSEUDO COLUMN) 형태도 자동 생성된다.
이 값은 데이터 베이스에서 중복되지 않는 유일 값이며 SELECT 를 통한 조회는 가능하지만,
INSERT, UPDATE 와 같은 DML 문으로 변경은 불가능하다.
📌 유일 값
ROWID 는 유일 값이지만 TRANSACTION 의 길이 동안에만 그 유일함이 보장된다.
때문에 서로 다른 테이블을 작업하거나, 서로 다른 TRANSACTION 을 작업 중이면 간혹 중복된 ROWID 값이 나올 수도 있다.
📌 의사 컬럼(PSEUDO COLUMN)
테이블의 컬럼과 유사하게 쿼리문 작성이 가능한 컬럼이지만, 변경을 위한 DML 문은 작성할 수 없다는 특징이 있다.
ROWID 와 ROWNUM 이 여기에 속한다.
📌 ROWNUM
쿼리에 의해 추출된 질의 결과 각 행에 부여되는 일련 번호를 말한다.
1부터 순차적으로 값을 할당한다는 특징이 있다.
SELECT 절 단계에서 부여되기 때문에 ORDER BY 절이 있다면 ROWNUM 이 ORDER BY 에 따라 섞일 수 있다.
단순히 ROWNUM 을 출력해보면 다음과 같이 출력할 수 있다.
그렇다면 ORDER BY 를 추가하면 어떻게 바뀔까
SELECT 절을 거치면서 먼저 ROWNUM 이 1부터 순차적으로 붙고,
그 후 ORDER BY 절을 거치며 열을 재정렬하게 된다.
7. TIMESTAMP 데이터 타입
DATE 타입에서 확장된 형태로 MILLI SECOND 단위까지 표현 가능하고 기본 6 자리에서 최대 9 자리까지 사용 가능하다.
1️⃣ TIMESTAMP WITH TIME ZONE
TIMESTAMP 데이터 타입에 지역 시간대를 함께 정한다.
📌 지역 시간대 : 세계 표준시간대를 기준으로 현 지역 시간대를 환산한 시간대
2️⃣ TIMESTAMP WITH LOCAL TIME ZONE
사용자 데이터 베이스의 지역 시간대를 따른다.
예를 들어 개발자는 한국에 있고, 데이터 베이스는 미국에 있는 것을 사용한다면
해당 데이터 베이스의 지역 시간대는 미국을 따르게 된다.
'SQL > ORACLE' 카테고리의 다른 글
집합 연산자 : UNION (0) | 2022.10.24 |
---|---|
NULL 이란? (0) | 2022.10.24 |
WHERE 절의 조건 적용 (0) | 2022.10.22 |
SELECT 절 연산자 사용 (0) | 2022.10.22 |
SELECT 절 작성하기 (0) | 2022.10.22 |