ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Oracle - DML(Data ManipulationLanguage) UPDATE - Part 2
    데이터베이스/Oracle 2020. 11. 20. 16:14
    728x90
    반응형

    UPDATE

    UPDATE란 테이블에 기록된 컬럼의 값을 수정하는 구문으로 테이블의 전체 행 개수에는 변화가 없다.

     

    [ UPDATE 예시 ]

    CREATE TABLE DEPT_COPY -- DEPT_COPY 테이블을 생성
    AS SELECT * FROM DEPARTMENT;
    
    UPDATE DEPT_COPY SET DEPT_TITLE = ‘전략기획팀’ WHERE DEPT_ID = ‘D9’;
    -- DEPT_COPY 테이블의 데이터를 업데이트

     

    DEPT_ID가 D9인 사원을 DEPT_TITLE을 전략기획팀으로 변경

     

    이렇게 총무부에서 전략기획팀으로 업데이트 됬다.

    * WHERE 조건을 설정하지 않으면 모든 행의 컬럼 값이 변경된다.

     

    - 방명수 사원의 급여와 보너스율을 유재식 사원과 동일하게 변경

     

    EMP_SALARY 테이블을 하나 만든다.

    CREATE TABLE EMP_SALARY
    AS 
    SELECT EMP_ID, EMP_NAME, DEPT_CODE, SALARY, BONUS 
    FROM EMPLOYEE; 

     

    UPDATE를 통해 급여와 보너스율을 동일하게 변경한다.

    UPDATE EMP_SALARY
    SET SALARY = (
        SELECT SALARY
        FROM EMP_SALARY
        WHERE EMP_NAME=‘유재식’),
    BONUS = (
        SELECT BONUS
        FROM EMP_SALARY
        WHERE EMP_NAME=‘유재식’)
    WHERE EMP_NAME = ‘방명수’;
    

    * UPDATE 시에도 서브쿼리 이용이 가능하다.

     

     

     

     

    UPDATE문을 실행하고 결과값을 조회해보자.

    SELECT * 
    FROM EMP_SALARY
    WHERE EMP_NAME IN (‘유재식’, ‘방명수‘)

     

    왼쪽은 변경전

    오른쪽은 변경후

     

    - 각각의 쿼리문 작성한 것을 다중 행 다중 열 서브쿼리로 변경이 가능하다.

    UPDATE EMP_SALARY
    SET (SALARY, BONUS) = (
        SELECT SALARY, BONUS
        FROM EMP_SALARY
        WHERE EMP_NAME = ‘유재식’)
    WHERE EMP_NAME IN (‘노옹철’, ‘전형돈’, ‘정중하’, ‘하동운');

     

    결과값을 조회해보자.

    SELECT * 
    FROM EMP_SALARY
    WHERE EMP_NAME IN (‘유재식’, ‘노옹철’, ‘전형돈’, ‘정중하’, ‘하동운');

     

    - EMP_SALARY테이블에서 아시아 지역에 근무하는 직원의 보너스 포인트를 0.3으로 변경

    UPDATE EMP_SALARY
    SET BONUS = 0.3
    WHERE EMP_ID IN (SELECT EMP_ID
                     FROM EMPLOYEE
                     JOIN DEPARTMENT ON(DEPT_ID = DEPT_CODE)
                     JOIN LOCATION ON(LOCATION_ID = LOCAL_CODE)
                     WHERE LOCAL_NAME LIKE ‘ASIA%’);

    728x90
    반응형
Designed by Tistory.