국비 29일차_1

강지수·2024년 1월 24일
0

국비교육

목록 보기
56/97

지난 시간 복습


Trigger

Trigger : 방아쇠처럼 신호 감지하고 그 신호에 반응해서 동작하는 쿼리

test01 에 values 를 insert 하면 test02 에도 insert 되는 trigger 생성


test01 에서 value 를 delete 하면 test02 에도 delete 되는 trigger 생성


test01 을 update 하면 test02 도 같이 update 되는 trigger 생성


위의 3개의 trigger 통합


Old / New

Old / New 정리

insert 조작 시 old : null , new : 입력값
udate 조작 시 old : 변경 전 값, new : 변경 후 값
delete 조작 시 old : 삭제 전 값, new : 새로 들어온 입력값


미션

-- 미션
-- 11번 입사번호가 7698보다 작거나 같은 사람들의 입사번호와 이름을 출력하라.
select empno 입사번호, ename 이름 from empPK where empno<=7698;
-- 12번 입사일이 81/04/02보다 늦고 82/12/09보다 빠른 사원의 이름, 월급, 부서번호를 출력하라.
select ename 이름, sal 월급, deptno 부서번호 from empPk where hiredate<'82/12/09' and hiredate>'81/04/02';
-- 13번 급여가 $1,600보다 크고 $3,000보다 작은 사람의 이름, 직업, 급여를 출력하라.
select ename 이름, job 직업, sal 급여 from empPK where sal>1600 and sal<3000;
-- 14번 사원번호가 7654와 7782 사이 이외의 사원의 모든 정보를 출력하라.
select * from empPK where empno between 7654 and 7782;
-- 15번 이름이 B와 J사이의 모든 사원의 정보를 출력하라.
select * from empPK where ename between 'B' and 'J';
-- 16번 입사일이 81년 이외의 입사한 사람의 모든 정보를 출력하라.
select * from emppk where substr(hiredate,1,2)<>81;
-- 17번 직업이 MANAGER와 SALESMAN인 사람의 모든 정보를 출력하라.
select * from emppk where job in('MANAGER','SALESMAN');
-- 18번 부서번호롸 20, 30번을 제외한 모든 사람의 이름, 사원번호, 부서번호를 출력하라.
select ename 이름, empno 사원번호, deptno 부서번호 from emppk where deptno<>20 and deptno<>30;
-- 19번 S로 시작하는 사원의 사원번호, 이름, 입사일, 부서번호를 출력하라.
select empno 사원번호, ename 이름, hiredate 입사일, deptno 부서번호 from emppk where ename like 'S%';
-- 20번 입사일이 81년도인 사람의 모든 정보를 출력하라.
select * from emppk where substr(hiredate,1,2)=81;
-- 21번 이름 중 S자가 들어가 있는 사람만 모든 정보를 출력하라.
select * from emppk where ename like '%S%';
-- 22번 이름이 S로 시작하고 마지막 글자가 T인 사람의 모든 정보를 출력하라(단, 이름은 전체 5자리이다.)
select * from emppk where ename like 'S___T';
-- 23번 첫 번쨰 문자는 관계없고, 두 번쨰 문자가 A인 사람의 정보를 출력하라.
select * from emppk where ename like '_A%';
-- 24번 커미션이 NULL인 사람의 정보를 출력하라.
select * from emppk where comm is null;
-- 25번 커미션이 NULL이 아닌 사람의 정보를 출력하라.
select * from emppk where comm is not null;
-- 조회하셔서 잘 저장해두세요


DB _ Index



Index

index : 쿼리의 결과를 효율적으로 검색하기 위한 지원기능, 무조건 많은 인덱스를 설정하면 악영향을 끼침 -> 스플릿 현상이 나타남


-- 밸런싱 작업
alter index EMP_EMP_ID_PK monitoring usage; -- 모니터링 시작
alter index EMP_EMP_ID_PK nomonitoring usage; -- 모니터링 종료

