반응형

DML

 

DML: INSERT(입력) , UPDATE(변경) , DELETE (삭제) , MERGE(병합)

DDL : CREATE (생성) , ALTER(수정) , TRUNCATE(잘라내기), DROP(삭제)

TCL : COMMIT(확정) , ROLLBACK(취소)

SELECT : 어떤 분류에서는 DQL 라고 하기도 함

 

INSERT

INSERT 명령어는 테이블에 새로운 데이터를 입력할 때 사용

데이터를 입력할 때 숫자 값 이외에는 데이터를 ‘(홑따옴표)로 감싸야 함

 

 

문법

INSERT INTO table[(column1, column2,....)]

VALUES (value1 , value2 ....)

 

INSERT INTO DEPT2(DCODE,DNAME,PDEPT,AREA)

VALUES (9000, '특판1', '영업부', '임시지역');

COMMIT;

* 삽입 할 컬럼명 입력 해주고 컬럼 위치에 맞게 values 입력. (컬럼 없을 시 null 값 입력)

 

INSERT INTO DEPT2

VALUES (9000, '특판1', '영업부', '임시지역');

COMMIT;

* 컬럼 개수와 values의 개수가 맞아야함

 

※ ITAS 문

INSERT INTO PROFESSOR2

SELECT * FROM PROFESSOR

WHERE POSITION='정교수'; --  (중복삽입가능)

* PROFESSOR 테이블의 POSITION이 정교수인 데이터들만 PROFESSOR2테이블에 INSERT 해줌

 

 

INSERT INTO PROFESSOR2(NAME,ID,POSITION,PAY,HIREDATE)

SELECT NAME, ID, POSITION, PAY,HIREDATE FROM PROFESSOR

WHERE POSITION = '조교수';

 

INSERT ALL

여러 테이블에 여러 행 입력

 

INSERT ALL

INTO P_01(NO,NAME)

VALUES (1,'AAA')

INTO P_02(NO,NAME)

VALUES(2,'BBB')

SELECT * FROM DUAL;

COMMIT;

 

- -다른테이블의 데이터를 가져와서 입력하기

INSERT ALL

WHEN PROFNO BETWEEN 1000 AND 1999 THEN

INTO P_01 VALUES(PROFNO,NAME)

WHEN PROFNO BETWEEN 2000 AND 2999 THEN

INTO P_02 VALUES(PROFNO,NAME)

SELECT PROFNO,NAME

FROM PROFESSOR;

CREATE TABLE STUDENT3

AS SELECT * FROM STUDENT

WHERE 1=2;

** 데이터는 없고 구조만 가지고 싶다면 where 1=2(껍데기만 생성)

 

 

--STUDENT테이블의 1,2학년은 STUDENT3 테이블로 3,4학년은 STUDENT4 테이블로 넣으세요

 

INSERT ALL

WHEN GRADE BETWEEN 1 AND 2 THEN

INTO STUDENT3

WHEN GRADE BETWEEN 3 AND 4 THEN

INTO STUDENT4

SELECT * FROM STUDENT;

 

 

UPDATE

UPDATE 문장은 기존 데이터를 다른 데이터로 변경할 때 사용하는 방법

 

문법 

UPDATE TABLE

SET COLUMN = VALUE

WHERE 조건 ;

 

UPDATE PROFESSOR

SET BONUS = 100

WHERE POSITION = '조교수';

COMMIT;

 

 

--PROFESSOR 테이블에서 차범철 교수의 직급과 동일한 직급을 가진 교수들 중 현재 급여가 250만원이

-- 안 되는 교수들의 급여를 15% 인상하세요.

 

SELECT * FROM PROFESSOR

WHERE POSITION = (SELECT POSITION

FROM PROFESSOR

WHERE NAME ='차범철');

 

 

UPDATE PROFESSOR

SET PAY=PAY*1.15

WHERE POSITION = (SELECT POSITION

FROM PROFESSOR

WHERE NAME ='차범철')

AND PAY < 250;

 

**=> PAY가 1.15배 되서 update 된 것을 확인 할 수 있다.

 

 

--PROFESSOR 테이블에서 나한열 교수의 급여와 보너스를 주승재 교수와 동일하게 수정하여라

 

UPDATE PROFESSOR

SET (PAY,BONUS) = ( SELECT PAY,BONUS

FROM PROFESSOR

WHERE NAME = '주승재')

