씨네
공부하는 개발자 강씨네
씨네
  • 분류 전체보기 (460)
    • Web (21)
      • HTML (11)
      • CSS (10)
    • JS 관련 (49)
      • JavaScript (27)
      • JQuery (22)
    • TS 관련 (15)
      • TypeScript (15)
    • NodeJS (7)
      • NodeJS (7)
    • 따라하며 배우는 시리즈 (23)
      • NodeJS & ReactJS Basic (23)
      • NodeJS & ReactJS Movie (0)
      • NodeJS & ReactJS Youtube (0)
      • NodeJS & ReactJS ChatBot (0)
    • SPA (14)
      • React (14)
      • Vue (0)
      • Anguler (0)
    • Java 관련 (118)
      • Java (52)
      • JDBC (6)
      • JSP & Servlet (18)
      • Spring Legecy (38)
      • SpringBoot (4)
    • Python (26)
      • Python (20)
      • PyMongo (1)
      • Django (5)
    • Git (24)
      • Github (24)
    • RDB (22)
      • Oracle (21)
      • MySQL (1)
    • NoSQL (5)
      • MongoDB (5)
    • OS (4)
      • Linux (4)
    • 빅데이터 (2)
      • hadoop (2)
    • IDE (20)
      • eclipse (11)
      • VSCODE (4)
      • VisualStudio (1)
      • IntelliJ (1)
      • PyCharm (1)
      • DBeaver (2)
    • Install (3)
      • Tomcat (1)
      • Docker (1)
      • Anaconda (1)
    • 오류&에러 (28)
      • TS (2)
      • NodeJS (7)
      • SQL (8)
      • Java (1)
      • Spring (4)
      • Git (6)
      • 기타 (0)
    • 알고리즘 (67)
      • 수열 (1)
      • 백준(backjoon) (39)
      • Programmers (27)
    • 자격증 (5)
      • SQLD (5)
    • 기타 (2)
    • IT유튜브로 지식쌓기 (2)

공지사항

인기 글

최근 글

티스토리

250x250
hELLO · Designed By 정상우.
씨네

공부하는 개발자 강씨네

[ORACLE] DDL - 데이터 정의어
RDB/Oracle

[ORACLE] DDL - 데이터 정의어

2021. 12. 21. 17:12
728x90

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;
728x90

'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
    'RDB/Oracle' 카테고리의 다른 글
    • [ORACLE] 문자열제거, 공백제거(RPAD / LPAD, RTRIM / LTRIM, TRIM)
    • [ORACLE] DCL - 데이터 제어어
    • [ORACLE] DML - 데이터 조작어
    • [ORACLE] 기본 개념과 용어 및 트랜잭션
    씨네
    씨네
    개발자 씨네가 공부하는 내용을 기록 겸 공유하는 블로그입니다!

    티스토리툴바