-- 사용 여부
select index_name, monitoring,used from v$object_usage
where index_name='EMP_EMP_ID_PK';

-- 밸런스 확인 작업
create table i_test6(no number);

/
begin
    for i in 1..10000 loop
        insert into i_test6 values(i);
    end loop;
    commit;
end;
/
select * from i_test6;
select count(*) from i_test6;

select * from user_indexes where table_name='I_TEST6';

-- 밸런싱 조회
select * from index_stats;
desc index_stats;
-- 인덱스 생성
create index idx_test6_no on i_test6(no);
-- 분석 명령
analyze index IDX_TEST6_NO validate structure;

-- 밸런스를 백분율로
select (del_lf_rows_len/lf_rows_len)*100 balance from index_stats;
-- 0에 가까울 수록 좋은 컨디션

-- 일부 data 삭제
delete from i_test6 where no between 3000 and 6000;

-- 밸런스 초기화
alter index IDX_TEST6_NO rebuild;


데이터 테이블 import

테이블 우클릭 - 데이터 임포트


파일 경로 따라 첨부 - 구분자 설정 - 다음


테이블 이름 설정 - 다음


열 순서 설정 가능 - 다음


세부 정보 설정 가능 - 다음


설정 내용 확인 - 완료


기다리면 데이터 임포트 완료


테이블이 들어옴 확인


Random Data 만들기

Random Number 생성

select dbms_random.random from dual;

실행할 때마다 랜덤으로 숫자 생성, 양수, 음수 혼재


Random Number 생성 ( 0 ~ 1 )

select dbms_random.value from dual;


Random Number 생성 ( 0 ~ 1000 )

select dbms_random.value(1,1000) from dual;


Random 문자 생성

select dbms_random.string('U',20) from dual;

대문자로 된 20자 의 문자 랜덤 생성


select dbms_random.string('l',20) from dual;

소문자


select dbms_random.string('A',20) from dual;

대소문자 혼재


select dbms_random.string('X',20) from dual;

숫자와 대문자 혼재


select dbms_random.string('p',20) from dual;

숫자, 대, 소문자, 특수문자 혼재


random 한 값을 테이블에 넣는 procedure


/
declare
    type tbl_ins is table of random5%rowtype index by binary_integer;
    w_ins tbl_ins;
begin
    for i in 1..14000 loop
        w_ins(i).cola:=i;
        w_ins(i).colb:=300000;
        w_ins(i).colc:=99;
        w_ins(i).cold:='ABC'||dbms_random.string('x',10);
        w_ins(i).cole:='E';
        w_ins(i).colf:='F';
        w_ins(i).colg:=99;
        w_ins(i).colh:='H';
        w_ins(i).coli:='I';
    end loop;
    forall i in 1..14000 insert into random5 values w_ins(i);
    commit;
end;
/
select * from random5;
select count(*) from random5;
delete from random5;
commit;

테이블에 random 값 넣기


-- step 2 d 필드에 날짜 데이터 랜덤 입력
/
declare
    type tbl_ins is table of random5%rowtype index by binary_integer;
    w_ins tbl_ins;
begin
    for i in 1..14000 loop
        w_ins(i).cola:=i;
        w_ins(i).colb:=300000;
        w_ins(i).colc:=99;
        w_ins(i).cold:=to_date(round(dbms_random.value(1,28))||'-'||
                            round(dbms_random.value(1,12))||'-'||
                            round(dbms_random.value(1900,2023))
                            ,'DD-MM-YYYY');
        w_ins(i).cole:='E';
        w_ins(i).colf:='F';
        w_ins(i).colg:=99;
        w_ins(i).colh:='H';
        w_ins(i).coli:='I';
    end loop;
    forall i in 1..14000 insert into random5 values w_ins(i);
    commit;
end;
/
select * from random5;
select count(*) from random5;
delete from random5;
commit;



profile
개발자 준비의 준비준비중..

0개의 댓글