11장 . 기타 스키마 객체
SQL 기본2017. 9. 7. 03:13
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) " 데이터의 품질을 높이기 위해서"
- primary key
- unique
- not null
- check
- foreign key
-
Database object 5가지
- table -->행과 열로 이루어진 데이터를 저장하는 기본 저장단위
-
Database object 5가지
- 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 절에 조건을 주는 조건
- 문자 > ' '
- 숫자 > 0
- 날짜 < 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. single row subqeury
2. multiple row subquery
3. multiple column subquery
- 집합연산자 4가지 : uninon all , union, minus , intersect
-
레포팅 함
- rollup
- grouping sets
- grouping
- cube
-
DML 문장
- INSERT
- UPDATE
- DELETE
- MERGE
-
DML 문장
- DDL 문장 : CREATE, ALTER, DROP, TRUNCATE, RENAME
- 제약 : PRIMARY KEY, UNIQUE, CHECK , NOT NULL, FOREIGN KEY
-
DB OBJECT 5가지
- TABLE
- VIEW
- INDEX --------------> 데이터 검색 속도를 높이는 DB오브젝트
- SEQUENCE
- SYNONYM
■ 인덱스 (INDEX) 구조
- 컬럼값 + ROWID (ROW의 구조)
- 컬럼값이 ASCENDING 하게 정렬이 되어있다.
- 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';
- 어느 컬럼에 인덱스가 있는지 확인 하고자 한다면
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');
- 11장 목차
- VIEW
- INDEX
- SEQUENCE
- SYNONYM
■ SEQUENCE ~> 번호를 생성하는 데이터 베이스 오브젝트
- 시퀀스 (SEQUENCE) 가 왜 필요한가?
" 특정 테이블에 번호를 순서대로 입력하기 위해서 필요하다"
예 : 특정과목에 수강신청을 하는데 30명 정원인 경우
테이블에 30명만 입력되게 하고 번호가 순서대로
수강신청번호가 생성되게 입력하고 싶을때 필요해
- 시퀀스 생성
CREATE SEQUECE SEQ1
START WITH 1 ----시작숫자
INCREMENT BY 1 ----증가치
MAXVALUE 100 ----최대숫자
MINVALUE -100 ----최소숫자 (순환시 사이클이 끝까지 가면 다시 -100)
NOCYCLE ---- 순환여부
CACHE 20 ; --- 시퀀스의 번호를 빨리 사용하기 위해 번호 20개를 미리 생성해서 메모리에 올려놓음
- 시퀀스를 사용하는 방법
SELECT SEQ1.NEXTVAL
FROM DUAL;
- 시퀀스를 삭제하는 방법
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';
- 시퀀스 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;
- 데이터 사전
- 내가 만들었던 테이블들을 확인하는 방법: user_tables
- 내가 만들었던 view들을 확인 하는 방법: user_views
- 내가 만들었던 index들을 확인하는 방법 : user_indexes
- 내가 만들었던 sequene들을 확인하는 방법 : user_sequences
- 11장 목차
- VIEW
- INDEX
- SEQUENCE
- SYNONYM -----------> 동의어
- 유저생성과 권한 부여
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
- NCS 시험 제출
- 쪽지시험 ( 오픈 북, 실습, 시간제한 )
- SQL 포트폴리오
■ 1장. 유저 엑세스 제어
- 1장 목차
- 유저생성
- 패스워드 변경하는 방법
- 시스템 권한
- 객체 권한
- 롤 사용법
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 |