UPDATE
테이블에 기록되어있는 기존의 데이터를 수정하는 구문
[표현식]
UPDATE 테이블명
SET 컬럼명 = 바꿀값,
컬럼명 = 바꿀값,
... --> 여러개의 컬럼값 동시변경 가능(,로 나열해야됨!! AND 아님!!)
[WHERE 조건]; --> 생략하면 전체 행의 모든 행의 데이터가 변경된다..!! 그래서 조건을 꼭 쓰자
SELECT * FROM DEPT_COPY;
-- D9 부서의 부서명을 '전략기획팀'으로 수정
UPDATE DEPT_COPY
SET DEPT_TITLE = '전략기획팀'; -- 총무부
-- 이러면 행이 다 바뀜;;
ROLLBACK; -- 빠르게 롤백
UPDATE DEPT_COPY
SET DEPT_TITLE = '전략기획팀' -- 총무부
WHERE DEPT_ID = 'D9';
-- 선동일 사원의 급여를 700만원으로 변경하고, 보너스도 0.2로 변경
UPDATE EMP_SALARY
SET SALARY = 7000000,
BONUS = 0.2
WHERE EMP_NAME = '선동일';
-- 전체사원의 급여를 기존의 급여의 10프로 인상한 금액 (기존급여 * 1.1)
UPDATE EMP_SALARY
SET SALARY = SALARY * 1.1;
* UPDATE시 서브쿼리를 사용 가능
UPDATE 테이블명
SET 컬럼명 = 서브쿼리
WHERE 조건;
-- 방명수 사원의 급여와 보너스 값을 유재식 사원의 급여와 보너스 값으로 변경
-- 단일행 서브쿼리
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 EMP_SALARY
SET (SALARY, BONUS) = (SELECT SALARY, BONUS FROM EMP_SALARY WHERE EMP_NAME = '유재식')
WHERE EMP_NAME = '방명수';
-- ASIA 지역에서 근무하는 사원들의 보너스 값을 0.3 으로 변경
SELECT * FROM EMP_SALARY; -- DEPT_CODE
SELECT * FROM DEPARTMENT; -- DEPT_ID LOCATION_ID
SELECT * FROM LOCATION; -- LOCAL_CODE
-- 먼저 ASIA 지역에서 근무하는 사원들 조회 (서브쿼리로 사용할 것임)
SELECT EMP_ID
FROM EMP_SALARY
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
JOIN LOCATION ON (LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE 'ASIA%';
UPDATE EMP_SALARY
SET BONUS = 0.3
WHERE EMP_ID IN (SELECT EMP_ID
FROM EMP_SALARY
JOIN DEPARTMENT ON (DEPT_CODE = DEPT_ID)
JOIN LOCATION ON (LOCATION_ID = LOCAL_CODE)
WHERE LOCAL_NAME LIKE 'ASIA%');
* UPDATE 시에도 해당 컬럼에 대한 제약조건 위배되면 안됨!
-- 사번이 200번인 사원의 이름을 NULL로 변경 (이름에 not null 제약조건이 붙어있음)
UPDATE EMPLOYEE
SET EMP_NAME = NULL
WHERE EMP_ID = 200;
-- QRA-01407: ORA-01407: cannot update ("KH"."EMPLOYEE"."EMP_NAME") to NULL
-- NOT NULL 제약조건 위배!!
-- 노옹철 사원의 직급코드 J9로 변경 (부모 테이블에 j9라는 데이터는 없음)
UPDATE EMPLOYEE
SET JOB_CODE = 'J9'
WHERE EMP_NAME = '노옹철';
--ORA-02291: integrity constraint (KH.SYS_C007216) violated - parent key not found
-- FOREIGN KEY 제약조건 위배!!!!