Quiet Time

identified
 
 
11 . 기타 스키마 객체
    • 목차
 
    • VIEW
    • INDEX
    • SEQUENCE
    • SYNONYM
 
11.1 VIEW
 
"테이블을 바라보는 쿼리문의 결과"
 
    • VIEW  필요한 이유
 
    • 데이터의 보안을 위해서
    • 복잡한 쿼리를 단순하게 조회하기 위해서
 
 
 
create view emp990
as
select empno , ename, job, comm, job, deptno
  from emp;
 
select * from emp990;
 
 
 
뷰를 수정하면 테이블도 수정됨 !!
 
 
update emp990
set comm= 9000
where ename = 'MARTIN';
 
 
 
문제331. 부서번호, 부서번호별 평균월급을 출력하시오
 
SELECT DEPTNO, AVG(SAL)
FROM EMP
GROUP BY DEPTNO;
 
문제332. 이름, 월급, 부서번호,부서번호별 평균월급
 
SELECT ENAME, SAL, DEPTNO, SUM(SAL)
  FROM EMP;
GROUP BY DEPTNO
------------------------ 만들어서 쓰기-------------------------------
 
CREATE VIEW D_AVG
AS SELECT DEPTNO , AVG(SAL) 평균월급
FROM EMP
    GROUP BY DEPTNO;
   
    SELECT ENAME, SAL, E.DEPTNO, ROUND(D.평균월급,2)
  FROM EMP E, D_AVG D
  WHERE E.DEPTNO = D.DEPTNO;
 
------------------------------- 라인 --------------------------------------
 
SELECT ENAME, SAL, E.DEPTNO, ROUND(D.평균월급,2)
  FROM EMP E, (SELECT DEPTNO , AVG(SAL) 평균월급
FROM EMP
    GROUP BY DEPTNO) D
  WHERE E.DEPTNO = D.DEPTNO;
 
문제333.위의 결과를 다시 출력하는데 자기의 월급이 자기가 속한 부서번호의
평균월급보다   사원만 출력하시오
 
 
SELECT ENAME, SAL, E.DEPTNO, ROUND(D.평균월급,2)
  FROM EMP E, (SELECT DEPTNO , AVG(SAL) 평균월급
FROM EMP
    GROUP BY DEPTNO) D
  WHERE E.DEPTNO = D.DEPTNO AND E.SAL > 평균월급;
 
 
문제334.(오늘의 마지막 문제)
     통신사 ,이름, 나이, 순위를 출력하는데
순위가  통신사별로 각각 나이가 높은 순서대로 순위를 부여하는 결과를
출력할 때에 순위가 1,2,3등만 출력되게 하시오
 
 
    SELECT *
      FROM
           (SELECT TELECOM,
                  ENAME,
                  AGE,
                  DENSE_RANK() OVER (PARTITION BY TELECOM ORDER BY AGE DESC) RNK
             FROM EMP2
           )
     WHERE RNK <=3 ;
 
 
 
 
    • 제약(constraint) " 데이터의 품질을 높이기 위해서"
      1. primary key
      2. unique
      3. not null
      4. check
      5. foreign key
    • Database object 5가지
      1. table                              -->행과 열로 이루어진 데이터를 저장하는 기본 저장단위
 
    • view                               --> 테이블을 바라보는 쿼리문의 결과
in line view 비교
 
    • index
 
    • sequence
 
    • synonym
 
 
 
view 장점 :?      1. 데이터 엑세스 제한
(보안상 감춰야  컬럼들을 감추기 위해서)
    •  복잡한 쿼리를 단순화
 
 
문제335. 이름,월급, 등급을 출력하는 ntile 분석함수를 이용해서 등급을 4등급으로 나눠서 출력하세요
(월급이 높은 순서대로 등급을 나누시오!)
 
 
select ename, sal,
(4) over (order by sal desc) 등급
from emp;
 
 
 
문제336.위의 쿼리의 결과를view 생성하시오 !
(view 이름 : emp336)
 
create view emp336
as
select ename, sal, ntile(4) over (order by sal desc) 등급
from emp;
 
 
문제337. emp336 view에서 등급이 4등급인 사원들만 출려하시오
 
-view
 
 SELECT *
      FROM emp336
      where 등급 = 4;
 
