본문 바로가기

JAVA/Oracle

오라클 - 자료의 수정과 자료의 삭제 update, delete 명령어

반응형

** 자료의 수정


update 테이블명 set 칼럼이름1=값1, 칼럽이름2 = 값2 [where 조건식]


실습) 홍길동 근로자의 주소를 '서울시 마포구 신수동' 으로 수정합니다.

update emp2 set eaddr = '서울시 마포구 신수동' where ename = '홍길동';


실습) 인사팀(500번) 근무하고 근무개월수가 60개월 이상인 근로자에게 급여를 인상하고자 한다.

인상률은 10%이다. 수정하는 질의문을 작성하시오.

update emp2 set esal = (esal + esal * 0.1) 

where dno = 500 

and months_between(sysdate, ehiredate) >= 60;


////////////////////////다른 방법


select dno from dept where dname = '인사팀';


형식)

update emp2 set esal = esal * 1.1 

where dno = () 

and months_between(sysdate, ehiredate) >= 60;


본질의)

update emp2 set esal = esal * 1.1 

where dno = (select dno from dept where dname = '인사팀'

and months_between(sysdate, ehiredate) >= 60;


실습) '홍길동'의 급여를 '강감찬'의 급여와 동일하도록 수정하시오. ('홍길동'의 급여를 500이 되도록 함)

select esal from emp2 where ename = '강감찬';

// 강감찬의 급여를 먼저 알아옴


형식)

update emp2 set esal = () where ename = '홍길동';


본질의)

update emp2 set esal = (select esal from emp2 where ename = '강감찬') where ename = '홍길동';


실습) 홍길동 사원의 근무부서를 '개발3팀'으로 수정하고 주소도 '제주도 서귀포시' 로 변경한다.

update emp2 set dno = 600, eaddr = '제주도 서귀포시' where ename = '홍길동';


////////////////////// 다른방법


select dno from dept where dname = '개발3팀';


형식)

update emp2 set dno = (), eaddr = '제주도 서귀포시' 

where ename = '홍길동';


본질의)

update emp2 set dno = (select dno from dept where dname = '개발3팀'), eaddr = '제주도 서귀포시' 

where ename = '홍길동';





** 데이터 삭제를 위한 명령어

delete 테이블명 [where 조건식]


실습) '인사팀'의 모든 사원을 삭제하시오.

select dno from dept where dname = '인사팀';

// 인사팀 부서번호 먼저 구하기


형식)

delete emp2 where dno= ();


본질의)

delete emp2 where dno = (select dno from dept where dname = '인사팀');


실습) 근무지가 '서울시' 이고 근무개월수가 60개월 이상인 근무자를 모두 삭제하시오.

select dno from dept where dloc like '서울시%';

// 서울시인 부서번호 먼저 구하기


형식)

delete emp2 where dno = () 

and months_between(sysdate, ehiredate) >= 60;


본질의)

delete emp2 where dno in (select dno from dept where dloc like '서울시%'

and months_between(sysdate, ehiredate) >= 60;


오류)

delete emp2 where dno = (select dno from dept where dloc like '서울시%'

and months_between(sysdate, ehiredate) >= 60;


// ORA-01427 : 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다.

= 대신 in 을 사용한다.


서브쿼리의 결과가 단일행 경우 단일행 연산자 사용

=, >, >=, <, <= 

서브쿼리의 결과가 다중행 경우 다중행 연산자 사용

= in

>, >=, <, <= any(some), all

반응형