(오라클) 뷰 + 조인 예제

hr계정에서 자신이 소유한 정부중에서 사원번호, 이름 , 메일주소, 전화번호, 직책명, 부서명을 임의의 사용자(내 경우에선 imsihyun)에게 조회만 가능하도록 권환을 부여하시오
아물로 임의의 사용자 계정으로 접속후 결과를 확인하세요.


먼저 이걸 해석할수 있는 순서를 나눠보자

1. join 하기
2. join 한 view를 만들기
3. 권한 주기

더 디테일하게 선생님이 써주신 글들을 여기 아래다가 써놨다
요구사항을 분석
자료의 접근에 관련된 사항이기때문에->table,view라는 객체가 작업의 대상이 된다.
각각 테이블 또는 뷰에서 원하는 정보를 얻기위해 필요한 객체가 무엇 인지를 파악하자.


고려사항!!!!!!!!!!! 완전 중요!!!
NULL에 대한 고찰이 필요하다!!!!!!!!!!!!!!!! null은 departmentname에 null이란 값이있다.
이게 고려사항이다.

null 무시 -> inner join 하기
null x무시 -> outer join 하기

ansi표준의 쿼리를 통한 조인을 할것인지 결정하자

join에 대해서는 이미 써줬다. 




hr 계정에 있는 우리가 불러와야하는 테이블들은...



employees 테이블 안에있는것들
사원번호 -> employees_id
이름 -> first_name, last_name
메일주소 ->email
전화번호->phone_number

departments 테이블 안에 있는것들
부서명 -> department_name

jobs 테이블 안에 있는것들
job_title


이걸 먼저 다 조인해서 할것이다.


SELECT employees.employee_id, employees.first_name, employees.last_name, employees.email,
departments.department_name,jobs.job_title
FROM employees, departments, jobs
WHERE employees.department_id = departments.department_id and 
employees.job_id = jobs.job_id;

where절에서  employees 와 jobs 와 또 departments 에서 중복된 것들을 = 을 써서 적어준다.

create view sihyun
as
SELECT employees.employee_id, employees.first_name, employees.last_name, employees.email,
departments.department_name, jobs.job_title
FROM employees, departments,jobs
WHERE employees.department_id = departments.department_id;'

선생님이 쓰신건, outer join이다. (난 inner join으로 해놨다)

create or replace view imsiview 
as
select employees.employee_id, employees.first_name, employees.last_name,  employees.email,  employees.phone_number, jobs.job_title, departments.department_name
from employees, departments, jobs

where employees.department_id = departments.department_id(+) 

and employees.job_id = jobs.job_id(+);


sihyun 이란 view를 만들어서 사원번호, 이름 , 메일주소, 전화번호, 직책명, 부서명 만 접근할수 있게 제한한다.

select * from sihyun;

아것을 써서 테이블이 완성 되었나 확인한다.



보이는가? 이렇게 딱 지정된 것만 생성되었다!!!


이제 imsihyun 이라는 계정안에서 불러와야한다.
그러기 위해서는 imsihyun이라는 계정에게 뷰를 볼수 있는 권한을 hr 이 줘야한다.


grant select on sihyun to imsihyun;

select on 은 선택을 하는건데, sihyun이란 뷰를 '볼수만' 있게 해주는거다.

이제 imsihyun 이라는 새로운 계정안으로 들어가자

select * from hr.sihyun; 

hr 계정에 소속되어있는 sihyun이라는 뷰에 있는 모든 데이타를 불러오는것이다.




쨘! 이걸로써 우리는
imsihyun 이란 유저가 hr이 지정해준 테이블만 볼수 있게 만들어 놨다!!


댓글

이 블로그의 인기 게시물

c++ 랜덤 숫자 생성하기 / 컴퓨터 난수 시드 설정

(오라클) View(뷰) + where/order by/like/is/() / in 사용방법 예제

(오라클) Sequence/시퀸스의 활용과 개념