DML(Data Manipulation Language)
데이터 조작 언어로 테이블에 값을 **삽입(INSERT), 수정(UPDATE), 삭제(DELETE)**하는 구문을 말한다.
INSERT
테이블에 새로운 행을 추가하여 테이블의 행 개수를 증가시키는 구문
** INSERT하고자 하는 컬럼이 모든 컬럼인 경우는 컬럼명 생략이 가능하다. 단, 컬럼의 순서를 지켜서 VALUES 값을 기입해야 한다.
** INSERT 시 VALUES 대신 서브쿼리의 결과를 바로 INSERT 구문 안에 사용할 수 있다. 대신, 테이블의 컬럼 갯수와 데이터 타입이 서브쿼리로 정한 SELECT절의 결과와 동일해야 한다.
◾ INSERT ALL
서브쿼리가 사용하는 테이블이 같은 경우, 두 개 이상의 테이블에 INSERT ALL을 이용해서 한 번에 삽입이 가능하다.
단, 각 서브쿼리의 조건절이 같아야 한다.
📌테이블 구조만 복사하는 쿼리
-- EMPLOYEE 테이블의 구조를 복사하여 사번, 이름, 입사일, 급여를 기록할 수 있는 테이블 EMP_OLD와 EMP_NEW를 생성해보자.
CREATE TABLE EMP_OLD
AS SELECT EMP_ID,
EMP_NAME,
HIRE_DATE,
SALARY
FROM EMPLOYEE
WHERE 1 = 0; -- -> WHERE 절의 값이 FALSE여서 데이터는 들어가지 않고, 테이블의 구조만 복사가 된다.
CREATE TABLE EMP_NEW
AS SELECT EMP_ID,
EMP_NAME,
HIRE_DATE,
SALARY
FROM EMPLOYEE
WHERE 1 = 0;
UPDATE
테이블에 기록된 컬럼의 값을 수정하는 구문으로 테이블의 전체 행 개수에는 변화가 없다.
UPDATE ~ SET
** WHERE 조건을 설정하지 않으면 모든 행의 컬럼 값이 변경된다.
** UPDATE 시에도 서브 쿼리 이용이 가능하다.
** 서브 쿼리에도 다중 행 다중 열 형태로 사용 가능하다.
MERGE
구조가 같은 두 개의 테이블을 하나의 테이블로 합치는 기능을 제공한다.
두 테이블에서 지정하는 조건의 값이 존재하면 UPDATE 되고 조건의 값이 없으면 INSERT 한다.
** 잘 사용하지는 않는다.
DELETE
테이블의 행을 삭제하는 구문으로 테이블의 행 개수가 줄어준다.
** WHERE 절에 조건을 설정하지 않으면 모든 행을 삭제한다.
** FOREIGN KEY 제약조건이 설정되어 있는 경우는 참조되고 있는 값에 대해서는 삭제가 불가능하다.
삭제시 FOREIGN KEY 제약조건으로 컬럼 삭제가 불가능한 경우는 제약조건을 비활성화 할 수 있다. (→ 잘 사용하지 않는다. 함부로 사용하지 말 것)
TRUNCATE
테이블 전체 행 삭제 시 사용하며 DELETE 보다 수행 속도가 빠르다.
ROLLBACK을 통해 컬럼의 복구가 불가능하다.
DELETE와 마찬가지로 FOREIGN KEY 제약조건 일 때는 적용이 불가능하기 때문에 제약 조건을 비활성화 해야 삭제할 수 있다.
** 모든 컬럼이 삭제되긴 하지만 테이블의 구조를 남아있다.
** DELETE는 행을 하나씩 삭제하고 TRUNCATE는 통째로 삭제하는 것이기 때문에 수행 속도가 빠르다.
'Programming > SQL(Oracle)' 카테고리의 다른 글
DAY 64. [DataBase] 객체 SEQUENCE (0) | 2021.10.21 |
---|---|
DAY 64. [DataBase] 객체 VIEW (0) | 2021.10.20 |
DAY 55. [DataBase] 오라클 DDL(ALTER, DROP) (0) | 2021.10.11 |
DAY 53. [DataBase] 오라클 DDL(CREATE), 제약조건 (0) | 2021.10.09 |
DAY 52. [DataBase] 오라클 서브쿼리 SUBQUERY (0) | 2021.10.08 |