-in line view
 
 SELECT *
      FROM (SELECT ename,
           sal,
           ntile(4) over (ORDER BY sal desc) 등급
      FROM emp)
      where 등급 = 4;
 
 
설명 :  select 문에서 서브쿼리를  수있는 절
 
    SELECT                       --- subquery (명칭: 스칼라 서브쿼리)
      FROM                      --- subquery ( 명칭: 라인 )
     WHERE                     --- subquery
     GROUP BY                 
    HAVING                     --- subquery
  ORDER BY                    ---subquery
 
 
문제338.  이름, 월급, 사원 테이블 전체의 평균 월급을 출력하시오
 
select ename, sal, (select avg(sal) from emp)
from emp;
 
 
    • view 종류 2가지 (p11-7)
           단순 view                                        복합 view
테이블의 갯수                     1                                               1 초과
 
group 함수나                       불 포함                                              포함
group by 
 
DML 여부                             가능                                              불가능할 수도 있다.
 
문제339. 이름, 월급과 부서 위치를 출력하는 VIEW 생성하시오
(view 이름 : emP339)
CREATE VIEW EMP339
AS
SELECT ENAME,SAL,LOC
FROM EMP , DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
 
 
 
문제340. EMP339 VIEW 수정하는데 이름이 KING 사원의 부서위치를
SEOUL 변경하시오
 
UPDATE EMP339
SET LOC='SEOUL'
WHERE ENAME='KING';
 
 
복합 뷰이기 때문에 에러가 난다.
뷰는 데이터를 갖고 있지 않다
저렇게 하면 실제 테이블로 가서 업데이트를 한다
 
그러면 다른 사람들의 LOC 바뀐다
 
그러므로 복합뷰는 갱신   없다.
 
 
 
문제341. 부서번호, 부서번호별 평균월급을 출력하는 VIEW 생성하시오
(VIEW 이름: EMP341)
 
CREATE VIEW EMP341
AS
SELECT DEPTNO, AVG(SAL) AVG
      FROM EMP E
      GROUP BY DEPTNO;
 
문제342. 부서번호가 10번인 사원들의 평균월급을 2000으로 변경해보시오!
( VIEW 이름: EMP343)
UPDATE EMP341
SET AVG= 2000
WHERE DEPTNO=10
 
문제343. 부서번호가 20번인 사원들의 사원번호, 이름, 월급, 부서번호를 출력하는 VIEW 생성하시오
 
 
CREATE VIEW EMP343
AS
SELECT DEPTNO, ENAME, DEPTNO
FROM EMP
WHERE DETPNO = 20;
 
 
문제344. VIEW 수정을 하는데
 
EMP343뷰를 수정하는데 JONES 부서번호를 30번으로 변경하시오
UPDATE EMP343
SET DEPTNO = 30
WHERE ENAME = 'JONES';
 
 
 VIEW 생성시 옵션
    • WITH CHECK OPTION : VIEW  WHERE 절에서 기술한 조건에 위배되게끔 DATA 갱신하지 못하게 하는 옵션
   2.    WITH READ ONLY : VIEW 전체를  수정, 삭제하지 못하게 하고 오로지 읽기만   잇게 하는 옵션
 
 
 
DROP VIEW EMP343;
 
CREATE VIEW EMP343
 
AS
 
SELECT EMPNO, ENAME, SAL DEPTNO
FROM EMP
WHERE DEPTNO = 30
WITH CHECK OPTION;
 
 
 
 
 
문제345. 사원 테이블의 이름과 월급을 출력하는 VIEW 생성하는데
 월급을 9600으로는 수정못하게 하는 VIEW 생성핫이오
(VIEW 이름:EMP345)
CREATE VIEW EMP345
 
AS
 
SELECT ENAME, SAL
FROM EMP
WHERE sal between 0 and 9600
WITH CHECK OPTION;
 
문제346. with check옵션을 걷어내시오
 
CREATE or replace VIEW EMP345
 
AS
 
SELECT ENAME, SAL
FROM EMP
WHERE sal between 0 and 9600
 
※설명: emp345 view  존재하면  수정하고 없으면 새롭게 만들어라
 
 삭제 drop view emp346
 
 
 
