고래씌

[Oracle] 7-2. DML(INSERT, UPDATE, DELETE) - UPDATE 본문

Database/Oracle

[Oracle] 7-2. DML(INSERT, UPDATE, DELETE) - UPDATE

고래씌 2023. 11. 29. 14:32

1. UPDATE

: 테이블에 기록된 기존의 데이터를 수정하는 구문

 

[표현법]

    UPDATE 테이블명
    SET 컬럼명 = 바꿀값,
        컬럼명 = 바꿀값,
        컬럼명 = 바꿀값, 
        ...
    WHERE 조건; 

 

☞ 여러개의 컬럼값을 동시에 변경 가능, 이때 바꿀칼럼을 ,로 나열해야함

☞ WHERE 절은 생략 가능. 생략시에는 테이블의 모든 행의 데이터가 변경되어버림

 

 

 

▶ 예제1) D9부서의 부서명을 전략기획팀으로 수정

 

① 복사본 테이블을 만든 후 작업

 

 

② DEPT_COPY 테이블에서 D9부서의 부서명을 전략기획팀으로 수정(조건 추가 X)

 

=> 이때 주의할 것 !!!!!!!!!!!!!!!!!! 조건을 추가하지 않는 경우 모든 행의 값이 전략기획팀으로 수정되는 문제가 발생한다!!!!

 

 

 

 

③ 변경사항에 대해서 되돌리는 명령어

이러한 사항에 대비하기 위해서 변경사항에 대해 되돌리는 명령어가 있다.

ROLLBACK;

 

=> 이 명령어를 쓰면 UPDATE를 사용하기 전으로 돌아간다.

 

 

 

DEPT_COPY 테이블에서 D9부서의 부서명을 전략기획팀으로 수정(조건 추가 O)

 

=> WHERE절의 조건에 따라 1개 ~ N개의 행이 변경이 될 수 있다.

 

 

 

▶ 예제 2) 전체 사원의 급여를 20%인상, 전 사원의 보너스를 10%인상하도록 변경

 

① 복사본 테이블

 

 

② 급여 20% 인상, 보너스 10% 인상

 

 


2. UPDATE시 서브쿼리 사용

: 서브쿼리를 수행한 결과값으로 기존에 있던 값을 변경하겠다

 

    - CREATE 시에 서브쿼리 : 서브쿼리를 수행한 결과를 테이블 만들때 넣어버리겠다.
    - INSERT 시에 서브쿼리 : 서브쿼리를 수행한 결과를 해당 테이블에 삽입하겠다.
    
    [표현법]

    UPDATE 테이블명
    SET 컬럼명 = (서브쿼리)
    WHERE 조건;



▶ EMP_SALARY 테이블에 박말똥 사원의 부서코드를 선동일 사원의 부서코드로 변경하기

 

① 선동일 사원의 부서코드 추출

 

 

 

② 박말똥 부서코드를 D9으로 변경

 

=> 'D9'으로 변경됨

 

 

▶ 방명수 사원의 급여와 보너스를 유재식 사원의 급여와 보너스값으로 변경하시오.

 

 

주의사항 : UPDATE 할때도 변경할 값에 대해서 제약조건에 위배되면 안됨

 

=> 오류 발생. 이미 키값이 200이 있기 떄문에 제약조건을 위배한다.

 

 

▶ 모든 변경사항을 확정하는 명령어

COMMIT;

 

=> 모두 저장됨