프로그래밍/Oracle
[Oracle] 서브 쿼리를 사용하여 데이터 활용
eunki
2022. 6. 3. 17:59
728x90
회사에서 차세대 프로젝트라고 해서 전산 쪽에 관련한 큰 프로젝트를 한다고 하면 내용이 무엇인가?
- 데이터를 저장하는 컴퓨터(서버)를 더 좋은 것으로 교체한다.
- 옛날 컴퓨터(서버)에 있었던 데이터를 새로운 컴퓨터(서버)로 옮긴다.
- 새로운 컴퓨터에 있는 데이터를 select 해서 새로운 홈페이지나 UI(사용자 화면)를 개발한다.
예제 1. emp_new 라는 테이블을 생성
create table emp_new
as
select *
from emp
where 1 = 2;
1 = 2 가 거짓 조건이므로 emp 테이블을 가지고 emp_new 를 만들 때,
데이터는 못 가져오고 구조만 가져와서 생성한다.
insert into emp_new
select *
from emp;
update 문에서 서브 쿼리를 사용할 수 있는 절
update --> 서브쿼리 사용가능 --> SQL 튜닝시에 주로 사용
set --> 서브쿼리 사용가능
where --> 서브쿼리 사용가능
예제 2. SCOTT 의 월급을 KING 월급으로 변경
update emp
set sal = ( select sal
from emp
where ename = 'KING' )
where ename = 'SCOTT';
예제 3. ALLEN 과 같은 부서 번호에서 근무하는 사원들의 월급을 KING 의 월급으로 변경
update emp
set sal = ( select sal
from emp
where ename = 'KING' )
where deptno = ( select deptno
from emp
where ename = 'ALLEN' );
예제 4. SCOTT 의 월급과 커미션을 ALLEN 의 월급과 커미션으로 변경
update emp
set (sal, comm) = ( select sal, comm
from emp
where ename = 'ALLEN' );
set 절에 컬럼 여러 개를 괄호 안에 써주면 한 번에 여러 개의 컬럼 값을 변경할 수 있다.
예제 5. 사원 테이블에 loc 컬럼을 추가하고, 부서 테이블의 부서 위치 데이터를 사원 테이블의 부서 위치 데이터로 갱신
alter table emp
add loc varchar2(10);
update ( select e.ename, 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;
예제6. SMITH 의 월급보다 더 많은 월급을 받는 사원들을 삭제
delete from emp
where sal > ( select sal
from emp
where ename = 'SMITH' );
예제 7. 부서 테이블에 sumsal 이라는 컬럼을 추가하고 해당 부서 번호의 토탈 월급으로 갱신
alter table dept
add sumsal number(10);
merge into dept d
using ( select deptno, sum(sal) as sumsal
from emp
group by deptno ) v
on (d.deptno = v.deptno)
when matched then
update set d.sumsal = v.sumsal;
728x90