Data Base_Oracle/SQL

SQL_Sub Query_Table 만들기

pathas 2020. 1. 7. 23:17

Sub Query_Table 만들기

DML작업시에는 항상 백업 Table을 생성해두는 것이 좋음

§ 백업 테이블 만드는 형식

Full Backup 완전 백업

[ SQL> create table 백업table명 as select * from 원본table명; ]

Partial Backup 부분 백업

[ SQL> create table 백업table명 as select * from 원본table명 where 조건식; ]

Schema Backup 테이블 구조 백업

테이블의 구조만 가져오고 데이터는 백업하지 않는 형식

[ SQL> create table 백업table명 as select 필드명1,필드명2
from 원본table명 where 1=0; ]
※ where 조건식이 거짓이 되도록 설정

 

§ 데이터가 비어 있는 것을 확인하는 방법
[ SQL> select * from table명; ]
or [ SQL> count(*) from table명; ]

# 예제

{ 문제 _ 백업 활용 }
▷ emp 테이블에서 부서별로 부서번호, 인원수, 평균급여, 급여합계,
최소급여, 최대급여를 구하고 이 결과를 저장할 백업 Table 생성
백업 Table 이름은 emp_deptno로 함

 

{ 에러 }
▶ [ SQL> create table emp_deptno as select deptno, count(), avg(sal), sum(sal), min(sal), max(sal) from emp group by deptno;
1행에 오류:
*ORA-00998: 이 식은 열의 별명과 함께 지정해야 합니다
]

※ 그룹함수는 가상필드이며 가상필드는 백업테이블의 실질적인 필드로 복사되지 않음
→ 가상필드에 별칭을 부여해서 일반필드로 만들어줘야 함

 

{ 풀이 }
▶▶ [ SQL> create table
emp_deptno(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; ]

이름 널? 유형
DEPTNO   NUMBER(2)
E_COUNT   NUMBER
E_AVG   NUMBER
...   ...

※ 가상필드와 별칭은 1:1대응관계로 순서와 개수가 일치해야함

 

※ 테이블로 저장하는 경우에는 하드디스크에 저장이 됨
↔ save로 위와 같은 정보를 조회하는 문장만 txt파일로 저장
→ sql 문장으로 저장해서 호출하는 편이 메모리 사용 부담을 줄여줌

 

※ create ~ 와 select~ 가 같이 사용되었기 때문에 서브 쿼리의 한 종류로 보기도 함


DDL_Create에서의 서브 쿼리 활용을 살펴보았습니다.

원본 테이블에서 원하는 형태로 백업 테이블을 생성하는 것은

기존의 테이블에서 원하는 데이터만 조회해서 새로운 테이블을 만드는 것과 같다고 할 수 있습니다.