14장 뷰.

Slides:



Advertisements
Similar presentations
널 (null) 의 처리 널을 검색하는 방법 형식 예 ) takes 테이블에서 아직 학점이 부여되지 않은 학생의 학번을 검색 is null is not null ( 질의 64) select stu_id from takes where grade is null.
Advertisements

다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
SQL 언어 SQL.
PowerBuilder Stored Procedure DW
데이터베이스 9주차 : 데이터베이스 설계 2교시 : 데이터베이스 설계(3)
Allow reverse scans allow reverse scnas. allow reverse scans allow reverse scnas.
Nested Queries CSED421: Database Systems Labs.
웹 프로그래밍 HTML, 자바스크립트, ASP를 중심으로
오라클 데이터베이스 성능 튜닝.
소리가 작으면 이어폰 사용 권장!.
데이터 모델링 방법론 2003년 03월.
PL/SQL.
Proc*C 기초 Style System 김도형.
질의어와 SQL 기본 SQL 고급 SQL 데이타의 수정 데이타 정의 언어 내장 SQL
관계 대수와 SQL.
대용량 데이터베이스 솔루션 발표자: 박보영 2007년 5월19일.
오라클 데이터베이스 성능 튜닝.
DataBase 기본 교육 신입사원용 최지철.
Database & Internet Computing Laboratory 한 양 대 학 교
박시우 ( 업무에 바로 쓰는 SQL 튜닝 박시우 (
Chapter 5 SQL: 확장된 질의, 주장, 트리거, 뷰.
제 5 장 인덱스 생성 및 관리.
Section II. 웹 취약점의 공격과 방어 3. 웹 취약점 분류 4. SQL Injection 5. XSS
SQL*Plus - Oracle ISQL -
SELECT 문 사원 테이블의 모든 정보를 출력하는 예제 1. 비교 연산자 SELECT 문의 형태
4장. 관계 대수와 SQL SQL 관계 데이터 모델에서 지원되는 두 가지 정형적인 언어
JDBC 프로그래밍 이수지 이동주 1.
7장 조인.
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
DBMS실습(I) 데이터베이스 기본개념 2015년 1학기 동서울대학교 컴퓨터소프트웨어과.
You YoungSEok 고급 SQL You YoungSEok
SQL 개요 SQL 개요 - SQL은 현재 DBMS 시장에서 관계 DBMS가 압도적인 우위를 차지하는 데 중요한 요인의 하나
10장. 데이터베이스 보안과 권한 관리 데이터베이스 보안과 권한 관리
데이터베이스 담당교수 신정식 Chapter 4 SQL(1).
8장 서브 쿼리.
12장 데이터 읽기 일관성과 락.
11장. 데이터베이스 서버 구축과 운영.
요약 정보 만들기.
오라클 데이터베이스 성능 튜닝.
kHS 데이터베이스 테이블 및 인덱스 kHS.
데이터 베이스 설계 및 실습 #3 - SQL 함수.
4.2 SQL 개요 SQL 개요 SQL은 IBM 연구소에서 1974년에 System R이라는 관계 DBMS 시제품을 연구할 때 관계 대수와 관계 해석을 기반으로, 집단 함수, 그룹화, 갱신 연산 등을 추가하여 개발된 언어 1986년에 ANSI(미국 표준 기구)에서 SQL.
I. SQL 성능 향상 가이드.
14 뷰(View) 뷰의 개념 뷰 관리.
뷰와 저장 프로시저 뷰의 개념을 이해한다. 뷰의 정의와 관리 방법을 이해한다. 뷰를 사용함으로써 생기는 장점을 알아본다.
SELECT empno, ename, job, sal, dname FROM emp, dept
16장. 테이블의 변경 새로운 행 삽입 테이블에서 테이블로 행을 복사 행 값의 변경 테이블에서 행 삭제
3장 SQL*Plus 명령어.
9장 테이블 생성 및 변경, 삭제하기(DDL).
SQL.
YOU Youngseok 트랜잭션(Transaction) YOU Youngseok
Quiz #1.
강사: 이종인 다우 교육원 전임강사 / 온디멘드 수석 컨설턴트 / FMG 수석 컨설턴트
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
다양한 예제로 쉽게 배우는 오라클 SQL 과 PL/SQL
고급 T-SQL.
CHAPTER 06. 데이터베이스 자료의 조직적 집합체_데이터베이스 시스템의 이해
13장 무결성 제약조건.
정보처리기사 8조 신원철 양진원 유민호 이기목 김다연 윤현경 임수빈 조현진.
View(뷰) 1 가상 테이블(Virtual Relation)
Database 중고차 매매 DB 비즈니스IT 윤동섭.
오라클 쿼리 문제 EMP (사원 테이블) DEPT (부서 테이블) 컬럼명 설명 EMPNO 사원번호 ENAME 사원명 JOB
기본적인 SELECT문 작성.
8장 테이블의 생성 및 변경 정인기.
15 사용자 권한 제어 데이터베이스 보안 권한 롤 동의어.
06. SQL 명지대학교 ICT 융합대학 김정호.
테이블 관리 테이블 생성,수정,삭제 데이터 입력 수정, 삭제 2010학년도 2학기.
Stored program 장종원
Presentation transcript:

14장 뷰

목 차 뷰란? 뷰의 내부구조 뷰를 사용하는 이유 뷰의 종류 뷰의 제거 뷰의 변경 실습 준비과정 뷰의 내부구조 뷰를 사용하는 이유 뷰의 종류 단순 뷰와 컬럼 별칭 복합 뷰 뷰의 제거 뷰의 변경 뷰의 생성시 지정하는 FORCE/NOFORCE 옵션 With Check Option With Read Only 인라인 뷰 Top-N 분석

뷰 뷰란? 물리적인 테이블을 근거한 논리적인 가상 테이블 기본 테이블에서 파생한 객체 기본 테이블에 대한 하나의 쿼리문 주어진 뷰를 통해서 기본 테이블을 제한적으로 사용. 가상 테이블 : 실질적으로 데이터를 저장하고 있지 않음. 마치 테이블을 사용하는 것과 같이 뷰를 사용할 수 있음

실습을 위한 준비과정 - 주간 System 으로 접속해서 Scott의 emp, dept 테이블을 조회할수 있는 권한을 scott_j에게 부여 SQL>Conn system/soft SQL>GRANT select on scott.emp TO scott_j; SQL>GRANT select on scott.dept TO scott_j; Scott의 dept, emp를 이용 복사 테이블인 dept_copy, emp_copy 생성 SQL> conn scott_j/tiger SQL> CREATE TABLE dept_copy AS SELECT * FROM scott.dept; SQL> CREATE TABLE emp_copy AS SELECT * FROM scott.emp; SQL> SELECT * FROM dept_copy; SQL> SELECT * FROM emp_copy; 앞에서 수행했으면 안해도 됨.

실습을 위한 준비과정- 야간 System 으로 접속해서 Scott의 emp, dept 테이블을 조회할수 있는 권한을 scott_y에게 부여 SQL>Conn system/soft SQL>GRANT select on scott.emp TO scott_y; SQL>GRANT select on scott.dept TO scott_y; Scott의 dept, emp를 이용 복사 테이블인 dept_copy, emp_copy 생성 SQL> conn scott_y/tiger SQL> CREATE TABLE dept_copy AS SELECT * FROM scott.dept; SQL> CREATE TABLE emp_copy AS SELECT * FROM scott.emp; SQL> SELECT * FROM dept_copy; SQL> SELECT * FROM emp_copy; 앞에서 수행했으면 안해도 됨.

뷰 정의 CREATE VIEW 뷰명 AS select_statement 30번 부서의 사원번호, 이름, 부서번호를 조회하라 SQL> SELECT empno, ename, deptno FROM emp_copy WHERE deptno=30; SQL>CREATE VIEW emp_view30    AS    SELECT empno, ename, deptno FROM emp_copy    WHERE deptno=30; SQL> DESC emp_view30; SQL> SELECT * FROM emp_view30; 서브쿼리를 매번 사용하지 않고 해당 정보를 얻을 수 있음

뷰의 내부구조 SELECT * FROM emp_view30; 뷰는 데이터를 저장하고 있지 않은데도 질의 문을 수행할 수 있는 이유? 기본 테이블인 emp와 연결되어 있음 user_views 데이터 딕셔너리의 text 컬럼에서 확인

뷰의 내부구조 –cont’d 뷰가 기본 테이블을 이용하여 쿼리문을 수행한 것이란 것을 증명 뷰에 행 추가시 뷰와 기본 테이블에 새로운 행 추가. 뷰는 데이터를 저장한 기본 테이블을 볼 수 있도록 한 창임. 기본 테이블의 내용이 바뀐 것이고 그 내용을 뷰라는 창을 통해서 봄. DML 문을 사용하여 뷰를 변경하면 기본 테이블이 변경됨.

뷰의 내부구조 –cont’d user_views 데이터 딕셔너리 조회 SQL> DESC user_views SQL> SELECT view_name, text FROM user_views; 1행을 입력하고 뷰와 기본테이블 조회 SQL> INSERT INTO emp_view30 VALUES (1111, ‘AAAA’, 30); SQL> SELECT * FROM emp_view30; SQL> SELECT * FROM emp_copy; SQL> SELECT * FROM scott.emp; Text : view 를 정의하는 서브쿼리문 저장 DML에 의해 기본테이블도 뷰와같은 결과 복사전 원래 테이블은 변화 없음.

뷰와 테이블의 차이 뷰가 테이블과 다른 것은 emp_copy 는 emp를 복사한 테이블이므로

뷰를 사용하는 이유 복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화시킴. 보안에 유리. 사원 테이블의 전체 내용 조회 복잡하고 긴 쿼리문을 뷰로 정의하면 접근을 단순화시킴. 보안에 유리. 사원 테이블의 전체 내용 조회 SQL> SELECT * FROM emp_copy; 사원 테이블을 이용한 뷰 생성 SQL> CREATE VIEW emp_view AS SELECT empno, ename, job, mgr, hiredate, deptno FROM emp_copy; 뷰를 통한 사원테이블 내용 조회 SQL> SELECT * FROM emp_view;

뷰를 사용하는 이유 : 보안 뷰를 사용하여 하나의 테이블을 여러 용도로 사용 가능.

뷰의 종류 단순 뷰/복합 뷰 - 기본 테이블의 개수에 따라 단순 뷰 복합 뷰 기본 테이블이 한 개인 경우 DML문 실행 가능 생성되는 뷰의 컬럼명을 명시하지 않으면 기본테이블명 상속 복합 뷰 기본 테이블이 여러 개인 경우

컬럼 별칭 생성되는 뷰의 컬럼명을 명시해서 사용 생성되는 뷰의 컬럼명을 명시해서 사용 SQL> CREATE VIEW emp_view10(사원번호, 이름, 부서번호) AS SELECT empno, ename, deptno    FROM emp_copy    WHERE deptno=10; SQL> SELECT * FROM emp_view10; SQL> DESC emp_view10

함수를 포함한 뷰 함수에 대해서는 컬럼 별칭을 부여해서 뷰 생성. 사원테이블에서 부서별 급여 총계를 구하는 뷰 생성 SQL> CREATE VIEW dept_sum   AS   SELECT deptno, SUM(sal)   FROM emp_copy   GROUP BY deptno; 오류 : 함수에 대한 별칭이 없음 SQL> CREATE VIEW dept_sum   AS   SELECT deptno, SUM(sal) sum_sal   FROM emp_copy   GROUP BY deptno;

함수를 포함한 뷰 –cont’d 함수를 포함하여 생성된 뷰에 DML 문을 적용하면 오류 발생 예) sum_sal 컬럼은 기본 테이블에는 존재하지 않는 컬럼이므로 데 이터 입력은 이치에 맞지 않음 뷰의 내용 조회 SQL> SELECT * FROM dept_sum; 뷰에 값 입력 SQL> INSERT INTO dept_sum VALUES (40, 3000);   오류 발생

복합뷰 기본 테이블이 여러 개인 경우 복합 뷰의 사용용도 두 개 이상의 테이블을 조인하는 경우 뷰로 정의하면 편리함. 사원번호, 이름, 부서명으로된 뷰 생성 SQL>CREATE VIEW emp_view_join AS SELECT e.empno, e.ename, d.dname FROM emp_copy e, dept_copy d WHERE e.deptno = d.deptno;  SQL>SELECT * FROM emp_view_join;  

뷰 제거 뷰의 제거 DROP VIEW view_name user_views 데이터 딕셔너리 조회 SQL> SELECT view_name, text FROM user_views; 뷰의 삭제 SQL> DROP VIEW emp_view30; SQL> DROP VIEW emp_view10; SQL> DROP VIEW emp_view; 기본 테이블에는 영향 없음.

뷰 변경 뷰의 변경은 해당 뷰를 삭제하고 다시 생성 가능. 뷰의 삭제 및 생성, 조회 SQL> DROP VIEW dept_sum; SQL> CREATE VIEW dept_sum AS SELECT deptno, SUM(sal) sum_sal, AVG(sal) avg_sal FROM emp_copy GROUP BY deptno; SQL> SELECT * FROM dept_sum; user_views 데이터 딕셔너리 조회 SQL> SELECT view_name, text FROM user_views;

뷰 변경 –cont’d CREATE OR REPLACE VIEW view_name AS select_statement 기존의 뷰이름을 사용해서 재 생성 SQL> CREATE OR REPLACE VIEW emp_view_join AS SELECT e.empno, e.ename, d.dname FROM emp_copy e, dept_copy d WHERE e.deptno = d.deptno; SQL> SELECT view_name, text FROM user_views;

FORCE/NOFORCE 옵션 NOFORCE 옵션 FORCE 옵션 뷰의 생성시 존재하는 기본 테이블을 이용한 쿼리문으로 생성해야 함. FORCE 옵션 기본 테이블이 존재하지 않는 경우에도 경고와 함께 뷰 생성.

FORCE/NOFORCE 옵션 –cont’d SQL>CREATE OR REPLACE VIEW view_employees AS SELECT * FROM employees; 오류: 테이블이 존재하지 않음 SQL>CREATE OR REPLACE FORCE VIEW view_employees AS SELECT * FROM employees; SQL> SELECT view_name, text FROM user_views; 경고 : 컴파일오류와 함께 뷰 생성 View_employees 뷰 생성 확인

WITH CHECK OPTION 부서번호 20인 사원으로만 emp_view20 생성 SQL>CREATE OR REPLACE NOFORCE VIEW emp_view20 AS SELECT empno, ename, deptno FROM emp_copy WHERE deptno=20; 7369번 사원의 이름 수정 및 조회 SQL>UPDATE emp_view20 SET ename=‘SOFT’ WHERE empno=7369; SQL> SELECT * FROM emp_view20; 7369번 사원의 부서번호 수정 및 조회 SET deptno=40 SQL> SELECT * FROM emp_copy ; 20번 부서 직원만 조회됨 emp_copy 확인 (7369번의 deptno=40) 기본테이블이 존재하는 경우만 뷰 생성 40번 부서로 수정 가능

WITH CHECK OPTION WITH CHECK OPTION : where조건에 사용된 컬럼 값을 변경 불가 SQL>CREATE OR REPLACE NOFORCE VIEW emp_chk20 AS SELECT empno, ename, deptno FROM emp_copy WHERE deptno=20 WITH CHECK OPTION; 부서번호는 변경 불가 SQL> SELECT view_name, text FROM user_views; 7369번 사원의 이름 수정 및 조회 SQL>UPDATE emp_chk20 SET ename=‘SOFT’ WHERE empno=7566; SQL> SELECT * FROM emp_chk20; 7369번 사원의 부서 수정 및 조회 SET deptno=40 오류 : 부서번호 변경은 with check option 에 위배

WITH READ ONLY With read only 옵션 : 기본 테이블의 내용 변경 불가. , DML문(Update, Insert, Delete)도 수행 불가 SQL> CREATE OR REPLACE NOFORCE VIEW emp_chk30 AS SELECT empno, ename, deptno FROM emp_copy WHERE deptno=30 WITH READ ONLY; SQL>UPDATE emp_chk30 SET ename=‘SOFT’ WHERE empno=7499; 오류 : 가상열 사용 불가 Emp_chk30은 읽기만가능, 수정불가

인라인 뷰 인라인 뷰 메인 쿼리문의 FROM절 내부(테이블명)에 사용된 서브 쿼리문 서브 쿼리는 별칭이 부여되며 이 별칭이 뷰. 부서별 가장 최근에 입사한 사원보다 먼저 입사한 사원의 정보 SQL>SELECT src.empno, src.ename, src.hiredate, src.deptno, max_hiredate   FROM emp_copy src, ( SELECT deptno, MAX(hiredate) max_hiredate                           FROM emp_copy                          GROUP BY deptno)  des   WHERE src.deptno=des.deptno AND src.hiredate < des.max_hiredate; 인라인뷰

Top-N 분석 SQL> SELECT rowid, rownum, empno FROM emp_copy; 컬럼 의미 rowid 주소로서 row가 실제로 저장되어있는 (Tree형 구조) 고유주소 rownum row의 출력 순서대로 부여되는 serial No. 급여를 내림차순으로 정렬한 사원테이블을 인라인뷰로 구성 SQL> SELECT rownum, ename, sal FROM ( SELECT ename, sal FROM emp_copy ORDER BY sal DESC ); 인라인 뷰

Top-N 분석 급여를 가장 많이 받는 3명을 구하는 예제 SQL> SELECT rownum, ename, sal FROM ( SELECT ename, sal FROM emp_copy ORDER BY sal DESC ) WHERE rownum <= 3; 인라인 뷰 가장 최근에 입사한 직원 5명에 대한 정보 출력 SQL> SELECT rownum, empno, ename, hiredate FROM ( SELECT empno, ename, hiredate FROM emp_copy ORDER BY hiredate DESC ) WHERE rownum <= 5;