안녕하세요, 코린이의 코딩 학습기 채니 입니다.
개인 포스팅용으로 내용에 오류 및 잘못된 정보가 있을 수 있습니다.
오라클의 구조
DataBase - user(schema) - table... - data...
table의 구조
- 실제 데이터를 관리하는 객체
- 행 단위로 데이터를 관리
용어 정리
- table (entity, relation)
- column 열 (filed, attribute)
- row 행 (record, tuple)
- domain : 하나의 속성(열)에서 가질 수 있는 원자 값의 집합 (Y/N, M/F, 1/0 등)
테이블 구조 확인
desc employee;
NULL 여부 : NOT NULL (필수) , NULL (선택)을 나타냅니다.
자료형에는 문자형(char, varchar2), 숫자형(number), 날짜형(date)가 있는 것을 확인할 수 있습니다.
테이블 생성 및 데이터 추가
create table 테이블명();
-- 테이블 생성구문
create table tb_datatype(
a char(10),
b varchar2(10)
);
테이블 생성은 자동으로 commit (커밋) 되기 때문에 다른 작업을 하다가 테이블을 새로 만들면 모두 commit 됩니다. (주의!)
※ commit(커밋)
- 메모리 상의 작업 내용을 실제 DB에 저장
데이터 추가
insert into 테이블명 values();
-- 데이터 추가 (행단위)
insert into tb_datatype values('korea', 'korea');
데이터를 추가 후 commit 처리를 해주지 않으면, 메모리 상에만 저장 됩니다.
따라서 최종 데이터를 DB에 저장해주고 싶다면 commit 처리를 해줘야 합니다.
만일 메모리 상의 작업 내용을 취소 하고 싶다면 rollback; 처리를 해줍니다.
※ rollback(롤백)
- commit 된 내용은 그대로 남음
- rollback의 역할은 마지막 commit 시점으로 돌아가는 것
DB의 자료형
크게 문자형 / 숫자형 / 날짜형으로 나눠집니다.
☞ 문자형
문자형에서도 고정형 / 가변형으로 나눠지게 됩니다.
고정형 char(2000byte)
가변형 varchar2(4000byte)
가변길이 long(2gb)
가변길이 clob(4gb) - character large object타입
char와 varchar2 모두 데이터의 크기를 10byte로 지정했을 때의 상황을 살펴보겠습니다.
-- 테이블 생성구문
create table tb_datatype(
a char(10), --고정형
b varchar2(10) --가변형
);
-- 데이터 추가 (행단위)
insert into tb_datatype values('korea', 'korea');
insert into tb_datatype values('한국', '한국');
insert into tb_datatype values('한국', '대한민국'); -- 3byte * 4
우선 마지막 insert문은 해당 오류가 뜨면서 추가 되지 않을 것입니다.
"-- ORA-12899: value too large for column "KH"."TB_DATATYPE"."A" (actual: 12, maximum: 10)"
그 이유는 한글은 한 글자 당 3byte인데, '대한민국' 총 12byte가 사용되겠죠.
하지만 varchar2의 길이는 10byte이므로 지정한 길이보다 오버되기 때문입니다.
데이터 중 하나라도 길이가 오버된다면 길이가 알맞은 데이터도 추가할 수 없다는 것을 확인할 수 있었습니다.
그렇다면 고정형과 가변형의 차이에 대해서 살펴보겠습니다.
select
a, -- 어느 column을 볼 지 선택, *는 모든 것을 의미
lengthb(a), -- 길이에 관련된 column 생성(lengthb())
b,
lengthb(b)
from
tb_study;
A열에 'korea'와 '한국'은 데이터의 길이가 10byte로 고정되어 있는 것을 확인할 수 있습니다.
10byte를 사용하지 않았어도 10byte로 고정되어있는 것이죠.
반면에 B열 'korea'와 '한국'은 실제 입력된 데이터만큼 데이터의 길이가 변동되는 것을 확인할 수 있습니다.
10byte로 지정을 했어도 10byte 이하로 사용하게 된다면 실제 입력된 데이터만큼 길이가 변동 되는 것이죠.
☞ 숫자형
number([p], [s])
[p]는 표현할 수 있는 전체 자리수
[s]는 소수점 이하 자리수
물론 둘 다 생략 가능합니다!
create table tb_study2 (
a number,
b number(7, 3),
c number(7),
d number(7, 1),
e number(7, -2)
);
insert into tb_study2 values (1234.567, 1234.567, 1234.567, 1234.567, 1234.567);
insert into tb_study2 values (1234567.89, 1234567.89, 1234567.89, 1234567.89, 1234567.89);
-- ORA-01438: value larger than specified precision allowed for this column
select * from tb_study2;
1234.567의 데이터를 입력했을 때의 결과입니다.
자리수와 소수점 이하 자리수에 따라서 같은 숫자라도 결과값이 다른 것을 확인할 수 있습니다.
c의 경우 [0]이 생략 되었기 때문에 반올림된 1235가 입력 되어있습니다.
또한 1234567.89 처럼 [p] 전체 자리수를 넘어가는 숫자를 입력하게 되면 마찬가지로 오류가 발생하게됩니다.
(a의 경우 자리수 지정을 안해주었기 때문에 a만 1234567.89 입력 가능!!)
☞ 날짜형
날짜형에서도 date / timestamp로 나눠지게 됩니다.
date : 년월일 시분초
timestamp : 년월일 시분초 밀리초/타임존
날짜형 연산 지원
date + number : date (number일후 날짜정보를 리턴)
date - number : date (number일전 날짜정보를 리턴)
date - date : number (날짜차이를 리턴(1 = 하루))
현재 시각 정보 가져오기
※ dual
- 1행짜리 가상 테이블
select
sysdate, --현재 시각 정보를 date 타입으로 반환 (DB서버가 돌고 있는 OS의 시간 정보)
current_date, -- 접속하고 있는 client를 기준으로 정보를 가져옴
to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss') as "sysdata",
systimestamp "systimestamp", -- 현재 시각 정보를 timestamp 타입으로 반환
current_timestamp
from
dual; -- 1행짜리 가상 테이블
sysdate는 년/월/일만 출력되기 때문에 to_char 배열에 담아 년/월/일 시:분:초까지 출력되도록 해보았습니다.
날짜 연산 해보기
select
to_char(sysdate + 1, 'yy/mm/dd hh24:mi:ss') as "tomorrow",
to_char(sysdate, 'yy/mm/dd hh24:mi:ss') as "today",
to_char(sysdate - 1, 'yy/mm/dd hh24:mi:ss') as "yesterday",
to_char(sysdate + (26 / 24), 'yy/mm/dd hh24:mi:ss') as "26시간뒤",
(sysdate + 1) - sysdate as "날짜차이" -- 날짜차이 리턴
from
dual;
날짜 테이블 생성
create table tb_study3 (
a date,
b timestamp,
c timestamp with time zone
);
insert into tb_study3 values (sysdate, systimestamp, systimestamp);
select * from tb_study3;
'DataBase > Oracle' 카테고리의 다른 글
DQL) select 구문 입력 순서, 실제 처리 순서 (0) | 2022.04.12 |
---|---|
SQL) 기본 SQL 문법 종류 (DDL, DML, DCL, DQL, TCL) 정리 (0) | 2022.04.12 |
DB) DB의 정의, 특징, DBMS, RDBMS, 정규화 (0) | 2022.04.12 |
계정 생성) 계정 생성 및 권한 부여 (0) | 2022.04.12 |
환경설정) SQL Developer 환경설정 및 파일 생성 방법 (0) | 2022.04.12 |