** 자료의 수정
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
'JAVA > Oracle' 카테고리의 다른 글
오라클 - 질의문을 이용한 책 추천 시스템 풀이 (0) | 2016.06.18 |
---|---|
오라클 - 질의문 예제와 풀이 (0) | 2016.06.18 |
오라클 - union 명령어 예제 및 궁금증(max에 변수 여러개 가능?, 서비쿼리 결과를 가상의 테이블인 = 연산자로 판별?) (0) | 2016.06.18 |
오라클 - outter join 설명 및 예제 (0) | 2016.06.18 |
오라클 명령어 - group by 와 having 설명 및 예제 (0) | 2016.06.18 |