DML(Data Manipulation Language)
INSERT 문
- 테이블의 행을 추가하는 문
- 추가 후 COMMIT이나 ROLLBACK 트랜잭션 처리 필수
- 형식
INSERT INTO 테이블명 [ (컬럼명,...) ] VALUES (컬럼값,...);
INSERT INTO dept (deptno, dname, loc) VALUES (50, 'QC', 'SEOUL');
COMMIT;
서브쿼리 INSERT 문
- 서브쿼리의 결과를 삽입
- 서브쿼리의 결과의 컬럼들과 대상 테이블의 컬럼들이 일치 해야 함
CREATE TABLE tbl_emp10
AS (SELECT * FROM emp WHERE 1=0);
INSERT INTO tbl_emp10
(
SELECT *
FROM emp
WHERE deptno = 10
);
COMMIT;
다중테이블 INSERT 문
- unconditional insert all
INSERT ALL | FIRST
INTO 테이블1 VALUES (컬럼1,컬럼2,...)
[INTO 테이블2 VALUES (컬럼1,컬럼2,...)]
...
서브쿼리;
- conditional insert all
- 서브쿼리의 결과 행들 중 조건에 맞는 행들을 모두 추가
INSERT ALL
WHEN 조건1 THEN
INTO 테이블1 VALUES(컬럼1,컬럼2,...)
WHEN 조거2 THEN
INTO 테이블2 VALUES(컬럼1,컬럼2,...)
...
ELSE
INTO 테이블3 VALUES(컬럼1,컬럼2,...)
서브쿼리;
- conditional firest insert
- 서브쿼리의 결과 행들 중 조건에 만족하는 첫번째 테이블에만 행 추가
INSERT FIRST
WHEN 조건1 THEN
INTO 테이블1 VALUES(컬럼1,컬럼2,...)
WHEN 조거2 THEN
INTO 테이블2 VALUES(컬럼1,컬럼2,...)
...
ELSE
INTO 테이블3 VALUES(컬럼1,컬럼2,...)
서브쿼리;
- pivoting insert
- INTO 절 뒤에 오는 테이블을 모두 동일하게
INSERT ALL
[WHEN 조건 THEN]
INTO 테이블1 VALUES(컬럼1,컬럼2,...)
INTO 테이블1 VALUES(컬럼1,컬럼2,...)
...
서브쿼리;
UPDATE 문
- 조건에 맞는 행에 열을 수정하는 문
- 조건이 없으면 전체 행 수정
- 수정 후 COMMIT이나 ROLLBACK 트랜잭션 처리 필수
- 형식
UPDATE 테이블명 SET 컬럼 = 값[, ...] [WHERE 조건식];
UPDATE dept
SET loc = 'BUSAN'
WHERE deptno = 50;
COMMIT;
DELETE 문
- 조건에 맞는 행을 삭제하는 문
- 조건이 없으면 전체 행 삭제
- 조건은 보통 중복 값이 없는 고유키(PK)로 하는 것이 일반적
- 삭제 후 OMMIT이나 ROLLBACK 트랜잭션 처리 필수
- 형식
DELETE 테이블명 [WHERE 조건식];
DELETE dept
WHERE deptno = 50;
COMMIT;
MERGE 문
- 구조가 같은 두 테이블을 하나의 테이블로 합치는 문
- 대량의 데이터는 쿼리문의 성능이 떨어짐으로, 나눠서 관리하던 데이터를 하나로 합칠 때 유용
- 처리
- 매치되는 행이 존재하면 더하여 UPDATE
- 매치되는 행이 없으면 INSERT
MERGE INTO 스키마명.테이블명
USING (서브쿼리)
ON (조건문)
WHEN MATCHED THEN
UPDATE SET 컬럼명 = 값 [, ...]
WHEN NOT MATCHED THEN
INSERT (컬럼명[, ...]) VALUES (값 [, ...]);