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 |