[구디 아카데미]
DML
✅ INSERT
// 전체 컬럼에 값을 대입하는 방법
INSERT INTO TEMP_DEPT VALUES('D0','자바','L1');
// 특정컬럼을 골라서 값을 대입하는 방법
INSERT INTO TEMP_DEPT(DEPT_ID,LOCATION_ID) VALUES('D2','L3');
INSERT INTO TEMP_DEPT(DEPT_ID) VALUES('D3');
// 값 삽입불가능 -> LOCATION_ID는 NOT NULL제약조건이 걸려있기때문에 NULL값으로못들어감
// EMPLOYE 테이블에서 부서가 D6인 사원들을 INSERT_SUB에 저장하기
// UNIUQ 제약조건은 가져오지 않기 때문에 EMP_ID는 기본키로 가져오지 않음
INSERT INTO INSERT_SUB(
SELECT EMP_ID, EMP_NAME, DEPT_TITLE FROM EMPLOYEE
JOIN DEPARTMENT ON DEPT_CODE = DEPT_ID
WHERE DEPT_CODE = 'D6'
);
// 지정한 컬럼에 SELECT문으로 데이터 저장하기
INSERT INTO INSERT_SUB(EMP_ID, EMP_NAME)(SELECT EMP_ID, EMP_NAME FROM EMPLOYEE);
✅ INSERT ALL
INSERT ALL
INTO EMP_HIRE_DATE VALUES(EMP_ID, EMP_NAME, HIRE_DATE) -- 24개 삽입
INTO EMP_MANAGER VALUES(EMP_ID,EMP_NAME,MANAGER_ID) -- 24개 삽입
SELECT EMP_ID, EMP_NAME, HIRE_DATE, MANAGER_ID
FROM EMPLOYEE; // EMP_HIRE_DATE 테이블과 EMP_MANAGER 테이블에 각각 24개씩 값들 대입
// EMPLOYEE 테이블에서 00년 이전 입사자는 EMP_OLD에 저장, 이후 입사자는 EMP_NEW에 저장하기
INSERT ALL
WHEN HIRE_DATE < '00/01/01' THEN INTO EMP_OLD VALUES(EMP_ID, EMP_NAME, HIRE_DATE)
WHEN HIRE_DATE >= '00/01/01' THEN INTO EMP_NEW VALUES(EMP_ID, EMP_NAME, HIRE_DATE)
SELECT EMP_ID, EMP_NAME, HIRE_DATE FROM EMPLOYEE;
✅ UPDATE
CREATE TABLE EMP_SALARY // 값을 수정하기 위해서 기존에 있던 테이블을 복사해서 새로운 테이블을 만듬
AS SELECT EMP_ID, EMP_NAME, DEPT_CODE, JOB_CODE, SALARY, BONUS
FROM EMPLOYEE;
UPDATE EMP_SALARY SET SALARY = 2500000, BONUS = 0.5
WHERE EMP_NAME = '전형돈'; // 이름이 전형돈인 사원의 월급을 2500000, 보너스를 0.5로 수정하라는 명령어
//=[[ 유씨성을 가진 사원의 급여를 50만원 올리고 보너스는 0.4 수정하기
UPDATE EMP_SALARY SET SALARY = SALARY + 500000, BONUS = 0.4
WHERE EMP_NAME LIKE '유%';
// UPDATE문에서 SELECT문 활용하기
// 박명수의 부서, 보너스를 심봉선과 동일하게 수정
// 밑에 두개의 결과는 동일하다
UPDATE EMP_SALARY
SET DEPT_CODE = (SELECT DEPT_CODE FROM EMPLOYEE WHERE EMP_NAME = '심봉선'),
BONUS = (SELECT BONUS FROM EMPLOYEE WHERE EMP_NAME = '심봉선')
WHERE EMP_NAME = '방명수';
UPDATE EMP_SALARY
SET (DEPT_CODE, BONUS) = (SELECT DEPT_CODE, BONUS FROM EMPLOYEE WHERE EMP_NAME = '심봉선')
WHERE EMP_NAME = '방명수';
✅ DELETE
// D9인 부서원들 삭제하기
DELETE FROM EMP_SALARY WHERE DEPT_CODE = 'D9';
// TRUNCATE 삭제 -> ROLLBACK 이 안됨 (속도는 DELETE보다 빠른편임)
// 사용하지 않는 것이 좋음
// 전체 행 삭제시 사용됨
TRUNCATE TABLE EMP_SALARY;