문제347. (점심시간 문제) 페이스북에서 키워드 '입장권'으로 스크롤링한
csv 파일을 오라클에 table에 입력하시오
(테이블명 : facebook_ticket)
select * from facebook_ticket;
 
 
 
문제348. 데이터 입력한 페이스북 티켓 테이블의 데이터중 시간정보 끝에 ,  잘라내는 쿼릴 완성하고
 
CTAS 이용해서 FACEBOOK_TICKET2 라는 테이블을 생성하시오
 
 
 
 
create table FACEBOOK_TICKET2 as 
 
select rtrim(use_time,',') use_time ,to_lob(use_word) use_word from FACEBOOK_TICKET;
 
select * from FACEBOOK_TICKET2;
 
 
 
 
문제349. 아래와 같이 결과를 출력하시오!
년도// : 시간 , 건수
 
select substr(use_time,1,13) a, count(*)
from FACEBOOK_TICKET
group by substr(use_time,1,13)
order by a asc nulls last;
 
문제350. 아래와 같이 입장권에 대한 글이 facebook 가장 많이 올라온 날짜부터 출력
 
select substr(use_time,1,10) a, count(*)
from FACEBOOK_TICKET
group by substr(use_time,1,10)
order by count(*) desc nulls last;
 
 
 
11.2 index ----> data 검색속도를 높이는 db object
    • data 엑세스 하는 방법
    • full table scan : 테이블을 처음부터 끝까지 전부 스캔해서 원하는 data 검색하는 방법
    • index range scan : 인덱스(  : 책의 목차)  통해서 테이블의 data 검색하는 방법
 
 
문제351. 이름이 SCOTT 사원의 이름과 월급을 조회하시오
 
SELECT ENAME, SAL
FROM EMP
WHERE ENAME = 'SCOTT';
  
 
    • 인덱스 생성 구문
CREATE INDEX EMP_ENAME   <----------인덱스 이름
ON EMP(ENAME)
                     
 테이블명   컬럼명
 
 
 
 
 
    • 인덱스의 구조
    • 컬럼값 + rowid (해당 로우의 주소)
                               : 페이지 번호
 
    • 컬럼값이 ascending 하게 정렬되어있다 ( 영무능 abcd 순서대로 정렬되어있다.)
 
select ename, rowid
  from emp
where ename > '         ';
 
 
 
 
* 아래의 쿼리의 실행계획을 각각 보시오
1. table 에서 데이터를 읽은 경우
 
select ename, rowid
from EMP;
 
실행계획 확인 방법 : F7
 
2. index 에서 데이터를 읽은 경우
select ename, rowid
from emp
where ename > '           ';
----------------------------------------------------------------------------------------
|Operation                                 | Object Name | Rows | Bytes | Cost | Object Node | In/Out | PStart | PStop | Access Predicates | Filter Predicates |
----------------------------------------------------------------------------------------------------------------------------------------------------------------
| SELECT STATEMENT Optimizer Mode=ALL_ROWS |             |   14 |   266 |    2 |             |        |        |       |                   |                   |
|  TABLE ACCESS FULL                       |SCOTT.EMP    |   14 |   266 |    2 |             |        |        |       |                   |                   |
 
 
 
 
 
select ename, rowid
  from emp
WHERE ENAME > ' ';
 
 
 
 
 
 
문제352. EMP 테이블에 월글에 INDEX 거시오
 
 
CREATE INDEX EMP_SAL   <----------인덱스 이름
ON EMP(SAL)
 
 
 
문제353. EMP_SAL 인덱스의 구조를 확인하시오
 
컬럼값 + ROWID
 
    SELECT SAL ,
           rowid
      FROM emp
     WHERE SAL > 0;
 
문제354. 월급이 1600 사원의 이름과 월급을 출력하시오!
아래의 SQL 인덱스를 통해서 데이터를 조회했는지
아니면 테이블을 Full table scan  해서 조회햇는지
알아내려면 어떻게 해야 하는가?
 
 
SELECT ENAME, SAL
FROM EMP
WHERE SAL = 1600;



문제355. 입사일에 인덱스를 걸어보세요
create index emp_hiredate
on emp(hiredate);



문제.356. 입사일에 걸린 인덱스의 구조를 확인하시오!
 