WHERE NAME = '나한열';

COMMIT;

 

--STUDENT 테이블에서 1학년 학생 중에 키가 175미만이고 몸무게가 60이상인 학생은 1학년의 평균 키와 평균

--몸무게로 수정하여라

 

UPDATE STUDENT

SET (WEIGHT,HEIGHT) = (SELECT AVG(WEIGHT),AVG(HEIGHT)

FROM STUDENT

WHERE GRADE = 1)

WHERE HEIGHT < 175 AND WEIGHT >= 60 AND GRADE = 1;

COMMIT;

 

DELETE

DELETE 문장은 데이터를 삭제하는 구문

DELETE는 바로 반환되지 않아 메모리에 남아있을 수 있음. (TRUNCATE는 바로 반환[ 복구불가능 ])

 

 구문

DELETE FROM TABLE

WHERE 조건

 

 

--DELETE 실습--

 

-- test table 생성

CREATE TABLE scott.test01 (no NUMBER, name VARCHAR2(20), addr VARCHAR2(20));

 

-- 프로시저를 통한 대용량 데이터 입력

BEGIN

FOR i IN 1..500000 LOOP

INSERT INTO scott.test01

VALUES(i, DBMS_RANDOM.STRING('A',19) ,

DBMS_RANDOM.STRING('Q',19) );

END LOOP;

COMMIT;

END;

 

select count(*) from scott.test01;

 

-- TEST01 테이블 사이즈 확인

select sum(bytes)/1024/1024 MB

from dba_segments

where owner = 'SCOTT'

and segment_name = 'TEST01'; --테이블명

 

-- 각 테이블 정보 확인

select table_name, num_rows, blocks, empty_blocks

from dba_tables

where owner='SCOTT'

and table_name='TEST01';

 

-- 통계 정보 생성

ANALYZE TABLE SCOTT.TEST01 COMPUTE STATISTICS;

 

생성후 위 각 테이블 정보 확인시

 

 

 

 

-- 실 사용 블럭 수 조회

SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(rowid) ||

DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)) "실사용 블록수"

FROM SCOTT.TEST01;

 

 

-- 테이블의 테이블스페이스 조회

SELECT TABLE_NAME, TABLESPACE_NAME

FROM DBA_TABLES

WHERE TABLE_NAME='TEST01';

 

 

-- 테이블 전체 삭제

DELETE FROM SCOTT.TEST01;

COMMIT;

--> DELETE로 삭제하게 되면 INSERTHWM이후에 있는 주소 값에 삽입하게 된다. --> reorg 작업

** reorg작업 : full scan 후 빈 공간에 차례대로 정렬하는 작업

 

REORG 작업

-- 테이블 스페이스 MOVE

ALTER TABLE SCOTT.TEST01 MOVE TABLESPACE EXAMPLE;

 

MERGE(위험성 때문에 잘 사용안함)

MERGE 란 여러 테이블 데이터를 합치는 병합을 의미

이 명령어는 문법이 다소 복잡하므로 잘 살펴봐야함

 

 문법

MERGE INTO Table1

USING Table2

ON (병합 조건절)

WHEN MATCHED THEN

UPDATE SET 업데이트 내용

DELETE WHERE 조건

WHEN NOT MATCHED THEN

INSERT VALUES(컬럼이름);

 

 

->다량 중복데이터 관리할 때 사용

--MERGE 작업 QUERY 1 (pt_01 테이블과 p_total 테이블 병합)

merge into p_total total

using pt_01 p01

on (total.판매번호 = p01.판매번호)

when matched then

update set total.제품번호=p01.제품번호

when not matched then

insert values(p01.판매번호,p01.제품번호,p01.수량,p01.금액);

 

merge into p_total total

using pt_02 p02

on (total.판매번호 = p02.판매번호)

when matched then

update set total.제품번호=p02.제품번호

when not matched then

insert values(p02.판매번호,p02.제품번호,p02.수량,p02.금액);

 

--확인

select * from p_total;

select * from pt_01;

select * from PT_02;

 

commit;

 

 

 

 

'Study Note > Database' 카테고리의 다른 글

SQL TUNING - 기본  (0) 2016.02.15
DDL  (0) 2016.02.04
[Tool] Orange Character Set 설정하기  (0) 2016.02.04
SUB QUERY (서브쿼리)  (0) 2016.02.04
JOIN  (0) 2016.02.04

+ Recent posts