[SQL] 서브쿼리를 사용한 수정

·2025년 7월 10일
0

SQL

목록 보기
101/126

💡 update문에서 서브쿼리를 쓸 수 있는 절

update — subquery 가능
set — subquery 가능
where — subquery 가능


문제1. SCOTT 의 월급을 9560으로 수정하시오

오라클

update emp
 set sal = 9560
 where ename='SCOTT';
 
 select ename, sal from emp;

MySQL
오라클과 다르게 자동커밋
set SQL_SAFE_UPDATES=0;

set SQL_SAFE_UPDATES=0;

update emp
set sal = 9560
where ename='SCOTT';

select ename, sal from emp;

MySQL 자동커밋 해제방법

Edit - Preferences... - SQL Execution

💡 mySQL에서 자동 커밋 기능을 비활성화하는 작업을 확인하는게 아주 중요


문제2. 직업이 ANALYST 인 사원들의 커미션을 7000으로 변경하시오

update emp
 set comm = 7000
 where job='ANALYST';

edit - Preferences... -


다시 workbench 를 껐다가 켭니다


문제3. SMITH 보다 더 많은 월급을 받는 사원들의 커미션을 9000 으로 변경하시오

update emp
 set comm = 9000
 where  sal > ( select  sal 
                  from emp
                  where ename='SMITH');

문제4. ALLEN 보다 늦게 입사한 사원들의 월급을 9500으로 수정하시오

update emp
 set sal = 9500
 where hiredate > ( select hiredate
                      from emp
                      where ename='ALLEN');

💡 MYSQL에서는 안됨


문제5. SCOTT의 커미션을 MARTIN 의 커미션으로 변경하시오

update emp
 set comm= ( select comm
               from emp
               where ename='MARTIN')
 where ename='SCOTT';

💡 MYSQL에서는 안됨


문제6. KING의 직업을 MARTIN의 직업으로 변경하시오

update  emp
set job = (select job
             from  emp
             where ename='MARTIN')
where ename='KING';


cmd에서 @demo 한번 돌리기

💡
update 서브쿼리 가능
set 서브쿼리 가능
where 서브쿼리 가능


문제7. emp 와 dept 를 조인해서 이름과 부서위치를 출력하시오

select e.ename, d.loc
 from  emp e,  dept  d
 where  e.deptno = d.deptno;

문제8. 사원 테이블에 loc 컬럼을 추가하시오

alter  table  emp
 add  loc  varchar2(20);
 
select ename, loc 
from emp;

문제9. dept 테이블의 loc 컬럼의 데이터로 emp 테이블의 loc 컬럼의 데이터를 수정하시오 (merge문 사용 안하는 방법)

update ( select e.loc as emp_loc, d.loc as dept_loc
          from emp e, dept d
          where e.deptno = d.deptno )
set emp_loc = dept_loc;

ㄴ merge만큼 속도 빠름

문제10. emp21 테이블에 t_price 컬럼을 삭제하시오

💡 alter문은 DDL명령어라서 자동커밋이 됨

alter  table  emp21
 drop  column  t_price;
 
 -- alter 문은 ddl 명령어이기 때문에 자동 커밋이 됨
 
select * from emp21;

문제11. emp21 테이블에 t_price 컬럼을 추가하시오

alter  table  emp21
 add  t_price  number(10);
 
select * from emp21;

문제12. emp21에 t_price 에 해당 통신사의 t_price 로 값을 갱신하는데 update절의 서브쿼리를 이용해서 수행하시오

update ( select e.t_price as e_t_price, t.t_price as t_t_price
             from emp21 e, telecom_table t
             where e.telecom = t.telecom  )
set e_t_price = t_t_price;             

select ename, t_price from emp21;

💡 위의 update문은 튜닝 후 SQL

0개의 댓글