컬럼값 , rowid
 
 
select hiredate, rowid
from emp
where hiredate < to_date('9999/12/31','RRRR/MM/DD');
 
    • 인덱스의 구조를 확인하기 위해서 where 절에 조건을 주는 조건
      1. 문자 > '     '
      2. 숫자 > 0
      3. 날짜 < to_date('9999/12/31','RRRR/MM/DD')
 
문제357. 아래의 SQL 결과를 ORDER BY  쓰지 말고 데이터가 정렬   있도록
다시 재작성하시오! ( 튜닝하시오)
 
튜닝전 :
SELECT ENAME, SAL
FROM EMP
ORDER BY SAL ASC;
 
튜닝후 :
SELECT ENAME, SAL
FROM EMP
WHERE SAL > 0;
 
SELECT /*+ INDEX_ASC(EMP EMP_SAL) */ENAME,
           SAL
      FROM EMP
     WHERE SAL > 0;
 
설명 :  /*+ 힌트 */   힌트? 실행계획을 제어하는 명령어
 
INDEX_ASC ----> 인덱스를 ASCE NDING 하게 읽어라
 
INDEX_ASC(EMP            EMP_SAL)
                                              
테이블명        인덱스 이름
 
문제358. 아래의 SQL ORDER BY 절을 이용하지 말고 인덱스를 통해서 정렬된 결과를 보시오
 
SELET ENAME, SAL
FROM EMP
WHERE JOB = 'SALESMAN'
ORDER BY SAL ASC;
 
 
문제359. 아래의 SQL ORDER BY  없이 수행되게끔 SQL 고치시오
 
튜닝전 : SELECT ENAME, HIREDATE
FROM EMP
ORDER BY HIREDATE DESC;
 
튜닝후  :
SELECT ENAME, HIREDATE
FROM EMP
WHERE  HIREDATE < TO_DATE('9999/12/31','RRRR/MM/DD');
 
 
 
머신러닝의 가장 기본이 되는 핵심 알고리즘중에
경사 감소법이 있는데  경사 감소법을 이해하려면 수렴과 발산을 알아야 한다
 
수열 : 수의 나열
1, 3, 5, 7, 9
 
퍼셉트론 네모와 세모를 구분해 내요!
 
ㅁㅣ분이 필요해요!
 
미리 공부해 놓아요
 
 
 
 
 
    • sql이란
    • sql 배워야하는거이유
    • select 6가지값
    • 단일행 함수 : 문자,숫자,날짜,변환,일반
복수행 함수 : max, min, avg, sum, count
 
    • 조인 - 1. 1999 ansi 조인 문법
 2. 오라클 조인
    1. 서브쿼리 1. single row subqeury
        2. multiple row subquery
        3. multiple column subquery
    1. 집합연산자 4가지 : uninon all , union, minus , intersect
    2. 레포팅 
      • rollup
      • grouping sets
      • grouping
      • cube
    1. DML 문장
      • INSERT
      • UPDATE
      • DELETE
      • MERGE
    1. DDL 문장 : CREATE, ALTER, DROP, TRUNCATE, RENAME
    2. 제약 : PRIMARY KEY, UNIQUE, CHECK , NOT NULL, FOREIGN KEY
    3. DB OBJECT 5가지
      • TABLE
      • VIEW
      • INDEX          --------------> 데이터 검색 속도를 높이는 DB오브젝트
      • SEQUENCE
      • SYNONYM
 
 
 
 인덱스 (INDEX) 구조
    1. 컬럼값 + ROWID (ROW 구조)
    2. 컬럼값이 ASCENDING 하게 정렬이 되어있다.
    1. ROWID( ROW 주소)
FILE번호 + BLOCK번호 + ROW번호
 
SELECT ROWID, EMPNO, ENAME, SAL
FROM EMP;
 
 
SELECT * FROM EMP;
 
감춰져 있는 컬럼
 
 
 
 
문제360. 사원테이블에 월급에 인덱스가 있는지 조회하시오!
 
SELECT INDEX_NAME
FROM USER_INDEXES
WHERE TABLE_NAME='EMP';
 
    1. 어느 컬럼에 인덱스가 있는지 확인 하고자 한다면
