SQL(Structured Query Language)의 DDL(Data Definition Language), DML(Data Manipulation Language), DCL(Data Control Language) 중 지난번 포스팅에서는 DML에 대하여 알아봤었는데요. 이번 포스팅에서는 데이터 정의 언어인 DDL에 대하여 알아볼 예정입니다. DDL에는 크게 3가지 명령어가 있습니다.
- CREATE : 테이블, 뷰, 프로시저 등을 생성
- ALTER : 테이블, 뷰, 프로시저 등을 수정
- DROP : 테이블, 뷰, 프로시저 등을 삭제
* VIEW : 실제 테이블을 가지고 만든 가상 테이블
(JOIN 된 상황에서는 INSERT/DELETE 불가)
1. CREATE
1-1.테이블 생성
CREATE TABLE 테이블명(
컬럼명 DATA_TYPE(SIZE),
...
CONSTRAINT 제약조건명 제약조건 (컬럼명...)
);
CREATE OR REPLACE VIEW V_EMP AS SELECT * FROM EMP;
이 명령어를 해석해보면 “테이블을 (CREATE)만들 것이다.
하지만 해당 테이블이 있다면 VIEW를 덮을 것이다.
V_EMP이라는 이름으로 (AS)SELECT * FROM EMP를 이용해서”
가 되겠네요.
1-2.시퀀스 생성
CREATE SEQUENCE 시퀀스명(
INCREAMENT BY 정수 (기본값 1) -- 정수값 만큼 증감
START WITH 정수 -- 시작 번호
MAXVALUE 정수 -- 최대값 지정
MINVALUE 정수 -- 최소값 지정
CYCLE || NOCYCLE -- 반복 여부
CACHE 정수 || NOCACHE -- 정수값 만큼 미리 생성
);
또한 테이블 말고도 시퀀스를 만들 수 있습니다.
시퀀스(sequence)는 자동으로 순차적으로 증가하는 순번을 반환해 주는 데이터베이스 객체 (주로 KEY값 생성 시 사용)를 말하는데 계수기의 역할을 한다고 생각 할 수 있습니다.
SEQ_EMPID001이라는 이름의 시퀀스를 만들었습니다.
시작하는 정수는 300이고 5만큼 증감합니다.
반복하지 않고 미리 생성되는 정수도 없습니다.
이해가시나요??
NEXTVAL : 시퀀스의 다음 값 / CURRVAL : 시퀀스의 현재 값
SELECT SEQ_EMPID01.NEXTVAL FROM DUAL;
--해당 시퀀스의 다음 값을 봅니다.
SELECT SEQ_EMPID01.CURRVAL FROM DUAL;
--해당 시퀀스의 현재 값을 봅니다.
이번에는 SEQ_EMPID002라는 이름의 시퀀스를 만들었습니다.
시작은 5이고 5만큼 증감합니다. 하지만 최대값이 15로 들어가있으며 반복을 합니다.
SEQ_EMPID02.CURRVAL FROM DUAL;
를 처음에 입력하면 not yet defined in this session 세션이 아직 정의되지 않았다는 메시지를 출력하며 에러가 발생합니다.
증감이 15까지 되고 15가 넘어가니 1로초기화됩니다.
1-3.테이블 복제
- 전체복제
CREATE TABLE 새로운 테이블명 AS SELECT * FROM 테이블명;
- 원하는 컬럼만 복제
CREATE TABLE 새로운 테이블명 AS SELECT 컬럼명 FROM 테이블명;
- 구조(전체 컬럼)만 복제
CREATE TABLE 새로운 테이블명 AS SELECT * FROM 테이블명 WHERE 1=2;
자 여기서 마지막 구조만 복제하는 경우에는 WHERE뒤에 나오는 조건이 꼭 1=2가 아니더라도 거짓이 나오게 하면됩니다.
1=3으로 해도 상관없구요 2=100으로 해도 상관없습니다.
조건이 거짓이 되면 전체 컬럼의 구조만 복사가 됩니다.
연습문제) (문제에 해당하는 명령어를 입력 후 SELECT 이용해서 확인해보세요!)
--Q1) SIZE가 10인 문자형 컬럼 ID와 PW를 가진 TEST 테이블을 생성해보자
CREATE TABLE TEST(
ID VARCHAR2(10),
PW CHAR(10)
);
*INSERT 연습
INSERT INTO TEST VALUES('A', 'B');
INSERT INTO TEST(ID) VALUES('MYID');
INSERT INTO TEST(PW) VALUES('MYPW');
SELECT * FROM TEST;
--CHAR와 VARCHAR2의 차이!
SELECT ID, LENGTH(ID), PW, LENGTH(PW) FROM TEST;
--Q2) 사원 테이블(EMP)의 모든 구조와 데이터를 TEST01로 복사하여 생성해보자.
CREATE TABLE TEST01 AS SELECT * FROM EMP;
--Q3) 사원 테이블에서 사원의 번호와 이름을 TEST02로 복사하여 생성해보자.
CREATE TABLE TEST02 AS SELECT EMPNO, ENAME FROM EMP;
--Q4) 사원 테이블에서 사원의 번호와 이름을 TEST03으로 복사하여 생성해보자.
--단, 컬럼명을 M1, M2로 변경하면서 복사하자.
CREATE TABLE TEST03(M1, M2)
AS SELECT EMPNO, ENAME FORM EMP;
CREATE TABLE TEST03 AS SELECT EMPNO
AS "M1", ENAME AS "M2"
FROM EMP;
--이 방법으로도 가능!
--Q5) 사원 테이블의 구조만 TEST04로 복사하여 생성해보자.
CREATE TABLE TEST04
AS SELECT * FROM EMP WHERE 1=2;
--Q6) 부서 테이블(DEPT) 의 구조만 TEST05로 복사하여 생성해보자.
CREATE TABLE TEST05
AS SELECT *FROM DEPT WHERE 1=2;
2. ALTER
2-1.테이블 수정
ALTER TABLE 테이블명
ADD(컬럼명 DATA_TYPE ...)
MODIFY(컬럼명 DATA_TYPE ...)
DROP COLUMN 컬럼명 || DROP(컬럼명)
--Q7) TEST 테이블에 SIZE가 20인 문자형 컬럼 ADDR을 추가하자.
ALTER TABLE TEST
ADD(ADDR VARCHAR2(20)
);
2-2.시퀀스 수정
ALTER SEQUENCE 시퀀스명
[INCREAMENT BY 정수(기본값 1)]
[{MAXVALUE 정수}][{MINVALUE 정수}]
[{CYCLE|NONCYCLE}]
[{CACHE 정수|NONCACHE}]
*START WITH 값은 수정불가!
3.테이블 삭제
DROP TABLE 톄이블명 (PURGE);
*PURGE를 사용하면 영구삭제 / PURGE를 쓰지 않으면 window에서 휴지통과 같은 곳으로 이동
Q) TEST 테이블을 삭제하자.
DROP TABLE TEST PURGE;
'RDB > Oracle' 카테고리의 다른 글
[ORACLE] 문자열제거, 공백제거(RPAD / LPAD, RTRIM / LTRIM, TRIM) (0) | 2021.12.23 |
---|---|
[ORACLE] DCL - 데이터 제어어 (0) | 2021.12.22 |
[ORACLE] DML - 데이터 조작어 (0) | 2021.12.20 |
[ORACLE] 기본 개념과 용어 및 트랜잭션 (0) | 2021.12.19 |
[ORACLE] 계정 생성 (0) | 2021.12.18 |