Web develop/SQL

[SQL/ORACLE] DML

ForA 2019. 5. 23. 17:34
728x90

: Data Manipulation Language (데이터 조작어)

종류) INSERT(입력), DELETE(삭제), UPDATE(수정, 재입력)

=> 행단위 실행

INSERT

: 테이블에 (행) 데이터를 추가 (최초 입력)

INSERT INTO 테이블명 (컬럼명1, 컬럼명2, 컬럼명3)
VALUES (데이터1, 데이터2, 데이터3);
INSERT INTO 테이블명 VALUES (데이터1, 데이터2, 데이터3);
  • 테이블명 뒤에 컬럼명을 생략하는 경우 테이블 구조에 있는 순서에 따라
    전체 컬럼명이 명시된 것으로 간주
  • 명시된 컬럼의 갯수와 데이터 갯수는 반드시 일치. 칼럼의 순서에 맞는 자료형 데이터가 와야함

ORACLE에서 NULL값 입력방법

  1. 컬럼명을 명시하지 않는다.
    INSERT INTO dept3 (deptno, dname) VALUES (50, '개발부');  
    --> 명시되지 않은 loc 컬럼에 NULL값
  1. 데이터가 들어가는 자리에 직접 NULL을 명시
    INSERT INTO dept3 (deptno, dname, loc) VALUES (60, '기획부', NULL);
  1. 데이터가 들어가는 자리에 ''를 입력
    INSERT INTO 테이블명 (컬럼명1, 컬럼명2, 컬럼명3)
    VALUES (데이터1, 데이터2, 데이터3);
    INSERT INTO 테이블명 VALUES (데이터1, 데이터2, 데이터3);
  • NULL값 체크
SELECT dname FROM dept3 WHERE loc IS NULL;

서브쿼리로 행 추가

INSERT INTO 테이블명 [(컬럼명)] 서브쿼리;
INSERT INTO dept4 SELECT * FROM dept;

다중테이블에 다중 로우(행) 입력

INSERT ALL
INTO 테이블명1 VALUES (COL1, COL2, COL3) 
INTO 테이블명2 VALUES (COL4, COL5, COL6)
INTO 테이블명3 VALUES (COL7, COL8, COL9)
SELECT COL1, COL2, COL3, COL4, COL5, COL6, COL7, COL8, COL9
FROM 테이블명;

INSERT ALL 
INTO emp_hir VALUES (empno, ename, hiredate) 
INTO emp_mgr VALUES (empno, ename, mgr) 
SELECT empno, ename, hiredate, mgr 
FROM emp WHERE deptno = 30;

조건 (WHEN)에 의해 다중테이블에 다중 로우 입력하기

WHEN 조건식 THEN 실행할 문장

INSERT ALL WHEN hiredate >= to_date('1982/01/01') 
THEN INTO emp_hir2 VALUES (empno, ename, hiredate) 
WHEN sal>=2000 THEN INTO emp_sal VALUES (empno, ename, sal) 
SELECT empno, ename, hiredate, sal FROM emp;

UPDATE

:기존 데이터에 대한 수정, 갱신, 재입력

UPDATE 테이블명 SET 컬럼명 = (변경할)데이터 , 
                                    컬럼명2 = (변경할)데이터 [WHERE 조건식]
  • UPDATE와 DELETE문을 실행하기 전 반드시 WHERE절 사용을 고려하자. 만약 WHERE절을 사용하지 않는다면 전체행에 대한 수정 또는 삭제가 실행되기 때문
    UPDATE dept3 SET loc = '서울' WHERE deptno = 10;  
    UPDATE emp3 SET sal = sal + sal/10 WHERE deptno = 30;

서브쿼리를 이용한 데이터 수정

dname, loc / 20<=40번

UPDATE dept4 SET dname = (SELECT dname FROM dept WHERE deptno=40), 
loc = (SELECT loc FROM dept WHERE deptno=40) WHERE deptno=20;

=> UPDATE dept4 SET (dname,loc) = (SELECT dname, loc 
FROM dept WHERE deptno=40 ) WHERE deptno=20;

DELETE

: (행 단위)데이터 삭제명령어

DELETE [FROM] 테이블명 -- 전체행 삭제
[WHERE 조건식]; --특정행 삭제

DELETE emp3 WHERE deptno = (SELECT deptno FROM dept WHERE dname='SALES');

MERGE

: 합병(병합). 구조가 같은 두개의 테이블을 하나의 테이블로 합치는 기능

  • 기존에 존재하는 행이 있다면 새로운 값으로 갱신(UPDATE) 되고

존재하지 않는 행이 있다면 새로운 행으로 추가(INSERT) 해라

MERGE INTO 기준테이블명 별명 
USING 참조테이블명 별명 ON (매칭조건식)
WHEN MACHED THEN 업데이트문
WHEN NOT MACHED THEN 추가문;