SELET TABLE_NAME, INDEX_NAME, COLUMN_NAME
FROM USER_IND_COLUMNS
WHERE TABLE_NAME='EMP';
 
문제361. emp_sal 인덱스의 구조를 출력하시오!
 
컬럼값 + rowid
 
select u.column_name , e.rowid
from user_ind_columns u, emp e
where u.rowid = e.rowid;
 
select sal, rowid
from emp
where sal >= 0;
 
       emp_sal 인덱스                                                                                 emp 테이블
 
 
문제362. 월급이 1600 사원의 이름과 월급을 출력하시오
( 어떻게 인덱스를 통해서 테이블의 데이터를 찾는지 그림으로 설명하시오 )
select ename , sal
  from emp
where sal = 1600;
 
 
 
 
문제363. 그럼 아래의 SQL 실행계획이 FULL TABLE SCAN 했는지 INDEX RAGE SCAN
 
SELECT /*+ INDEX(EMP EMP_SAL) */ENAME, SAL
FROM EMP
WHERE SAL =1600;
 
 
 
 
 
 
 
 
문제364. 81/02/23  입사한 사원의 이름과 입사일을 출력하는데
실행계획이 어떻게 되는지 확인하고 인덱스 스캔이   있도록
조치하시오 !
 
SELECT ENAME, HIREDATE
  FROM EMP
WHERE HIREDATE = TO_DATE('1981/02/23','RRRR/MM/DD');
 
문제365. 연봉이 36000 사원의 이름과 연봉(SAL * 12)  출력하시오!
==> 힌트써도  테이블 스캔함(  TABLE ACCESS FULL )
 
 
튜닝전:
 
SELECT /*+ INDEX(SAL, EMP_SAL) */ ENAME, SAL* 12
 FROM EMP
 WHERE SAL * 12 = 36000;
              
            좌변
 
좌변(인덱스 컬럼)  가공 하면 인덱스 엑세스가  된다.
 
 
튜닝후 :
 
SELECT /*+ INDEX(EMP, EMP_SAL) */ ENAME, SAL * 12
 FROM EMP
 WHERE SAL = 36000 / 12;
 
 
 
설명: 인덱스 컬럼을 가공하게 되면 인덱스 엑세스가 안된다!
검색 속도를 높이려면 인덱스 컬럼을 가공하는 SQL 작성하면 안된다.!!
 
 
문제366. 아래의 SQL 튜닝하시오
 
CREATE INDEX EMP_JOB
ON EMP(JOB)
 
튜닝전 :
SELECT ENAME, JOB
  FROM EMP
 WHERE SUBSTR(JOB,1,5) = 'SALES';
 
 
튜닝후 :
SELECT /*+ INDEX(EMP, EMP_JOB) */ ENAME, JOB
  FROM EMP
 WHERE JOB LIKE  'SALES%';
 
 
설명: substr 을 걷어내고 like 연산자를 사용하는데
와일드 카드(%)  뒤쪽에 작성해야 한다.
 
문제367. 아래의 SQL 튜닝하시오!
 
튜닝전 :
 select ename hiredate
from emp
where to_char(hiredate, 'RR/MM/DD') = '81/02/23';
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|Operation                                 | Object Name | Rows | Bytes | Cost | Object Node | In/Out | PStart | PStop | Access Predicates |                       Filter Predicates                      |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SELECT STATEMENT Optimizer Mode=ALL_ROWS |             |    1 |    14 |    2 |             |        |        |       |                   |                                                              |
|  TABLE ACCESS FULL                       |SCOTT.EMP    |    1 |    14 |    2 |             |        |        |       |                   | TO_CHAR(INTERNAL_FUNCTION("HIREDATE"),'RR/MM/DD')='81/02/23' |
 
 
 
 
튜닝후 :
 select ename hiredate
from emp
where hiredate = to_date('81/02/23','RR/MM/DD');
 
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|Operation                                 |     Object Name    | Rows | Bytes | Cost | Object Node | In/Out | PStart | PStop |             Access Predicates             | Filter Predicates |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| SELECT STATEMENT Optimizer Mode=ALL_ROWS |                    |    1 |    14 |    2 |             |        |        |       |                                           |                   |
|  TABLE ACCESS BY INDEX ROWID             |SCOTT.EMP           |    1 |    14 |    2 |             |        |        |       |                                           |                   |
|   INDEX RANGE SCAN                       |SCOTT.EMP_HIREDATE  |    1 |       |    1 |             |        |        |       | "HIREDATE"=TO_DATE('81/02/23','RR/MM/DD') |                   |
 
 
 
 
 
