gwooden_코린이

오라클 데이터 베이스 데이터 정의어 본문

데이터베이스

오라클 데이터 베이스 데이터 정의어

gwooden22 2023. 1. 13. 13:14
728x90

1. 데이터 정의어

  • CREATE -> 테이블 생성
    • CREATE TABLE 연습
  • DROP -> 테이블 삭제
  • ALTER -> 테이블 수정

 

1. CREATE

  • VARCHAR -> 문자(가변길이)        EX) CHAR(50)    -> ABC 입력 -> 50바이트
    • VARCHAR -> 최대 2,000바이트
    • VARCHAR2 -> 최대 4,000바이
  • CHAR -> 문자 (고정길이)        EX) VARCHAR(50)    -> ABC 입력 -> 3바이트

 

  • NUMBER -> 숫자(가변길이)
  • LONG -> 숫자, 문자 (최대 크기가 2GB까지 허용)

 

  • CLOB -> 문자 최대 4GB까지 허용

 

  • BFILE -> 파일 저장

 

- 테이블 생성 방법은 2가지가 존재

테이블 생성 시 주의사항 (테이블 생성 규칙)  ->  컬럼 생성도 동일한 규칙

  1. 숫자로 시작안함
  2. 이름은 30바이트 이하
  3. 예약어로 안됨(SELECT, UPDATE 이런걸로 테이블명 지정 못함)
  4. $, #, _ 이런거 포함 가능

CREATE TABLE 연습2 (
    이름 VARCHAR(50),
    수학 NUMBER,
    영어 NUMBER(5, 2) -- EX)123.35
);

2. ALTER

- 테이블 수정하고 싶을때

ALTER TABLE

 

연습2 테이블에 새로운 컬럼 추가 (컬럼명, 데이터 타입)

ALTER TABLE 연습2
    ADD 과학 NUMBER;

 

-- 컬럼추가

기존 컬럼에 데이터가 존재하고 있을 때 새로운 컬럼을 추가하게 되면 빈칸은 NULL로 표기된다.

데이터 조작어 UPDATE를 통해 데이터를 수정해줘야 된다.

ALTER TABLE EX_DEPT
    ADD TEL VARCHAR(50);

 

 

-- 컬럼명을 변경

ALTER TABLE 테이블명
    RENAME COLUMN 변경전컬럼명 TO 변경후컬럼명 

ALTER TABLE EX_DEPT
    RENAME COLUMN TEL TO PHONE;

 

 

--데이터타입을 변경

ALTER TABLE 테이블명
    MODIFY 데이터타입을변경할컬럼지정 변경할데이터타입

 

기존 데이터타입 크기보다 크기를 더 줄이는건 불가능하고 늘리는건 가능하다

ALTER TABLE EX_DEPT
    MODIFY DEPTNO NUMBER(5);
    
DESC EX_DEPT;

 

 

 

--컬럼을 삭제

ALTER TABLE 테이블명
    DROP COLUMN 컬럼명

ALTER TABLE EX_DEPT
    DROP COLUMN PHONE;

 

 

--테이블 이름 변경

RENAME 변경전테이블명 TO 변경후테이블명

 

RENAME EX_DEPT TO 부서;

 

 

 

--테이블 데이터 삭제 -> 테이블 자체를 지워버린게 아닌 테이블 안에 있는 데이터를 지워버린것

  • TRUNCATE TABLE 테이블명
    • 롤백, 커밋이 안됨
  • DELETE FROM 테이블명
    • 롤백 커밋 가능
TRUNCATE TABLE 부서;

 

DML 데이터 조작어 INSERT, UPDATEM DELETE -> ROLLBACK, COMMIT (가능)

데이터 정의어 CREATE, ALTER, DROP, TRUNCATE -> ROLLBACK, COMMIT(불가능)

 


3. DROP

-- 테이블 삭제

DROP TABLE 테이블명

DROP TABLE 부서;

4. 복습

--사원 테이블 생성
--<컬럼명     데이터타입          크기>
--사원번호    숫자            4
--사원이름    가변형문자       50
--직책       가변형 문자      50
--상관번호    숫자            4
--입사일      날짜
--급여        숫자            10
--추가수당    숫자             10
--부서번호    숫자             4

CREATE TABLE 사원 (
    사원번호 NUMBER(4),
    사원이름 VARCHAR(50),
    직책 VARCHAR(50),
    상관번호 NUMBER(4),
    입사일 DATE,
    급여 NUMBER(10),
    추가수당 NUMBER(10),
    부서번호 NUMBER(4)
);

DESC 사원;
SELECT * FROM 사원;

 

 

--사원 테이블에 '비고' 컬럼을 추가
--데이터 타입을 가변문자 10바이트

ALTER TABLE 사원
    ADD 비고 VARCHAR(10);

 

 

--사원 테이블에 있는 '비고' 컬럼을 '등급'으로 수정

ALTER TABLE 사원
    RENAME COLUMN 비고 TO 등급;

ALTER TABLE 사원
    RENAME COLUMN 등급 TO 호봉;

 

 

-- EMP 테이블에 있는 데이터를 사원테이블에 저장
-- 호봉은 NULL로 채움

INSERT INTO 사원
    SELECT EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO, NULL FROM EMP;
    
--INSERT INTO 사원(사원번호, 사원이름, 직책, 상관번호, 입사일, 급여, 추가수당, 부서번호)
--    SELECT * FROM EMP;

 

 

--사원 테이블에 직책컬럼의 크기를 20으로 수정

ALTER TABLE 사원
    MODIFY 직책 VARCHAR(20);
    
DESC 사원;

 

 

--사원 테이블에
--직책이 CLERK는 사무원으로 변경
--직책이 SALESMAN 판매원으로 변경
--직책이 MANAGER 매니저
--직책이 PRESIDENT 사장
--직책이 ANALYST 분석가

UPDATE 사원
    SET 직책 = '사무원'
WHERE 직책 = 'CLERK';

UPDATE 사원
    SET 직책 = '판매원'
WHERE 직책 = 'SALESMAN';

UPDATE 사원
    SET 직책 = '매니저'
WHERE 직책 = 'MANAGER';

UPDATE 사원
    SET 직책 = '사장'
WHERE 직책 = 'PRESIDENT';

UPDATE 사원
    SET 직책 = '분석가'
WHERE 직책 = 'ANALYST';

SELECT * FROM 사원;

 

 

--추가수당이 없는 직원들은 급여의 10%만큼 지급
--사장 제외

UPDATE 사원
    SET 추가수당 = 급여 * 0.1
WHERE 직책 != '사장'
AND(추가수당 IS NULL OR 추가수당 = 0);

SELECT * FROM 사원;

 

 

--신입사원 받음
--사원번호 : 999
--사원이름 : TIMO
--직책 : 인턴
--입사일 : 오늘
--급여 : 500
--추가수당 : NULL
--부서번호 : 40
--호봉 : NULL

INSERT INTO 사원
    VALUES(9999, 'TIMO', '인턴', SYSDATE, 500, '', 40, '');

SELECT * FROM 사원;

 

 

--30번 부서에서 진행중인 프로젝트가 망함
--그래서 정리해고진행
--급여가 1500 보다 많이 받는 사람은 해고
--다른사람들은 부서를 40번 부서로 이동

DELETE FROM 사원
    WHERE 부서번호 = 30 AND 급여 > 1500; 
    
UPDATE 사원
     SET 부서번호 = 40
WHERE 부서번호 = 30;

SELECT * FROM 사원;

728x90
Comments