now is better than never
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 17 - 20 본문
SQL/초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡)
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 17 - 20
김초송 2022. 11. 23. 20:29<데이터 유형>
1. 문자형: varchar2
2. 숫자형: number
3. 날짜형: date
<임시 테이블>
1. on commit delete rows: 커밋을 하면 데이터 삭제
2. on commit preserve rows: 세션을 종료하면 데이터 삭제
<인덱스>
- 전체를 조회 = full table scan (where sal=3000)
- rowid: 행의 주소 = file 번호 + 블럭 번호 + row 번호
- create index table
-> 테이블 조회
<versions query>
1. commit이 진행되어야 version이 업데이트 됨
2. versions_starttime의 초기값은 null -> null first로 봐야 시간순
3. to_timestamp 값은 특정 시점을 시작지점으로 설정할 수 있음 (between timestamp 구문에서 종료시점 설정 가능)
FLASHBACK TRANSACTION QUERY:
-- 서열 (level) 출력
-- rpad : 공백 채우기
select rpad(' ',level*3) || ename, level, sal, job
from emp
start with ename='KING'
connect by prior empno = mgr;
-- 서열에서 blake와 blake 팀원들 출력 X
select rpad(' ',level*3) || ename, level, sal, job
from emp
start with ename='KING'
connect by prior empno = mgr and ename != 'BLAKE';
-- 서열 순서 유지 + 월급이 높은 순서대로
select rpad(' ',level*3) || ename, level, sal, job
from emp
start with ename='KING'
connect by prior empno = mgr
order siblings by sal desc;
select rpad(' ',level*3) || ename, level, sal, job
from emp
start with ename='BLAKE'
connect by prior empno = mgr
order siblings by sal;
-- 서열 순서 출력
select ename
, sys_connect_by_path(ename, '/') as path
from emp
start with ename='KING'
connect by prior empno = mgr;
-- DDL 명령어
-- create table
create table emp93
(empno number(10),
--varchar2 200까지 가능
ename varchar2(10),
-- 2자리 소숫점 허용
sal number(10,2),
hiredate date );
insert into emp93
values (7788, 'scott', 3000, to_date('81/12/21','RR/MM/DD') );
select * from emp93;
drop table emp93;
-- 임시 테이블 새성하기 (create temporary table)
-- commit 하면 데이터가 사라짐
create global temporary table emp37
(empno number(10),
ename varchar2(10),
sal number(10) )
on commit delete rows;
insert into emp37 values(1111, 'scott', 3000);
insert into emp37 values(2222, 'smith', 4000);
select * from emp37;
commit;
select * from emp37;
-- VIEW
create view emp_view
as (
select empno, ename, job, mgr, deptno
from emp
where job='SALESMAN'
);
select * from emp_view;
-- emp_view 테이블 값 수정하면 emp에도 반영됨
-- view는 바라보는거지 데이터를 가지고 있지 않음 = view와 원래 테이블이 별개가 아님
update emp_view
set mgr=0
where ename='MARTIN';
select * from emp_view;
select * from emp;
rollback;
select * from emp;
-- view : 2. 복잡한 쿼리 단순하게 하기, 간단하게 검색
-- 그룹함수 컬럼에 별칭 반드시 써야 함
create view emp_view2
as (
select deptno, round(avg(sal)) as avgsal
from emp
group by deptno
);
select * from emp_view2
order by deptno;
-- index : 데이터 검색 속도 높이기
-- 객체 (테이블, 뷰, 인덱스)
-- index = 검색속도를 높이는 객체 = 목차 역할
-- where 조건절이 index에 목차로 있고 테이블에도 같은 index 목차가 있음
-- full table scan (where)
-- 실행계획 보기
explain plan for (
select ename, sal
from emp
where sal = 3000
);
select * from table(dbms_xplan.display);
--월급 index
create index emp_sal
on emp(sal);
explain plan for
select ename, sal
from emp
where sal=3000;
select * from table(dbms_xplan.display);
select rowid, empno, ename
from emp;
-- index의 모습 (where 절에 조선을 줘야 함)
-- 문자 > ''
select sal, rowid
from emp
where sal >= 0;
-- sequence : 절대 중복되지 않는 번호 만들기
-- 사원번호, 거래번호 등
create sequence seq1;
select seq1.nextval
from dual;
create sequence seq2
start with 1
maxvalue 100
increment by 1 -- 증가
nocycle; -- 번호를 순환하지 않고 숫자가 다 되면 종료, 그 이상은 error
select seq2.nextval
from dual;
create sequence seq3
start with 1
maxvalue 100
increment by 1;
create table emp500
(empno number(10),
ename varchar2(10) );
insert into emp500
values (seq3.nextval, 'scott');
select * from emp500;
insert into emp500
values (seq3.nextval, 'smith');
select * from emp500;
-- 타임머신 기능 : FLASHBACK QUERY
-- 실수로 지운 데이터 복구하기
select * from emp;
delete from emp;
commit;
select * from emp;
rollback; -- 커밋 후에는 롤백 불가능
-- 5분전 데이터 복구
insert into emp (
select *
from emp
as of timestamp(systimestamp - interval '5' minute)
);
select * from emp;
commit;
-- 한계 : undo_retention value(900초=15분) 안에만 가능
show parameter undo;
-- sal = 0 후 원래 값으로 갱신
merge into emp e
using (select empno, sal
from emp as of timestamp (systimestamp - interval '5' minute) s
on (e.empno = s.empno)
when matched then
update set e.sal = s.sal;
-- FLASHBACK TABLE로 데이터 복구하기
delete from emp;
alter table emp enable row movement; -- 복구 가능한 상태로 만들기
-- 역시 15분 안에서만 복구 가능
flashback table emp to timestamp(systimestamp - interval '5' minute);
select * from emp;
commit;
-- FLASHBACK DROP : 휴지통(drop)에서 복구
drop table emp; -- 테이블 구조, index 까지 삭제함
select * from emp; -- Error: table or view does not exist
select *
from user_recyclebin
order by droptime desc; -- 휴지통 보기
flashback table emp to before drop; -- 가장 최근에 drop된 테이블 복구
select * from emp;
purge recyclebin; -- 휴지통 비우기
-- FLASHBACK VERSION QUERY : 히스토리 확인하기
select systimestamp from dual;
update emp
set sal=0
where ename='KING';
commit;
delete from emp;
select ename, sal, deptno,
versions_starttime, versions_endtime, versions_operation
-- versions_operation: u = update, d = delete
from emp
versions between timestamp to_timestamp('22/11/23 20:10:00', 'RRRR-MM-DD HH24:MI:SS')
AND MAXVALUE
where ename='KING'
order by versions_starttime nulls first;
** 수업 다 듣고 예제 103번 복습하기 (20차시 10분 13초)
'SQL > 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡)' 카테고리의 다른 글
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 23 - 25 (0) | 2022.11.27 |
---|---|
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 22 (0) | 2022.11.26 |
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 14 - 16 (0) | 2022.11.17 |
[easyupclass] 초심자를 위한 데이터베이스 및 빅데이터 플랫폼 구축과정(SQL, 하둡) 9 - 13차시 (0) | 2022.11.17 |