DML : 데이터 조작어,
테이블에 값을 삽입(INSERT)하거나 수정(UPDATE)하거나 삭제(DELETE)하는 구문
💡명령어 간단히 보기

SELECT
INSERT
UPDATE
DELETE
: 데이터 삽입 > 테이블 행 개수 증가
INSERT INTO 테이블명 (컬럼명1, 컬럼명2, 컬럼명3, ...)
VALUES (값1, 값2, 값3, ....)
INSERT INTO EMPLOYEE
VALUES(00, '강건강', '990311-1451201', 'kang_kk@kh.or.kr', '01011112222', 'D1', 'J7', 'S3', 4200000, 0.2, 200, SYSDATE, NULL, 'N');
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, EMAIL, DEPT_CODE, JOB_CODE, SAL_LEVEL, SALARY)
VALUES (901, '남나눔' , '990312-1039842' , 'nam_nn@kh.or.kr', 'D2' , 'J6', 'S3' , 43000000);
INSERT INTO CONS_NAME (
SELECT EMP_ID, EMP_NAME, EMP_NO
FROM EMPLOYEE
: 여러개의 테이블에 동시에 데이터를 INSERT하기 위해 사용하는 구문
INSERT INTO EMP_DEPT_D1 (
SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE DEPT_CODE = 'D1');
CREATE TABLE EMP_DEPT_D1
AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE 1 = 0;
-- 💡1=0;은 무조건 FALSE인 것을 이용
INSERT ALL
INTO EMP_DEPT_D1 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';
-- 💡두 테이블에 있는 부서코드가 D1인 직원을 조회하고 싶을 때
INSERT ALL
WHEN HIRE_DATE < '2000/01/01'
THEN INTO EMP_OLD VALUES (EMP_ID, EMP_NAME, HIRE_DATE, SALARY)
ELSE
INTO EMP_NEW VALUES (EMP_ID, EMP_NAME, HIRE_DATE, SALARY)
SELECT EMP_ID, EMP_NAME, HIRE_DATE, SALARY
FROM EMPLOYEE;
💡 WHEN ~ THEN~ ELSE~
: 데이터 수정 , 테이블 행 개수 변화 없음
UPDATE 테이블명
SET 컬럼명 = 바꿀 값;
[WHERE 컬럼명 비교 연산자 비교값]
UPDATE EMPLOYEE
SET HIRE_DATE = SYSDATE
WHERE EMP_NAME = '남나눔';
EMPLOYEE_COPY 테이블의 노옹철, 전형돈, 정중하, 하동운 사원의 급여와 보너스를 유재식 사원과 같게 변경
UPDATE EMPLOYEE_COPY
SET (SALARY, BONUS) = (SELECT SALARY, BONUS
FROM EMPLOYEE_COPY
WHERE EMP_NAME = '유재식')
WHERE EMP_NAME IN ('노옹철', '전형돈', '정중하', '하동운');
SELECT EMP_NAME, SALARY, BONUS
FROM EMPLOYEE_COPY
WHERE EMP_NAME IN ('노옹철', '전형돈', '정중하', '하동운', '유재식');
COMMIT;
UPDATE EMPLOYEE_COPY
SET BONUS = 0.3
WHERE EMP_ID IN (SELECT EMP_ID
FROM EMPLOYEE_COPY
LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE 'ASIA%');
SELECT EMP_ID, EMP_NAME, BONUS, LOCAL_NAME
FROM EMPLOYEE_COPY
LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE 'ASIA%';
UPDATE EMPLOYEE
SET EMP_NAME = NULL
WHERE EMP_ID = 200;
💡EMP_NAME 은 NOT NULL임
UPDATE CONS_NAME
SET TEST_DATA2 = '강건강'
WHERE TEST_DATA1 = '207';
💡TEST_DATA1과 TEST_DATA2 둘 다 UNIQUE제약조건이 있음
: 데이터 삭제 , 테이블 행 개수 감소
DELETE FROM (테이블/뷰/서브쿼리)
[WHERE 조건]
💡행을 지우는 것 이기 때문에 컬럼을 뽑을 필요X
-- EMPLOYEE 테이블에서 사원명이 강건강인 사람의 행 삭제
DELETE FROM EMPLOYEE
WHERE EMP_NAME = '강건강';
FOREIGN KEY 제약조건으로 삭제가 불가능 할 경우 사용
ALTER TABLE USER_FOREINGKEY
DISABLE CONSTRAINT SYS_C007456; -- USER_FOREINGKEY테이블 제약조건에 잇음
DELETE FROM USER_GRADE WHERE GRADE_CODE = 10;
⭐ROLLBACK 불가
DELETE FROM EMP_DEPT_D1;
SELECT * FROM EMP_dEPT_D1;
ROLLBACK;