오라클/SQL

DML

김포춘 2014. 10. 12. 15:21
반응형

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


1. INSERT

테이블에 새로운 데이터를 입력할 때 사용, 데이터 입력시 숫자 값 이외에는 데이터를 '(홀따옴표)로 감싸야 함


1) INSERT 를 사용하여 단일 행 입력

문법 :

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

VALUES (value 1, value 2, ....) ;


사용 예 1. dept2 테이블에 아래와 같은 내용으로 새로운 부서정보 입력

* 부서번호 : 9000

* 부서명 : 특판1팀

* 상위부서 : 영업부

* 지역 : 임시지역

SCOTT>INSERT INTO dept2 (dcode, dname, pdept, area)

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


※ 모든 컬럼에 데이터를 넣을 경우에는 테이블 이름 뒤 컬럼이름을 생략 가능

SCOTT>INSERT INTO dept2

2    VALUES (9001, '특판2팀', '영업부', '임시지역') ;


사용 예2. 날짜 데이터 입력

* 교수번호 : 5001 

* 교수이름 : 박동주

* ID : Love_me

* POSITION : 정교수

* PAY : 510

* 입사일  2014년 5월 14일

SCOTT>INSERT INTO professor (profno, name, id, position, pay, hiredate)

2    VALUES (5001, '박동주', 'Love_me', '정교수', 510, '2014-05-14')

-> 위와 같이 입력할 경우 날짜 형태가 맞지않아 에러가 날 것이다

리눅스용 날짜 방식은 (dd-mon-yy) 이고 윈도우용 날짜 방식은 (yyyy-mm-dd)이기 때문에

미리 날짜형식을 yyyy-mm-dd 로 바꾸고 입력

SQL>ALTER SESSION SET NLS_DATE_FORMAT='YYYY-MM-DD:HH24:MI:SS' ;


사용 예3. Null 값 입력

* 자동 NULL 값 입력하기

데이터를 입력할 때 컬럼에 값을 안 주면 자동으로 NULL 값이 들어감


* 수동 NULL 값 입력하기

데이터부분에 NULL 값을 적어주면 됨


2) INSERT 를 사용하여 여러 행 입력

SCOTT>INSERT INTO professor2

2    SELECT * FROM professor ;

-> professor 테이블에 있는 데이터를 professor2 테이블로 입력, 

위와 같이 입력할 때 professor2 테이블과 professor 테이블의 컬럼의 개수와 데이터 형이 동일해야 한다.


3) INSERT ALL 을 이용한 여러 테이블에 여러 행 입력


사용 예 1.) 다른 테이블에 한꺼번에 데이터 입력하기

SCOTT>INSERT ALL

2    INTO p_01 (no , name)

3    VALUES (1, 'AAA')

4    INTO p_02 (no , name)

5    VALUES (2, 'BBB')

6    SELECT * FROM dual ;


사용 예2.) 다른 테이블의 데이터를 가져와서 입력하기

professor 테이블에서 교수번호가 1000 번에서 1999 번까지 인 교수의 번호와 교수이름은 p_01 테이블에 입력

교수번호가 2000 번에서 2999 번까지 인 교수의 번호와 이름은 p_02 테이블에 입력

SCOTT>INSERT ALL

2    WHEN profno BETWEEN 1000 AND 1999 THEN

3    INTO p_01 VALUES(profno, name)

4    WHEN profno BETWEEN 2000 AND 2999 THEN

5    INTO p_02 VALUES(profno, name)

6    SELECT profno, name

7    FROM professor ;


사용 예3.) 다른 테이블에 동시에 같은 데이터 입력하기

professor 테이블에서 교수번호가 3000 번에서 3999 번인 교수들의 교수 번호와 이름을 p_01 테이블과 p_02 테이블에 동시에 입력

SCOTT>INSERT ALL

2    INTO p_01 VALUES (profno, name)

3    INTO p_02 VALUES (profno, name)

4    SELECT profno, name

5    FROM professor

6    WHERE profno BETWEEN 3000 AND 3999 ;


2. UPDATE

기존 데이터를 다른 데이터로 변경할때 사용


문법 :

UPDATE table

SET column = value

WHERE 조건 ;


사용 예 1.

professor 테이블에서 직급이 조교수 인 교수들의 BONUS 를 100 만원으로 인상하세요

SCOTT>UPDATE professor

2    SET bonus = 100

3    WHERE position = '조교수' ;


사용 예 2.

professor 테이블에서 차범철 교수의 직급과 동일한 직급을 가진 교수들 중 현재 급여가 250만원이 안 되는 교수들의 급여를 15% 인상하세요.

SCOTT>UPDATE professor

2    SET pay = pay * 1.15

3    WHERE position = (SELECT position   

4                               FROM professor

5                               WHERE name = '차범철' )

6    AND pay < 250 ;


3. DELETE

데이터를 삭제하는 구문

문법 :

DELETE FROM table

WHERE 조건 ;


사용 예 1.

dept2 테이블에서 부서번호(DCODE)가 9000 번에서 9100 번 사이인 매장들을 삭제

SCOTT>DELETE FROM dept2

2    WHERE dcode BETWEEN 9000 AND 9100 ;



4. MERGE

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

문법 :

1 MERGE INTO Table1

2   USING Table2

3   ON (병합 조건절)

4   WHEN MATCHED THEN

5     UPDATE SET 업데이트 내용

6     DELETE WHERE 조건

7   WHEN NOT MATCHED THEN

8     INSERT VALUES (컬럼이름) ;

문법 설명 :

Table1 과 Table2 의 내용을 합쳐서 Table1 에 모으는 것.

이때 기준은 3행의 조건, 3행의 조건이 만족한다면(4행) 기존 Table1 에 있던 해당 내용은 Table2 의 내용으로 UPDATE 또는 DELETE 가 수행되며 조건이 만족하지 않은다면 (7행) Table2 의 내용이 Table1에 신규로 INSERT 된다.


MERGE 작업을 조금이라도 빨리 수행하기 위해서는 위 문법에서 3행의 조건절에 인덱스가 잘 만들어져 있어야 한다.



5. TRANSACTION 관리

논리적인 작업 단위, 여러가지 DML 작업들을 하나의 단위로 묶어 둔 것을 의미

트랜잭션의 시작은 DML 이고, 완료하려면 TCL, DCL, DDL이 입력되면 된다.


COMMIT - 트랜잭션 내의 작업의 결과를 확정하는 명령어

ROLLBACK - 트랜잭션 내의 모든 명령어들을 취소하는 명령어


DML 작업을 한 후에는 반드시 COMMIT 이나 ROLLBACK 명령을 수행해야 작업이 마무리 된다.


반응형

'오라클 > SQL' 카테고리의 다른 글

sql 쿼리결과를 파일로 저장  (0) 2015.07.03
DDL  (0) 2014.10.12
JOIN 함수  (0) 2014.10.10
그룹함수 (연습문제)  (1) 2014.10.08
복수행 함수 (그룹 함수)  (1) 2014.10.08
sql 단일행 함수 - 정규식  (2) 2014.10.01
sql 단일행 함수 - 일반 함수  (0) 2014.09.30