본문 바로가기
DB/SQLPLUS

[ORACLE] 테이블

by KhyeonS 2022. 6. 17.

이번엔 테이블에 대해서 알아 볼 것이다.


테이블 
 테이블은 열의 집합이며 테이블에는 행(가로_줄)과 열(세로_줄)로 데이터가 저장된다. 행(Row)은 고유한 레코드들의 집합이고 열(Column)은 레코드 내의 필드(항목)를 나타낸다. employees 테이블에는 각 사원에 대한 행(레코드)과 employee_id, last_name, job_id과 같은 사원 정보를 항목(열)별로 구분해서 저장하고 있다.   
select employee_id, last_name, phone_number, job_id 
from employees; 해서 테이블이 더떻게 구성되어져 있는지 볼 수 있다.

데이터베이스에서 데이터는 테이블의 형태로 관리되는데 테이블을 구성하는 요소는 테이블_명, 컬럼_명, 데이터_타입이고, 필요하면 컬럼에 제약조건을 지정할 수 있다. 

 

  •  테이블 생성은 
    create table 테이블_명(열_명1 데이터_타입1(크기), 열_명2 테이터_타입2(크기), ...)식으로 해주는데 맨 뒤에 제약조건을 함께 써 주어도 된다.
  •  테이블에 데이터를 넣을 때에는 
    insert into 테이블_명 (열_명1, 열_명2, ...) values(데이터1, 데이터2,...)식으로 해준다. 
    컬럼의 갯수와 입력되는 데이터 수가 일치해야 한다. 데이터가 없으면 ' '나 null으로 값을 입력해서 갯수를 맞춰야 한다. 
      하지만 예를 들어 values가 10개의 열이라면 
    10개의 데이터를 모두 넣는다면 (열_명1, 열_명2, ...)을 생략할 수 있고, 
    6개만 데이터를 넣는다면 (열_명1, 열_명2, ...)을 생략한다면 10개의 데이터가 들어간다고 여기므로 6개의 데이터를 넣고 나머지 4개를 null로 처리하거나 
    6개의 데이터만 넣은다면 (열_명1, 열_명2, ...)을 별도로 지정하고, 6개의 데이터만 넣으면 된다. 
     

1) 데이터 타입 
  데이터에는 다양한 값이 존재하므로 데이터를 입력할 때에는 데이터 타입을 지정하는데 문자(char), 숫자(number), 날짜(date) 타입과 동영상이나 이미지, 장문의 글 등을 저장시키는 LOB(Large OBject)가 있다. 

a. 문자 
  문자에는 고정길이 문자를 저장하는 CHAR, 가변길이 문자를 저장하는 VARCHAR(2)가 사용되는데 CHAR는 지정한 길이보다 작은 문자가 들어오면 나머지를 공백으로 채운다. char(10)로 정했는데 4자리 문자만 입력하면 나머지 6자리는 공백으로 채워서 10자리를 채운다. 

b. 숫자
  숫자에는 정수는 NUMBER를 사용하는데 그냥 NUMBER 하면 –10^38~10^38 범위를 가진다. 정수로 길이를 지정한다면 NUMBER(2)식으로 해서 두 자리 –99~99 범위를 주고, 소수는 NUMVER(4, 2)식으로 하면 전체 4자리에서 소수 2자리로 해서 네 자리 –99.99~99.99 범위를 주는 식이다. 실수는 FLOAT를 사용한다. 

c. 날짜
  날짜는 DATE 타입인 SYSDATE를 바로 사용하고, SYSTIMESTAMP는 소수점 이하 6자리까지 반환한다. 날짜 데이터는 별도의 테이블을 생성하지 않고 바로 쿼리해서 사용하면 된다. 

● 테이블 작업

 

update empss
set hired='2018'
where emp_id='8'; 해서 데이터의 튜플 값을 변경할 수 있다.

alter table empss
add(addr varchar2(100) ); 

해서 테이블에 새로운 열을 추가할 수 있다. 맨 뒤에 추가됨(mysql에서는 after name03식으로 해서 name03 열 뒤에 addr 항목을 추가할 수 있다)

alter table empss
drop column addr; 

해서 특정 열을 삭제할 수 있다.

delete from empss
where l_name='baek'; 

해서 특정 행(record)를 삭제할 수 있다. 

alter table empss rename column l_name to last_name; 

해서 열_명을 변경할 수 있다.

delete empss; 

하면 테이블의 데이터만 삭제되고 테이블의 틀은 남는다.

drop table empss; 

하면 테이블과 그 안의 모든 데이터가 함께 삭제된다. 


●예제

 

테이블
1)문자
create table char_tbl(name01 varchar2(100), name02 char(4), name03 char(10));

