1 서브 쿼리
=>인라인 뷰 sql구문에서 from 뒤에 서브퀴리가 나오는 형태
sql구문을 효율적으로 작성하지 못할경우는 검색속도가 느려진다,
튜닝
1) 테이블명을 별칭부여
2)테이블의 필드의 수가 많고 데이터가 많을경우
from 서브쿼리 예)
===============================
select e.ename ,e.job,d.dname ,d.loc
from ( select ename,job, deptno
from emp
where job='MANAGER'
)e ,dept d
where e.deptno=d.deptno
==============================
=> MANaGER 에 해당하는 내용만 불려온다 그다음 조인
서브쿼리 select ~from 사이에도 서브쿼리가 올수 있다,
출력순서
select deptno,dname,(
case when deptno in(select deptno from dept
where loc='NEW YORK')
then '중심부'
else '변두리'
end
) "부서 위치"
from dept
테이블 생성하는 방법 =>기존의 테이블을 백업 시커서 새로운
테이블을 생성 ->백업데이터
full backup =>기존테이블을 통째로 복사 ()
create table 백업tb명 as select * from 기존tb명
ex) create table b_emp as select * from emp;
=>테이블의 구조와 데이터를 복사해온다.
주의할점)=>제약조건은 복사가 안되기 때문에 따로 설정해야한다.
2)부분백업 =>특정조건에 만족하는 데이터만 따로검색=>테이블에 저장
예)emp)job이 MANAGER 만 사원들만 따로 테이블로 저장
SQL> create table b_manager as select * from emp where job=upper('manager');
테이블이 생성되었습니다.(부분 백업 )
SQL> select count(*) from b_manager;
COUNT(*)
----------
3
SQL> select * from b_manager;
EMPNO ENAME JOB MGR HIREDATE SAL COMM
---------- ---------- --------- ---------- -------- ---------- ----------
DEPTNO
----------
7566 JONES MANAGER 7839 81/04/02 2975
20
7698 BLAKE MANAGER 7839 81/05/01 2850
30
7782 CLARK MANAGER 7839 81/06/09 2450
10
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 create table emp_deptno as
2 select deptno,count(*), avg(sal), sum(sal),min(sal),max(sal)
3 from emp
4* GROUP by deptno
SQL> /
select deptno,count(*), avg(sal), sum(sal),min(sal),max(sal)
*
2행에 오류:
ORA-00998: 이 식은 열의 별명과 함께 지정해야 합니다
수정
실제존재하는 필드처럼 가상필드명
수정 에)
create table emp_deptno(d_deptno,e_count, e_avg, E_sum,e_min,e_max
) as
select deptno,count(*), avg(sal), sum(sal),min(sal),max(sal)
from emp
GROUP by deptno
백업테이블=>필드가 복사 =>데이터 까지 복사
=>폴더만 복사 (테이블은 생성이 되는데 데이터x)
ex) create backup테이블명 as select * from 원본테이블명 where 거짓인조건
++++++++++++++++++++++++++++++++++++++++++++++++++++++
서브쿼리 (insert ,update , delete, select )에도 사용가능
형식) 1 insert 시
insert into 테이블명 values(필드명1,필드명2) ()서브쿼리
===>insert 시서브쿼리 안쓰는게 편하다 .
2 update
update를 서브쿼리를 이용하여 적용
에시)
update b_emp
set (job,sal)=( select job,sal from b_emp
where ename='SCOTT')
where ename='JONES'
EMPNO ENAME JOB MGR HIREDATE SAL COMM
------ ---------- --------- ---------- -------- ---------- ----------
DEPTNO
------
7566 JONES MANAGER 7839 81/04/02 2975 20
delete도 가능
예시)
SQL> ed
file afiedt.buf(이)가 기록되었습니다
1 delete
2 from b_emp
3 where deptno =(
4 select deptno
5 from dept
6 where dname='SALES'
7* )
SQL> /
오라클의 구성요소 ->***테이블 **뷰, **시퀀스 **인댁스 ......
'데이터베이스 > 오라클' 카테고리의 다른 글
| 오라클 페이징처리 (0) | 2018.06.05 |
|---|---|
| 오라클5-뷰에 대해서(2) (0) | 2018.06.05 |
| 오라클4-뷰에 대해서.. (0) | 2018.06.04 |
| 오라클 정리2 (0) | 2018.06.03 |
| 오라클 정리1 (0) | 2018.06.02 |