티스토리 뷰

SQL (Structured Query Language) 구조화된 질의 언어

  • DDL (Data Definition Language) : DB 스키마 정의 조작
  • DML (Data Manipulation Language) : Data 조작
  • DCL (Data Control Language) : Data 제어

 

 

DDL = 데이터 정의 언어 (Data Definition Language)

  • CREATE : 테이블, 뷰, 프로시저 등을 생성
  • ALTER : 테이블, 뷰 프로시저 등을 수정
  • DROP : 테이블, 뷰, 프로시저 등을 삭제

 

<CREATE>

CREATE TABLE

CREATE TABLE 테이블명(
	컬럼명 DATA_TYPE(SIZE),
    	...
        CONSTRAINT 제약조건명 제약조건 (컬럼명...)
);

 

ex) TEST table 생성

CREATE TABLE TEST(
	TEST_ID NUMBER,
    	TEST_NAME VARCHAR2(100),
    	TEST_NICKNAME VARCHAR2(1000)
);

 

 

CREATE VIEW

** VIEW : 실제 테이블을 가지고 만든 가상 테이블

** JOIN 된 상황에서는 INSERT / DELETE 불가

 

ex)

CREATE OR REPLACE VIEW V_EMP
AS
SELECT * FROM EMP;

 

 

CREATE SEQUENCE

SELECT 할 때 마다 NEXTVAL 값이 올라감

 

ex) 1

CREATE SEQUENCE 시퀀스명(
  INCREAMENT BY 정수 (기본값 1)		-- 정수값 만큼 증감
  START WITH 정수			-- 시작 번호
  MAXVALUE 정수				-- 최대값 지정
  MINVALUE 정수				-- 최소값 지정
  CYCLE || NOCYCLE			-- 반복 여부
  CACHE 정수 || NOCACHE			-- 정수값 만큼 미리 생성
);
SELECT TESTSEQ.NEXTVAL FROM DUAL;

 

ex) 2

CREATE SEQUENCE SEQ_EMPID01
START WITH 300
INCREMENT BY 5
NOCYCLE
NOCACHE;

NEXTVAL : 시퀀스의 다음 값

CURRVAL : 시퀀스의 현재 값

SELECT SEQ_EMPID01.NEXTVAL, SEQ_EMPID01.CURRVAL
FROM DUAL;

 

ex) 3

CREATE SEQUENCE SEQ_EMPID02
START WITH 5
INCREMENT BY 5
MAXVALUE 15
CYCLE
NOCACHE;

START WITH 값은 처음에만 나오고 다음부터는 나오지 않음

CYCLE일 경우 MAXVALUE를 넘어가지 않는 범위 내에서 INCREMENT BY 만큼 증가하며 반복하여 돈다.

SELECT SEQ_EMPID02.NEXTVAL, SEQ_EMPID02.CURRVAL 
FROM DUAL;

 

AS (TABLE 복제)

 

  • 전체복제
    • CREATE TABLE 새로운 테이블명 AS SELECT * FROM 테이블명
  • 원하는 컬럼만 복제
    • CREATE TABLE 새로운 테이블명 AS SELECT 컬럼명 FROM 테이블명
  • 구조(전체 컬럼)만 복제
    • CREATE TABLE 새로운 테이블명 AS SELECT * FROM 테이블명 WHERE 1=2;
    • (WHERE 조건을 거짓으로 한다. 때문에 NO ROWS SELECTED 이고 컬럼들만 복사)

 

 

예제)

--Q1) SIZE가 10인 문자형 컬럼 ID와 PW를 가진 TEST 테이블을 생성해보자

CREATE TABLE TEST( 
ID VARCHAR2(10), 
PW VARCHAR2(10) 
); 



--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 
AS 
SELECT EMPNO AS "M1", ENAME AS "M2" 
FROM EMP; 
CREATE TABLE TEST03(M1, M2) 
AS 
SELECT EMPNO, ENAME 
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;

 

<ALTER>

ALTER TABLE

테이블 수정

ALTER TABLE 테이블명
 - ADD(컬럼명 DATA_TYPE ...)
 - MODIFY(컬럼명 DATA_TYPE ...)
 - DROP COLUMN 컬럼명 || DROP(컬럼명)

 

ex) TEST 테이블에 SIZE가 20인 문자형 컬럼 ADDR을 추가하자.

ALTER TABLE TEST 
ADD(ADDR VARCHAR2(20));

 

 

ALTER SEQUENCE

시퀀스 수정

ALTER SEQUENCE 시퀀스명
[INCREAMENT BY 정수(기본값 1)]
[{MAXVALUE 정수}][{MINVALUE 정수}]
[{CYCLE|NONCYCLE}]
[{CACHE 정수|NONCACHE}]

** START WITH 값은 수정 불가!!

 

<DROP>

테이블 삭제

DROP TABLE 테이블명 (PURGE);

 

ex) TEST 테이블을 삭제하자.

DROP TABLE TEST PURGE;

* PURGE 붙이지 않으면 DROP 해도 임시 저장 파일은 남아 있다.

* PURGE 붙이면 임시 저장 파일 까지 모두 날아간다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함