전체 방문자
오늘
어제
21종
종이의 코딩 공부방
21종
  • 분류 전체보기 (171)
    • JAVA (64)
    • Springboot (46)
      • 블로그만들기 (45)
    • Database (60)
      • Oracle (60)
    • 프로젝트 3 (CELOVER) (0)
    • 개발서버 구축 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

인기 글

최근 글

최근 댓글

hELLO · Designed By 정상우.
21종

종이의 코딩 공부방

Database/Oracle

[Oracle] DML(2) - UPDATE

2023. 7. 31. 22:41

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

 

 

EMP_SALARY
DEPARTMENT
LOCATION

-- 먼저 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 제약조건 위배!!!!
    'Database/Oracle' 카테고리의 다른 글
    • [Oracle] DDL(2) - ALTER, DROP
    • [Oracle] DML(3) - DELETE, TRUNCATE
    • [Oracle] 테이블 복사하기
    • [Oracle] DML(1) - INSERT
    21종
    21종
    코딩 공부한 것 정리하려고 만든 블로그

    티스토리툴바