일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- SQLD 옵티마이저
- java 구구단
- java 상속
- java 성별
- SQL
- java string
- sqld remame
- sqld 자격증
- java 함수
- Java 메소드
- SQLD 핵심포인트
- PLSQL
- sqld 옵티마이져
- java Animal
- JAVA 연산자
- sqld grant
- SQLD 특강
- sqld revoke
- Java Cat
- java spider
- java Fish
- java 단축키
- java 로또
- SQLD 자격시험 개념정리
- java 논리연산자
- JAVA 제어문
- sqld deny
- JAVA for문
- sqld trigger
- Today
- Total
SQLD, ECLIPS, JAVA,PYTHON, NODE....
[Oracle] SQL Class 9 - DML 명령, 실습예제, 병합(merge) 본문
2023.11.6
DML 란?
- 데이터 조작명령, 데이터 변경명령, 트렌젝션(처리) 명령, 데이터 흐름명령, 이벤트 명령
- 실행대상: 행**** 단위
-- insert(입력), update(변경), delete(삭제)
1. insert (입력)
1) insert into table_name values(값, ... ); // 전체 컬럼값을 가진 입력
2) insert into table_name(컬럼명, ... ) values(값, ... ) // 선택 컬럼값을 가진 입력 **가장 많이 씀
3) insert into table_name( [컬럼명]) select ~; // 다중행 단위의 입력
2. delete(삭제)
SQL > delete [from] table_name where~ // where절 참일때 출력, 해당 행(row) 삭제할때 사용.
단, 테이블내의 모든 행을 삭제하는 경우를 사용해야 됨.
3. update
- update table_name set 컬럼=값, ... where~
실습예제
* 모든 문제는 sawon_exx, dept_exx, gogek_exx 사본 테이블을 생성하여 작업할 것
SQL> create table sawon_exx as select *from sawon;
SQL> create table dept_exx as select *from dept;
SQL> create table gogek_exx as select *from gogek;
1) 고객의 담당자가 없는 고객은 13번 사원으로 변경
SQL> update gogek_exx set godam=13
where godam is null;
2) 13번 담당자를 갖는 고객의 담당자를 null로 변경
SQL> update gogek_exx set godam=null
where godam=13;
3) sawon_ex 테이블에 직책이 사원인 사람들의 sawon 테이블 모든 컬럼정보를 입력
SQL> insert into table sawon_exx select *from sawon
where sajob='사원';
혹은 insert into table sawon_exx(sabun, saname,sapay)
select sabun, saname, sapay from sawon where sajob='사원';
// sabun, saname, sapay를 쓰면, select에도 동일하게 입력해야 됨.
4) 17번 사원의 부서와 같은 사원들의 직책을 17번 사원의 직책으로 변경
SQL> update sawon_exx
set sajob=(select sajob from sawon where sabun=17)
where deptno=(select deptno from sawon where sabun=17);
// set절에는 사원의 직책, where절에는 17번 사원의 직책
5) 영업부 사원들의 급여를 10% 인상 변경 --> 테이블 2개로 값 변경
SQL> update sawon_exx
set sapay=sapay*1.1
where deptno=(select deptno from dept_exx where dname='영업부');
6) 관리부서 사원 중에서 회사의 평균급여보다 낮은 사람들을 삭제
SQL> delete from sawon_exx
where deptno=(select deptno from dept_exx where dname='관리부')
and sapay>(select avg(sapay) from sawon_exx);
7) 총무부 사원들의 급여를 자신이 속한 직책의 평균급여로 변경 --> 상관쿼리
SQL> update sawon_exx s
set sapay=(select avg(sapay) from sawon_exx e where e.sajob=s.sajob)
where deptno=(select deptno from dept_exx where dname='총무부');
## Merge(병합)
-- 한 번의 조건으로 입력 or 변경을 수행하는 문구
-- 형식
merge into 테이블명 using 비교 테이블명 on(두 테이블 비교문-기본키 대상)
when matched then
update set~
when not matched then
insert values ~ ;
(연습1)
sawon 테이블과 비교하여 사원정보가
sawon_10 테이블에 존재하면 급여를 10% 인상하고, sawon_10 테이블에 존재하지 않는다면 입력하라.
SQL> create table sawon_10 // sawon_10 테이블 생성.
SQL> select *from sawon
merge into sawon_10 s10
using sawon s on(s.sawon=s10.sabun)
when matched then
update set sapay=sapay*1.1
when not matched then
insert values (s.sabun, s.saname, s.deptno, s.sapay, s.sahire, s.sasex, s.samgr);
'SQL' 카테고리의 다른 글
[Oracle] SQL Class 10 - TCL, 시퀀스, view, 사용자 정의 view, Index (0) | 2023.11.07 |
---|---|
[Oracle] SQL Class 9 - 숙제 (0) | 2023.11.06 |
[Oracle] SQL Class 5(남교수님 정리)- 단일행함수 마무리 (0) | 2023.11.06 |
[Oracle] SQL Class 8 - Join 실습예제 (0) | 2023.11.06 |
[Oracle] SQL Class 8 - Group_ Function 문제 및 답안 (0) | 2023.11.06 |