Oracle
DML(INSERT, UPDATE,DELETE)
기정님
2025. 5. 15. 16:22
▶ DML(Data Manipulation Language)
▶ INSERT
▶ INSERT ALL
▶ UPDATE
▶ DELETE
▶ TRUNCATE
-- DML : 데이터 조작 언어 (INSERT, UPDATE, DELETE)
-- 데이터를 삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문
-- INSERT
INSERT INTO EMPLOYEE VALUES(900, '강건강', '990909-1547824', 'jang_ch@kh.or.kr', '01055569512', 'D1', 'J8',
'S3', 4300000, 0.2, '200', SYSDATE, NULL, DEFAULT);
SELECT * FROM EMPLOYEE WHERE EMP_NAME = '강건강';
-- INSERT INTO 테이블명 VALUES
-- INSERT INTO 테이블명 (컬럼명1, 컬럼명2, 컬럼명3, ...) VALUES
-- 1반은 테이블의 컬럼 순서를 다 외우고 있어야 함
INSERT INTO EMPLOYEE (EMP_ID, EMP_NAME, EMP_NO, EMAIL, PHONE, DEPT_CODE,
JOB_CODE, SAL_LEVEL, SALARY, BONUS, MANAGER_ID,
HIRE_DATE, ENT_DATE, ENT_YN)
VALUES(901, '장채현', '901123-1080503', 'jang_ch@kh.or.kr', '01055569512', 'D1', 'J8',
'S3', 4300000, 0.2, '200', SYSDATE, NULL, DEFAULT);
CREATE TABLE EMPLOYEE_COPY AS SELECT * FROM EMPLOYEE;
CREATE TABLE EMPLOYEE_COPY2 AS SELECT EMP_ID, EMP_NAME, SALARY, DEPT_TITLE, JOB_NAME
FROM EMPLOYEE
LEFT JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
JOIN JOB USING(JOB_CODE);
-- INSERT ALL
CREATE TABLE EMP_DEPT_D1
AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, HIRE_DATE
FROM EMPLOYEE
WHERE 1=0; --언제나 거짓이다 데이터는 가져오지않는다
CREATE TABLE EMP_MANAGER
AS SELECT EMP_ID, EMP_NAME, MANAGER_ID
FROM EMPLOYEE
WHERE 1 = 0;
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';
/* - EMPLOYEE테이블의 입사일 기준으로 2000년 1월 1일 이전에 입사한 사원의 사번,
이름, 입사일, 급여를 조회해서 EMP_OLD테이블에 삽입하고
그 후에 입사한 사원의 정보는 EMP_NEW테이블에 삽입 */
CREATE TABLE EMP_OLD
AS SELECT EMP_ID, EMP_NAME, HIRE_DATE,SALARY
FROM EMPLOYEE
WHERE 1 = 0;
CREATE TABLE EMP_NEW
AS SELECT EMP_ID, EMP_NAME, HIRE_DATE,SALARY
FROM EMPLOYEE
WHERE 1 = 0;
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;
commit;
-- UPDATE
-- UPDATE 테이블명 SET 컬럼명= 바꿀값 [WHERE 조건];
CREATE TABLE DEPT_COPY
AS SELECT * FROM DEPARTMENT;
UPDATE DEPT_COPY
SET DEPT_TITLE = '전략기획팀'
WHERE DEPT_ID = 'D9';
SELECT * FROM EMPLOYEE_COPY WHERE EMP_NAME IN('유재식','방명수');
--▶ DELETE
DELETE FROM EMPLOYEE
WHERE EMP_NAME = '장채현';
ROLLBACK;
-- CASCADE -- 제약조선 비활성화
SELECT * FROM EMP_DEPT_D1;
DELETE FROM EMP_DEPT_D1;
TRUNCATE TABLE EMP_DEPT_D1; -- 완전 잘라내기 롤백 불가