[Oracle] DML문

dooboocookie·2022년 9월 29일

DB

목록 보기
3/13

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;
-- emp 테이블에 deptno가 10인 레코드들 tbl_emp10테이블에 삽입

다중테이블 INSERT 문

  1. unconditional insert all
  • 조건 없이 서브쿼리의 결과 행들을 모두 추가
INSERT ALL | FIRST
  INTO 테이블1 VALUES (컬럼1,컬럼2,...)
  [INTO 테이블2 VALUES (컬럼1,컬럼2,...)]
  ...
서브쿼리;
  1. 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,...)
서브쿼리; 
  1. 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,...)
서브쿼리; 
  1. 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 문

  1. 구조가 같은 두 테이블을 하나의 테이블로 합치는 문
  2. 대량의 데이터는 쿼리문의 성능이 떨어짐으로, 나눠서 관리하던 데이터를 하나로 합칠 때 유용
  • 처리
    • 매치되는 행이 존재하면 더하여 UPDATE
    • 매치되는 행이 없으면 INSERT
MERGE INTO 스키마명.테이블명
USING (서브쿼리) 
ON (조건문)  
WHEN MATCHED THEN -- UPDATE
    UPDATE SET 컬럼명 =[, ...]
WHEN NOT MATCHED THEN -- INSERT
    INSERT (컬럼명[, ...]) VALUES ([, ...]);
profile
1일 1산책 1커밋

0개의 댓글