문제368. 아래의 데이터를 입력하고 어제 입사한 사원의 이름과 입사일을 출력하시오
 
insert into emp ( empno , ename, sal , hiredate)
values (1256, 'JACK', 3500, sysdate-1);
 
 
튜닝전:
select ename, hiredate
from emp
where to_char(hiredate,'RR/MM/DD') = '17/03/12';
 
 
튜닝후
select ename, hiredate
from emp
where hiredate =  to_date('17/03/12','RR/MM/DD');
 
 
 
select ename, hiredate
from emp
where hiredate between  to_date('17/03/12 00:00:00','RR/MM/DD HH24:MI:SS') and
to_date('17/03/12 23:59:59','RR/MM/DD HH24:MI:SS');
 
 
select ename, hiredate
from emp
where hiredate between  to_date('17/03/12 00:00:00','RR/MM/DD HH24:MI:SS') and
   to_date('17/03/12 23:59:59','RR/MM/DD HH24:MI:SS');
 
select ename, hiredate
from emp
where hiredate >=  to_date('17/03/12','RR/MM/DD') and
hiredate < to_date('17/03/12','RR/MM/DD') + 1
;                                                
 
문제369. (점심시간문제)
아래의SQL order by  쓰지말고 인덱스를 통해서
데이터가 정려로디도록 다시 재작성하시오
 
튜닝전 :
 select ename, sal, job
from emp
where job = 'SALESMAN'
ORDER BY SAL DESC;
 
 
튜닝후
 select ename, sal, job
from emp
where SAL > 0 AND   job = 'SALESMAN'
 
 
 
 인덱스 삭제
drop index emp_sal;
 
select index_name
from user_indexes
where table_name = 'EMP';
 
 
문제370. emp 테이블에 걸린 모든 인덱스를 전부 삭제하시오!
 
 
select ' drop index ' || index_name ||';'
from user_indexes
where table_name='EMP';
 drop index EMP_JOB; drop index EMP_HIREDATE; 
 
문제371.EMP, EMP2, SALGRADE, DEPT 테이블을 제외한 다른 테이블들을 전부 드랍하시오
 
 SELECT 'DROP TABLE '||TABLE_NAME || ';'
 FROM USER_TABLES
 WHERE TABLE_NAME NOT IN ('EMP','EMP2','SALGRADE','DEPT');
 
 
    1. 11 목차
    1. VIEW
    2. INDEX
    3. SEQUENCE
    4. SYNONYM
 SEQUENCE ~> 번호를 생성하는 데이터 베이스 오브젝트
 
    1. 시퀀스 (SEQUENCE)   필요한가?
 " 특정 테이블에 번호를 순서대로 입력하기 위해서 필요하다"
 : 특정과목에 수강신청을 하는데 30 정원인 경우
       테이블에 30명만 입력되게 하고 번호가 순서대로
수강신청번호가 생성되게 입력하고 싶을때 필요해
 
    1. 시퀀스 생성
CREATE SEQUECE SEQ1
START WITH 1                    ----시작숫자
INCREMENT BY 1               ----증가치
MAXVALUE 100                  ----최대숫자
MINVALUE -100                 ----최소숫자 (순환시 사이클이 끝까지 가면 다시 -100)
NOCYCLE                             ---- 순환여부
CACHE 20 ;                         --- 시퀀스의 번호를 빨리 사용하기 위해 번호 20개를 미리 생성해서 메모리에 올려놓음
 
 
 
 
    1. 시퀀스를 사용하는 방법
SELECT SEQ1.NEXTVAL
FROM DUAL;
 
 
 
    1. 시퀀스를 삭제하는 방법
DROP SEQUENCE SEQ1;
 
문제372. 아래의 테이블을 생성하고 아래의 테이블에 번호를 100개를 입력하시오
(1 ~ 100)
 
