Programming/SQL

[Oracle] DML(2) - UPDATE / UPDATE에 서브쿼리 쓰기

Jayna. 2024. 3. 8. 17:53
728x90

 

 

[Oracle] DML(1) - INSERT / INSERT INTO SELECT / INSERT ALL

DML : DATA MANIPULATION LANGUAGE 데이터 조작 언어 테이블에 새로운 데이터를 삽입(INSERT) 하거나, 기존의 데이터를 수정(UPDATE) 하거나, 삭제(DELETE) 하는 구문 INSERT 테이블에 행을 추가하는 구문 1. INSERT IN

jaynarecord.tistory.com

 

UPDATE

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

UPDATE 테이블명
   SET 컬럼명 = 바꿀 값
     , 컬럼명 = 바꿀 값
     ...
     , 컬럼명 = 바꿀 값    -- 여러 개의 컬럼 동시 변경 가능(",")
 WHERE 조건;  -- WHERE 절은 생략 가능. 생략시 전체 모든 행의 데이터가 모두 변경됨
-- D9 부서명을 (총무팀 -> 기획팀)으로 수정
UPDATE DEPT_COPY
   SET DEPE_TITLE = '기획팀'
-- > 조건식을 생략하여 전체 모든 행의 데이터가 모두 변경됨.

ROLLBACK;

UPDATE DEPT_COPY
   SET DEPT_TITLE = '기획팀'
 WHERE DEPT_ID = 'D9';
728x90

 

UPDATE에 서브쿼리 사용

UPDATE 테이블명
   SET 컬럼명 = (서브쿼리)
 WHERE 조건; -- 생략가능
-- EMP_SALARY 테이블에 홍길동(D1) 사원의 부서코드를 김길동(D9)사원의 부서코드로 변경
UPDATE EMP_SALARY
   SET DEPT_CODE = (SELECT DEPT_CODE 
                      FROM EMPLOYEE
                     WHERE EMP_NAME = '김길동')
 WHERE EMP_NAME = '홍길동';
 
 
 -- 박길동 사원의 급여와 보너스를 이길동 사원의 급여와 보너스 값으로 변경
 UPDATE EMP_SALARY
   SET (SALARY, BONUS) = (SELECT SALARY, BONUS
                            FROM EMP_SALARY
                           WHERE EMP_NAME = '이길동')
 WHERE EMP_NAME = '박길동';

 

UPDATE 사용하여 수정시 UPDATE 제약조건에 위배되면 안 된다.

UPDATE EMPLOYEE
   SET EMP_ID = 200
 WHERE EMP_NAME = '송길동';  -- PRIMARY KEY 제약조건에 위배
 -- 오류 ORA-00001: unique constraint (JN.EMPLOYEE_PK) violated
 
 UPDATE EMPLOYEE
   SET EMP_NAME = NULL
 WHERE EMP_NAME = '송길동';  -- NOT NULL 제약조건에 위배
 -- 오류 ORA-01407: cannot update("JN"."EMPLOYEE"."EMP_NAME") to NULL

 

728x90