본문 바로가기

Study/OracleDB

29강 오라클 SQL insert, update, delete DML(2)

728x90

-- 1. 테이블의 내용을 수정하기 위한 UPDATE 문
-- 2. 테이블에 불필요한 행을 삭제하기 위한 DELETE문

-- 03. 테이블의 내용을 수정하기 위한 UPDATE문
-- UPDATA 문은 기존의 행을 수정한다. 어떤 행을 수정하는지 WHERE 절을 이용하여 조건을 지정한다.
-- 주의! WHERE 절을 지정하지 않으면 모든 행이 수정된다. 조심하자
-- <실습하기> 테이블의 모든 행 변경
-- 0. emp01 테이블 만들기.
create table emp01
as ( select * from emp);
-- emp 테이블과 동일한 테이블을 생성한다.

-- 1. 모든 사원의 부서번호를 30번으로 수정합시다.
update emp01 set empno ='30';

-- 2. 이번엔 모든 사원의 급여를 10% 인상시키는 UPDATA문을 작성하시오.
update emp01 set sal = sal * 1.1;

-- 3. 모든 사원의 입사일을 오늘로 수정하시오.
update emp01 set hiredate = sysdate;
               -- 입사일을 현재 날짜로 수정.

-- UPDATE 문에 WHERE을 추가하면 테이블의 특정 행이 변경됩니다.
drop table emp01;

-- <실습하기> 테이블의 특정 행만 변경
-- 1. 부서번호가 10번인 사원의 부서번호를 30번으로 수정합시다.
update emp01 set deptno=30 where deptno=10;

-- 2. 급여가 3000 이상인 사원만 급여를 10% 인상합니다.
update emp01 set sal = sal*1.1 where sal >= 3000;

-- 3. 1981년에 입사한 사원의 입사일을 오늘로 수정해보시오.
update emp01 set hiredate=sysdate where substr(hiredate, 1, 2)='81';
                                        -- substr("문자열", "시작위치", "길이")
-- substr 함수는 문자단위로 시작위치와 자를 길이를 지정하여 문자열를 자릅니다.

-- <탄탄히 다지기>
-- 5. SAM01 저장된 사원 중 급여가 2000 이상인 사원들의 급여만 500원씩 삭감하시오.
-- 1. SAM01 테이블 만들기
create table sam01
as (select * from emp);

-- 2. 테이블 수정하기
update sam01 set sal = sal - 500 where sal >= 2000;

-- 3.2 테이블에서 2개 이상의 칼럼 값 변경
-- 테이블에서 하나의 칼럼이 아닌 복수 개 칼럼의 값을 변경하려면 기존
-- set 절에 콤마를 추가하고 칼럼=값을 추가 기술하면 됩니다.

-- <실습하기> 테이블에서 2개 이상의 칼럼 값 변경
-- 1. SCOTT 사원의 부서번호는 20번으로, 직급은 MANAGER로 한꺼번에 수정하도록 합시다.
update emp01 set deptno=20, job='MANAGER' where ename = 'SCOTT';

-- 2. SCOTT 사원의 입사일자는 오늘로, 급여를 50으로 커미션을 4000으로 수정합니다.
update emp01 set hiredate = sysdate, comm = 4000 where ename='SCOTT';

-- 3.3 서브 쿼리를 이용하나 데이터 수정하기
-- set절에서 서브쿼리를 기술하면 서브 쿼리를 수행한 결과로 내용이 변경된다.
-- 다른 테이블에 저장된 데이터로 해당 컬럼 값을 변경할 수 있습니다.

-- 1. 20번 부서의 지역명을 40번 부서의 지역명으로 변경하기 위해서 서브 쿼리문을 작성하시오.
update dept01 
set loc = (select loc from dept01 where deptno = 40)
where deptno = 20;

-- <탄탄히 다지기> 
-- 6. 서브 쿼리문을 사용하여 EMP 테이블의 저장된 데이터의 특정 컬럼만으로 구성된 SAM02 테이블을 생성하시오.
create table sam02
as (select * from emp);

-- 7. 생성 후 DALLAS에 위치한 부서 소속 사원들의 급여를 1000인상하시오.
update sam02 set sal=sal+1000
where deptno = (select deptno from dept where loc = 'DALLAS');

-- 3.4 서브 쿼리를 이용한 두개 이상의 칼럼에 대한 값 변경
-- <실습하기> 서브 쿼리를 이용한 한꺼번에 두 개의 컬럼 값 변경하기.
-- 1. 부서 번호가 20번인 부서의 이름과 지역은 RESEARCH와 DALLAS입니다. 다음
-- 은 부서번호가 20인 부서의 부서명과 지역명을 부서 번호가 40번인 부서와 동일하게
-- 변경하기 위한 UPDATE 명령문 입니다.
update dept01 
set (dname, loc) = (select dname, loc from dept where deptno=40)
where deptno=20;

-- <탄탄히 다지기>
-- 8. 서브 쿼리문을 사용하여 SAM02 테이블의 모든 사원의 급여와 입사일을 이름이
-- KING인 사원의 급여와 입사일로 변경하시오.


-- 04. 테이블에 불필요한 행을 삭제하기 위한 DELETE 문
-- delete 문으로 dept01 부서 테이블의 모든 행을 삭제해보시오.
delete from dept01;

-- 부서 테이블에서 30번 부서만 삭제합니다.
delete from dept01 where deptno=30;

--<탄탄히 다지기>
-- 09. SAM01 테이블에서 직급이 정해지지 않은 사원을 삭제하시오.

-- 4.1 서브 쿼리를 이용한 데이터 삭제
-- <실습하기> 서브 쿼리를 이용한 데이터 삭제하기
-- 사원 테이블에서 부서명이 SALES인 사원을 모두 삭제해봅시다.
delete from emp01
where deptno = (select deptno from dept where dname= 'SALES');

-- <탄탄히 다지기>
-- 10. SAM02 테이블에서 RESEARCH부서 소속 사원들만 삭제하시오.

-- <실습을 위한 잔여 명령어>
select loc from dept01
where deptno = 40;

drop table dept01;

create table dept01
as (select * from dept);

select * from dept01;
select * from emp01;
select * from sam02;

반응형