본문 바로가기

Study/OracleDB

31강 테이블 구조 생성, 변경 및 삭제하는 DDL(1)

728x90

-- 1. DB 객체 분류
-- 2. CREATE table로 구조 정의하기.

-- 01. 테이블 구조 정의하는 CREATE TABLE
-- 다음은 CREATE TABLE 문의 기본 형식입니다.
-- CREATE TABLE table_name 
-- (
-- column_name, data_type expr,...
-- );

-- ROWID
-- ROWID 데이터 형은 테이블에서 행의 위치를 지정하는 논리적인 주소값입니다.

-- ROWID는 데이터베이스 전체에서 중복되지 않는 유일한 값으로
-- 테이블에 새로운 행이 삽입되면 테이블 내부에서 의사 컬럼 형태로
-- 자동적으로 생성됩니다.

-- ROWID는 테이블의 특정 레코드를 랜덤하게 접근하기 위해서 주로 사용됩니다.

-- 다음은 select 문을 통해서 emp 테이블의 ROWID를 살펴보겠습니다.
select rowid, empno, ename from emp;

-- INTERVAL YEAR TO MONTH
-- INTERVAL YEAR TO MONTH 형은 년과 월을 사용하여 두 날짜 사이의
-- 기간을 저장하기 위한 데이터 형입니다.
-- INTERVAL YEAR TO MONTH(년도에 대한 자릿수) TO MONTH(달에 대한 자릿수)
-- 자릿수를 지정하지 않으면 기본적으로 2자리 잡힙니다.

-- <실습하기> 컬럼에 기간(3년을)을 저장하기
-- INTERVAL YEAR TO MONTH 형으로 컬럼을 생성하여 3년이란 기간을 저장해 보시오.
-- 1. 다음은 SAM02란 이름의 테이블을 새롭게 생성하는 명령어입니다.
create table sam02(YEAR01 INTERVAL YEAR(3) TO MONTH);

-- 2. 생성된 테이블에 기간을 36개월로 저장합니다.
insert into sam02 values(INTERVAL '36' MONTH(3));
                        -- 36개월로 저장하겠다.

-- 3. 오늘 날짜를 출력하고 테이블 SAM02의 YEAR01 이라는 컬럼에 저장된 날짜만큼
-- 지난 날짜를 계산하여 출력해 봅시다.
select year01, sysdate, sysdate+year01 from sam02;

-- INTERVAL DAY TO SECOND 형은 일, 시, 분, 초를 사용하여 두 날짜
-- 사이의 기간을 저장하기 위한 데이터 형입니다.
-- INTERVAL DAY(일수에 대한 자릿수) TO SECOND(초에 대한 자릿수)

-- 자릿수를 지정하지 않으면 기본적으로 2자리 잡힙니다.

-- <실습하기> 컬럼에 기간(100일)을 저장하기
-- INTERVAL DAY TO SECOND 형으로 컬럼을 생성하여 100일이란 기간을 저장해보시오.
-- 1. 다음은 SAM03란 이름의 테이블을 새롭게 생성하는 명령어입니다.
create table sam03(DAY01 INTERVAL DAY(3) TO SECOND);
                 --컬럼명    데이터 타입(3) 

-- 2. 생성된 테이블에 기간을 100일을 저장합니다.
insert into sam03 values(interval '100' day(3));

-- 3. 오늘 날짜를 출력하고 테이블 SAM03의 DAY01 이라는 컬럼에 저장된 날짜만큼
-- 지난 날짜를 계산하여 출력해 봅시다.
select day01, sysdate, sysdate+day01 from sam03;
                        -- +100일

-- <실습하기> 새롭게 테이블 생성하기
-- 지금까지 실습에 사용했던 사원 테이블과 유사한 구조의 사원번호, 사원이름, 급여 3개의 컬럼으로
-- 구성된 EMP01 테이블을 생성해 봅시다.

-- 1. CREATE TABLE 명령어로 EMP01 테이블을 새롭게 생성합시다.
CREATE TABLE EMP02(
EMPNO NUMBER(4),
ENAME VARCHAR2(20),
SAL NUMBER(7, 2));
     -- 소수점 2자리.
     
-- <스스로하기>
-- 1. 다음과 같은 구조의 테이블을 CREATE TABLE 명령어로 생성하되 테이블의 이름은 DEPT01로 하시오.
create table dept01
(
DEPTNO NUMBER(2),
DNAME  VARCHAR2(14),
LOC    VARCHAR2(13)
);

-- <실습하기> 서브 쿼리로 테이블 생성하기
-- CREATE TABLE문에서 서브 쿼리를 사용하여 이미 존재하는 테이블과 동일한 구조와
-- 내용을 갖는 새로운 테이블을 생성할 수 있습니다.

-- 1. CREATE TABLE 명령어 다음에 컬럼을 일일이 정의하는 대신 AS 절을 추가하여
-- EMP 테이블과 동일한 내용과 구조를 갖는 EMP02 테이블을 생성해 봅시다.
create table emp02
as (select * from emp);

select * from emp02;

-- <실습하기> 원하는 컬럼으로 구성된 복제 테이블 생성하기
-- 1. 서브 쿼리문의 select 절에 * 대신 원하는 컬럼명을 명시하면 기존 테이블에서
-- 일부의 컬러만 복사할 수 있습니다.
create table emp03
as
select empno, ename from emp;

select * from emp03;

-- <탄탄히 다지기>
-- 2. EMP 테이블을 복사하되 사원번호, 사원이름, 급여 컬럼으로 구성된 테이블을 생성하시오.
--(테이블의 이름은 emp04로 하시오.)
create table emp04
as select empno, ename, sal from emp;

select * from emp04;

-- <실습하기> 원하는 행으로 구성된 복제 테이블 생성하기
-- 기존 테이블에서 원하는 행만 선택적으로 복사해서 생성할 수도 있습니다.
-- 1. 서브 쿼리문의 select 문을 구성할 때 where 절을 추가하여 원하는 조건을 제시하면
-- 기존 테이블에서 일부의 행만 복사합니다.
create table emp05
as
select * from emp
where deptno=10;
-- deptno가 10인 데이터만 복사

select * from emp05;

-- 1.2 테이블의 구조만 복사하기
-- 서브 쿼리를 이용하여 테이블을 복사하되 데이터는 복사하지 않고 기존
-- 테이블의 구조만 복사하는 것을 살펴봅시다.

-- 테이블의 구조만 복사하는 것은 별도의 명령이 있는 것이 아니다.
-- 서브 쿼리를 이용해야 하는데 where 조건 절에 항상 거짓이 되는 조건을 지정하게되면
-- 테이블에서 얻어질 수 있는 로우가 없게 되므로 빈 테이블이 생성되게 됩니다.

create table emp06
as
select * from emp where 1=0;
                    -- 항상 거짓
                    
-- where 1=0; 조건은 항상 거짓입니다. 이를 이용하여 테이블의
-- 데이터는 가져오지 않고 구조만 복사하게 됩니다.

-- <탄탄히 다지기>
-- 3. DEPT 테이블과 동일한 구조의 빈 테이블을 새성하시오.
-- (테이블 이름은 dept02로 하시오.)
drop table dept02;
create table dept02
as 
select * from dept
where 1=0;

select * from dept02;

반응형