오라클 DML (INSERT, UPDATE, DELETE)

최주영·2023년 4월 8일
0

오라클

목록 보기
15/22

[구디 아카데미]
DML

  • 데이터 조작 언어로 테이블에
    삽입(INSERT), 수정(UPDATE), 삭제(DELETE)하는 구문
  • DML 들은 트랜잭션 과정으로 동작

✅ INSERT

  • 테이블에 데이터(ROW)추가하는 명령어
  • 값을 추가하는 방식에는 2가지 있음
    (1) : 전체컬럼에 값을 대입
    -- INSERT INTO 테이블명 VALUES(컬럼에 대입할 값, 컬럼에 대입할 값, 컬럼에 대입할 값....)
    -- 테이블에 선언된 컬럼수와 동일해야한다
    (2) : 특정컬럼을 골라서 값을 대입
    -- INSERT INTO 테이블명(특정컬럼, 특정컬럼...) VALUES(특정컬럼에 대입할값, 특정컬럼에 대입할 값......)
    -- 지정된 컬럼의 수와 VALUES에 있는 수와 같아야함
    -- 지정되지 않은 컬럼의 값을 NULL로 대입됨. 나머지 컬럼에 NOT NULL 제약 조건이 있으면 안된다.
// 전체 컬럼에 값을 대입하는 방법
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

  • SELECT문을 이용해서 두개 이상의 테이블에 값을 넣을 때 사용
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

  • 테이블에 기록된 컬럼 값을 수정하는 구문으로 테이블 전체 행 개수는 변화 없음
    💡 반드시 WHERE을 작성해서 타겟을 정확하게 설정! -> 설정하지 않을시 전체 변경
    -> 잘못 수정했을 시 ROLLBACK 명령어를 통해서 취소 가능!
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

  • 테이블의 행을 삭제하는 구문으로 테이블의 행 개수가 줄어듬
  • DELETE FROM 테이블명 [WHERE 조건식]
    💡 반드시 WHERE을 작성해서 타겟을 정확하게 설정! -> 설정하지 않을시 전체 삭제
    -> 잘못 삭제했을 시 ROLLBACK 명령어를 통해서 취소 가능!
// D9인 부서원들 삭제하기
DELETE FROM EMP_SALARY WHERE DEPT_CODE = 'D9';

// TRUNCATE 삭제 -> ROLLBACK 이 안됨 (속도는 DELETE보다 빠른편임) 
// 사용하지 않는 것이 좋음
// 전체 행 삭제시 사용됨
TRUNCATE TABLE EMP_SALARY; 
profile
우측 상단 햇님모양 클릭하셔서 무조건 야간모드로 봐주세요!!

0개의 댓글