DQL (QUERY 데이터 질의 언어) : SELECT
DML (MANIPULATION 데이터 조작 언어) : [SELECT], INSERT, UPDATE, DELETE
DDL (DEFINITON 데이터 정의 언어 ) : CREATE, ALTER, DROP
DCL (CONTROL 데이터 제어 언어 ) : GRANT, REVOKE, [COMMIT, ROLLBACK]
TCL (TRANSACTION 트랜잭션 제어 언어) : COMIT, ROLLBACK
< DML : DATA MANIPULATION LANGUAGE >
데이터 조작 언어
테이블에 값을 삽입(INSERT) 하거나, 수정(UPDATE) 하거나, 삭제(DELETE) 하는 구문
1. INSERT
테이블에 새로운 행을 추가하는 구문
[표현식]
1) INSERT INTO 테이블명 VALUES(값1, 값2, ..);
테이블에 모든 컬럼에 대한 값을 직접 제시해서 한 행 INSERT 하고자 할 때 사용
컬럼 순번을 지켜서 VALUES에 값을 나열해야됨!
부족하게 값을 제시했을 경우 => not enough values 오류!
값을 더 많이 제시했을 경우 => too many values 오류!
INSERT INTO EMPLOYEE
VALUES (900, '차은우', '900101-1234567', 'cha_00@kh.or.kr', '01011112222',
'D1', 'J7', 'S3', 4000000, 0.2, 200, SYSDATE, NULL, DEFAULT);
SELECT * FROM EMPLOYEE
WHERE EMP_NAME = '차은우';
[표현식]
2) INSERT INTO 테이블명 (컬럼명, 컬럼명, 컬럼명...) VALUES (값1, 값2, 값3 ...)
테이블에 내가 선택한 컬럼에 대한 값만 INSERT 할 때 사용
그래도 한 행 단위로 추가되기 때문에 선택이 안된 컬럼은 기본적으로는 NULL이 들어감!
=> NOT NULL 제약조건이 걸려있는 컬럼은 반드시 선택해서 직접 값 제시해야함!!
단, DEFAULT 값이 있는 경우는 NULL이 아닌 DEFAULT 값이 들어간다!!
INSERT INTO EMPLOYEE(EMP_ID, EMP_NAME, EMP_NO, JOB_CODE, SAL_LEVEL, HIRE_DATE)
VALUES (901, '주지훈', '880202-1111111', 'J1', 'S2', SYSDATE);
[표현식]
3) INSERT INTO 테이블명 (서브쿼리);
VALUES로 값 직접 명시하는거 대신에 서브쿼리 조회된 결과값을 통째로 INSERT 가능!
2. INSERT ALL
여러가지 테이블에 값을 한번에 넣어줄때 사용
[표현식]
INSERT ALL
INTO 테이블명1 VALUES(컬럼명, 컬럼명,...)
INTO 테이블명2 VALUES(컬럼명, 컬럼명,...)
서브쿼리;
INSERT ALL
INTO EMP_DEPT VALUES (EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE)
INTO EMP_MANAGER VALUES (EMP_ID, EMP_NAME, MANAGER_ID)
SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE, MANAGER_ID
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1';
* 조건을 사용해서 각 테이블에 INSERT 가능? ㅇㅇ 가능
[표현식]
INSERT ALL
WHEN 조건1 THEN
INTO 테이블명1 VALUES(컬럼명, 컬럼명)
WHEN 조건2 THEN
INTO 테이블명2 VALUES(컬럼명, 컬럼명)
서브쿼리;
INSERT ALL
WHEN HIRE_DATE < '2000/01/01' THEN
INTO EMP_OLD VALUES(EMP_ID, EMP_NAME, HIRE_DATE, SALARY)
WHEN HIRE_DATE >= '2000/01/01' THEN
INTO EMP_NEW VALUES(EMP_ID, EMP_NAME, HIRE_DATE, SALARY)
SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY
FROM EMPLOYEE;