데이타 조작어라고 불리며,
테이블의 행에 대한 삽입,변경,삭제 기능을 제공하는 SQL 명령을 말한다.
DML 명령 실행 후 COMMIT(DML 명령 적용) 또는 ROLLBACK(DML 명령 취소) 명령을 실행하는 것을 권장한다.
테이블에 행을 삽입하여 저장하는 명령이다.
테이블에 삽입될 행의 컬럼값은 테이블 속성에 맞게 차례대로 나열하여 저장되도록 작성한다.
테이블에 선언된 컬럼 순서대로 자료형에 맞는 값을 생략없이 전달하여 저장한다.
형식)
INSERT INTO 테이블명 VALUES(컬럼값,컬럼값,...)
--SQL 오류: ORA-00947: not enough values
INSERT INTO DEPT VALUES(60,'총무부');
--SQL 오류: ORA-00913: too many values
INSERT INTO DEPT VALUES(60,'총무부','인천','02-1234-5678');
--오류 보고 - ORA-01722: invalid number
INSERT INTO DEPT VALUES('육십','총무부','인천');
--오류 보고 - ORA-12899: value too large for column "SCOTT"."DEPT"."LOC" (actual: 19, maximum: 13)
INSERT INTO DEPT VALUES(60,'총무부','인천시 월미구');
NOT NULL 제약조건
컬럼에 NULL이 저장되지 않도록 설정하는 제약조건
--오류 보고 - ORA-01400: cannot insert NULL into ("SCOTT"."DEPT"."DEPTNO")
INSERT INTO DEPT VALUES(NULL,'총무부','인천');
--명시적 NULL 저장
INSERT INTO DEPT VALUES(70,'영업부',NULL);
형식)
INSERT INTO 테이블명(컬럼명,컬럼명,...) VALUES(컬럼값,컬럼값,...)
--INSERT 명령의 테이블에 나열된 컬럼 순서대로 컬럼값을 전달하여 행 삽입
INSERT INTO DEPT(LOC,DEPTNO,DNAME) VALUES('수원',80,'자재부');
생략된 컬럼에는 컬럼 기본값(DEFAULT VALUE)이 자동 저장된다.
테이블 생성 또는 테이블 구조 변경시 컬럼 기본값을 설정하지 않은 경우,
컬럼 기본값은 자동으로 NULL로 설정된다.
--LOC 컬럼 생략 : NULL 저장 - 묵시적 NULL 저장
INSERT INTO DEPT(DEPTNO,DNAME) VALUES(90,'인사부');
테이블의 행을 검색하여 검색결과를 다른 테이블의 행으로 삽입한다(테이블 행 복사).
행이 삽입될 테이블의 속성과 서브쿼리의 검색대상에 대한 구조(갯수,자료형,크기)가 동일하다(컬럼명 제외).
형식)
INSERT INTO 테이블명 SELECT 검색대상,... FROM 테이블명 [WHERE 조건식]
테이블에 저장된 행의 컬럼값을 변경하는 명령이다.
형식)
UPDATE 테이블명 SET 컬럼명=변경값,컬럼명=변경값,... WHERE 조건식
--EMP 테이블에서 사원번호가 9000인 사원의 부서번호를 35로 변경
--FK 제약조건을 위반하여 에러 발생
UPDATE EMP SET DEPTNO=35 WHERE EMPNO=9000;
변경값 또는 조건식의 비교값 대신 서브쿼리 사용
--DEPT 테이블에서 부서명이 영업부인 부서위치(NULL)를 총무부의 부서위치(인천)와 같도록 변경
UPDATE DEPT SET LOC=(SELECT LOC FROM DEPT
WHERE DNAME='총무부') WHERE DNAME='영업부';
테이블에 저장된 행을 삭제하는 명령이다.
형식)
DELETE FROM 테이블명 WHERE 조건식
DELETE FROM DEPT WHERE DEPTNO=10;
--조건식의 비교값 대신 서브쿼리 사용
--DEPT 테이블에서 부서이름이 영업부인 부서와 같은 부서위치의 부서정보 삭제 - 영업부 포함
DELETE FROM DEPT
WHERE LOC=(SELECT LOC FROM DEPT WHERE DNAME='영업부');
기존 행의 컬럼값과 같은 값이 저장되지 않도록 설정하는 제약조건
--오류 보고 - ORA-00001: unique constraint (SCOTT.PK_DEPT) violated
SELECT * FROM DEPT WHERE DEPTNO=50;
INSERT INTO DEPT VALUES(50,'총무부','인천');
부모 테이블에 저장된 컬럼값만 자식 테이블의 컬럼에 저장되도록 설정하는 제약조건
--DEPT 테이블(부모 테이블)에 35인 부서번호가 저장되어 있지 않아 EMP 테이블(자식 테이블)에 행 삽입시 에러 발생
--오류 보고 - ORA-00001: unique constraint (SCOTT.PK_EMP) violated
INSERT INTO EMP VALUES(9000,'KIM','MANAGER',7298,'00/12/10',3500,1000,35);
INSERT INTO EMP VALUES(9000,'KIM','MANAGER',7298,'00/12/10',3500,1000,40);
컬럼과 자료형 확인을 하기 위해 사용하는 명령이다.
형식)
DESC 테이블명