CREATE TABLE EMP506
(EMPNO NUMBER(10));
 
 
INSERT INTO EMP506 VALUES (SEQ1.NEXTVAL);          -----------------       100 반복
 
문제373. 아래와 같이 시퀀스를 생성하면 시퀀스의  파라미터들에 대해서
default 어떻게 되는지 확인 하시오
 
create sequence seq373;
 
select *
from user_sequences;
 
 
 시퀀스 수정하는 방법
select *
from user_sequences;
create sequence seq5
start with 1
inCrement by 1
maxvalue 200
nocyCle;
 
 
 
 
select *
  from user_sequences
where sequence_name= 'SEQ5';
 
    1. 시퀀스 seq5 maxvalue 1000으로 변경하겠다.
 
 
alter sequence seq5
maxvalue 1000;
 
 
문제374. 시퀀스 seq5 increment by 2 변경하고
cache 200으로 변경하고 순환여부를 cycle 바꾸시오
 
alter sequence seq5
increment by 2
cache 200
cycle;
 
 
  start with 옵션은 alter sequence 명령어로 변경 못한다.(p11-32)
 
 
문제375. 지금까지 만들었던 시퀀스를 모두 삭제하시오 !
 
select sequene_name from user_sequences;
 
    1. 데이터 사전
    1. 내가 만들었던 테이블들을 확인하는 방법:           user_tables
    2. 내가 만들었던 view들을 확인 하는 방법:               user_views
    3. 내가 만들었던 index들을 확인하는 방법 :              user_indexes
    4. 내가 만들었던 sequene들을 확인하는 방법 :        user_sequences
 
 
 
    1. 11 목차
      • VIEW
      • INDEX
      • SEQUENCE
      • SYNONYM   ----------->   동의어
 
    1. 유저생성과 권한 부여
create user king
identified by tiger;
 
grant connect to king;
 
 
설명 : 패스워드를 tiger 하는 king 유저를 생성하고 king 유저에게
접속할  있는 권한을 부여 
 
 
문제376. scott유저에서 ctas를 이용해서 emp 테이블을 모두 쿼리한
결과를 테이블로 생성하시오 ( 테이블명 : emp500 )
 
 
 
 
    create user king
identified by tiger;
 
grant connect to king;
   
   
create table emp500
as select * from EMP;
 
select * from emp500;
 
grant select on emp500 to king;
 
commit;
 
select * from emp500;
 
 
king 유저에서 emp500 select 해보시오~~
 
 
select * from scott.EMP500;
 
 
SCOTT.EMP500 대한 SYNONYM 생성하시오 !
 
 
    CREATE PUBLIC SYNONYM EMP
    FOR SCOTT.EMP500;
 
 
문제377. SCOTT  DEPT 테이블을 SELECT   있는 권한을 KING에게 부여하고 KING 유저가 아래와 같이
DEPT 테이블을 SELECT   있도록 하시오
 
 
grant select on DEPT to king;
CREATE PUBLIC SYNONYM DEPT
FOR SCOTT.DEPT;
commit;
 
   
   
문제 378. SCOTT 만들었던 모든 SYNONYM  삭제하시오
 
 
 
    DROP PUBLIC SYNONYM DEPTOP-    DROP PUBLIC SYNONYM EMP500    ;
 
select synonym_name
  from user_synonyms;
 
drop public synonym
 
    1. NCS 시험 제출
      • 쪽지시험 ( 오픈 , 실습, 시간제한 )
      • SQL 포트폴리오
 
 
 1. 유저 엑세스 제어
 
    1. 1 목차
    1. 유저생성
    2. 패스워드 변경하는 방법
    3. 시스템 권한
    4. 객체 권한
    5.  사용법
 
 
 
 
SQL> alter user scott
  2  account unlock;
 
사용자가 변경되었습니다.
 
SQL> alter user scott
  2  identified by tiger;
 
사용자가 변경되었습니다.
 
SQL>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

'SQL 기본' 카테고리의 다른 글

엔터티란(Entity)  (0) 2022.10.06
10장 DDL문을 사용해서 테이블을 생성 및 관리  (0) 2017.09.07
9장 데이터 조작 언어 (DML문)  (0) 2017.09.07
8장 집합 연산자 사용  (0) 2017.09.07
7장 Subquery 사용  (0) 2017.09.07