Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- SQL
- 튜닝
- python3
- Oracel
- 오라클
- R
- 프로그래머스
- 실습
- level 2
- 데이터 분석
- 카카오
- Numpy
- 빅분기
- pandas
- level 1
- seaborn
- oracle
- 머신러닝
- Python
- 빅데이터 분석 기사
- Kaggle
- sklearn
- 알고리즘
- 코딩테스트
- matplotlib
- 실기
- 파이썬
Archives
- Today
- Total
라일락 꽃이 피는 날
[Oracle] 서브 쿼리를 사용하여 데이터 활용 본문
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
'프로그래밍 > Oracle' 카테고리의 다른 글
[Oracle] 일반 테이블 생성 (0) | 2022.06.08 |
---|---|
[Oracle] 계층형 질의문 (0) | 2022.06.07 |
[Oracle] Select For Update (0) | 2022.06.03 |
[Oracle] 데이터 입력/수정/삭제 한 번에 하기 (Merge) (0) | 2022.06.03 |
[Oracle] 데이터 저장 및 취소 (0) | 2022.06.03 |