-- 『부서번호』 가
-- (부서번호 / 부서테이블 / 부서이름이 IT인 곳에서) 와 같다는 조건만들기
-- ↓
UPDATE EMPLOYEES
SET SALARY = SALARY * 1.1
WHERE DEPARTMENT_ID = ( SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'IT' );
--==>> 5개 행 이(가) 업데이트되었습니다.
-- ○ EMPLOYEES 테이블에서 JOB_TITLE 이 『Sales Manager』 인 사원들의
-- SALARY 를 해당 직무(직종)의 최고급여(MAX_SALARY)로 수정한다.
-- 단, 입사일이 2006년 이전(해당년도제외) 입사자에 한해 적용.
-- (또한, 변경에 대한 결과 확인 후 ROLLBACK 수행)
-- 변경 전 Sales Manager의 입사일, 급여
SELECT *
FROM JOBS;
SELECT HIRE_DATE, SALARY
FROM EMPLOYEES
WHERE JOB_ID = (SELECT JOB_ID
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager' );
/*
2004-10-01 14000
2005-01-05 13500
2005-03-10 12000
2007-10-15 11000
2008-01-29 10500
*/
-- Sales Manager의 입사일, 급여 조장
-- 조건 1 : 직종이 Sales Manager
-- 조건 2 : 해당 부서에서 2006년 이전 입사자만
-- 변경해야할 급여 : 해당부서 전체직원 중 가장 높은 급여로 변경
UPDATE EMPLOYEES
SET SALARY = (SELECT MAX_SALARY
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager' )
WHERE JOB_ID = (SELECT JOB_ID
FROM JOBS
WHERE JOB_TITLE = 'Sales Manager' )
AND EXTRACT (YEAR FROM HIRE_DATE) < 2006;
--==>> 3개 행 이(가) 업데이트되었습니다.
-- ○ EMPLOYEES 테이블에서 SALARY를
-- 각 부서의 이름별로 다른 인상률을 적용하여 수정할 수 있도록 한다.
-- Finance → 10% 인상
-- Executive → 15% 인상
-- Accounting → 20% 인상
-- 변경에 대한 결과 확인 후 ROLLBACK
SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME IN ('Accounting', 'Finance', 'Executive');
UPDATE EMPLOYEES
SET SALARY = CASE DEPARTMENT_ID WHEN (SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'Finance')
THEN (SALARY / 1.1)
WHEN (SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'Executive')
THEN (SALARY / 1.15)
WHEN (SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME = 'Accounting')
THEN (SALARY / 1.2)
ELSE SALARY
END
WHERE DEPARTMENT_ID IN (SELECT DEPARTMENT_ID
FROM DEPARTMENTS
WHERE DEPARTMENT_NAME IN ('Accounting', 'Finance', 'Executive'));
----> 끝
---- 해당 쿼리문은 where 절 없이도 작동은하나, where 절 없이는
---- 속도가 늦는 현상이 발생한다
--==>> WHERE 절 없는 경우 : 11개 행 이(가) 업데이트되었습니다.
-- ↕
--==>> WHERE 절 없는 경우 : 107개 행 이(가) 업데이트되었습니다.
728x90
'ORACLE' 카테고리의 다른 글
VIEW 만들기 / VIEW 개요 및 VIEW 만들어서 조회하기 / VIEW 조회, VIEW 설명조회, VIEW 소스조회 (0) | 2022.07.30 |
---|---|
DELETE 구문 / 테이블에서 지정된 행(레코드)을 삭제하기 (0) | 2022.07.30 |
UPDATE 구문 실습 / 테이블에서 기존 데이터를 수정(변경)하기 (0) | 2022.07.30 |
OracleStudy / 20220304_01_hr.sql / 제약조건 - UNIQUE(UK 지정), CHECK(CK:C), FOREIGN KEY(FK:F:R), NOT NULL, DEFAULT 표현식 (0) | 2022.07.09 |
OracleStudy / 20220303_01_hr.sql / 정규화에 대해 (0) | 2022.07.09 |
댓글