insret into char_tbl                          values('100', '대한민국', 'Hello World');
insert into char_tbl (name01, name02, name03) values('100', '대한민국', 'Hello World');
insert into char_tbl (name01, name03) values ('100, 'Hello World');
insert into char_tbl                  values ('100', ' ', 'Hello World');

alter table char_tbl modify name02 char(20);
select * from char_tbl;

create table char_tbl(name01 varchar2(100), name02 char(4), name03 char(10));

insret into char_tbl                          values('100', '대한민국', 'Hello World');
insert into char_tbl (name01, name02, name03) values('100', '대한민국', 'Hello World');
insert into char_tbl (name01, name03) values ('100, 'Hello World');
insert into char_tbl                  values ('100', ' ', 'Hello World');

alter table char_tbl modify name02 char(20);
select * from char_tbl;



2)숫자
create table num_tbl(no01 number, no02 float(6), no3 number (6,2)); 
insert into num_tbl values('1000.555', '1000.555', '1000.555'); 
insert into num_tbl values('100000.555', 100000.555, 100000.555);
alter table num_tbl modify no3 number(15, 2);
select * from num_tbl;

create table num_tbl(no01 number, no02 float(6), no3 number (6,2)); 
insert into num_tbl values('1000.555', '1000.555', '1000.555'); 
insert into num_tbl values('100000.555', 100000.555, 100000.555);
alter table num_tbl modify no3 number(15, 2);
select * from num_tbl;



3)날짜
select sysdate, to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') 
"CUR_TIME", systimestamp from dual;


create table empss(emp_id number primary key, l_name varchar(2), job_id varchar2(20), hired number);

insert into empss values('001', 'lee', 'sales', '2010');
insert into empss values('002', 'park', 'design', '2011');
insert into empss values('003', 'kho', 'sales', '2015');
insert into empss values('004', 'baek', 'design', '2017');
insert into empss values('005', 'kang', 'IT', '2020');
insert into empss (emp_id, l_name, hired) values('006', 'hong', '2021');

update empss set job_id='sales'
where emp_id='6';

select * from empss
where emp_id='6'; =확인

select sysdate, to_char(sysdate, 'yyyy-mm-dd hh24:mi:ss') 
"CUR_TIME", systimestamp from dual;


create table empss(emp_id number primary key, l_name varchar(2), job_id varchar2(20), hired number);

insert into empss values('001', 'lee', 'sales', '2010');
insert into empss values('002', 'park', 'design', '2011');
insert into empss values('003', 'kho', 'sales', '2015');
insert into empss values('004', 'baek', 'design', '2017');
insert into empss values('005', 'kang', 'IT', '2020');
insert into empss (emp_id, l_name, hired) values('006', 'hong', '2021');

update empss set job_id='sales'
where emp_id='6';

select * from empss
where emp_id='6'; //=확인



*Transaction 이 완료 되지 않아서 찾을수 없다.*

alter table empss add(addr varchar2(100));

alter table empss add(addr varchar2(100));



●테이블 작업
update empss
set hired='2018'
where emp_id='8'; 
 /*update empss
set job_id= 'IT'
where emp_id= '2';*/

update empss
set hired='2018'
where emp_id='8'; 
 /*update empss
set job_id= 'IT'
where emp_id= '2';*/



●alter table empss add(addr varchar2(100)); 

해서 테이블에 새로운 열을 추가할 수 있다. 맨뒤에 추가됨(mysql에서는 after name01식으로 해서 name01 열뒤에 addr 항목을 추가할 수 있다)

alter table empss
add(addr varchar2(100));



alter table empss drop column addr; 

해서 특정 열을 삭제할 수 있다.

alter table empss
drop column addr;



delete from empss where l_name = 'baek'; 

해서 특정 행(record)를 삭제할 수 있다.

delete from empss 
where l_name = 'baek';



alter table empss rename column l_name to last_name; 해서 열_명을 변경할 수 있다.

alter table empss rename column l_name to last_name;


delete empss; 하면 테이블의 데이터만 삭제되고 테이블의 틀은 남는다.

delete empss;




drop table empss; 하면 테이블과 그안의 모든 데이터가 함께 삭제된다.

drop table empss;



테이블 복사
기존 테이블에서 데이터까지 모두 복사
create table empss1 as select * from empss; 

create table empss1 as select * from empss;



기존테이블에서 테이블 형태만 복사하고 데이터는 복사하지 않기
create table empss2 as select * from empss
where 1>2; <=거짓조건만 주면 형태만 복사 

create table empss2 as select * from empss
where 1>2;



동일한 테이블구조가 있을 때 동일한 다른테이블에서 데이터를 복사해 온다면 
insert into empss2(구조만_있음) select * from empss;
insert into empss2  select * from empss;

insert into empss2(구조만_있음) select * from empss;
insert into empss2  select * from empss;



동일한 테이블구조가 아닌 경우 다른 테이블에서 일부데이터만  복사해 온다면
insert into empss3 (emp_id, job_id, hired) select emp_id, job_id, hired from empss;

insert into empss3 (emp_id, job_id, hired) select emp_id, job_id, hired from empss;

'DB > SQLPLUS' 카테고리의 다른 글

[ORACLE] JOIN-1  (0) 2022.06.17
[ORACLE]제약 조건  (0) 2022.06.17
[ORACLE] 정규 표현식  (0) 2022.06.17
[ORACLE] 분석함수  (0) 2022.06.16
[ORACLE] DECODE,NVL 기타함수  (0) 2022.06.15

댓글