이안의 평일코딩

Oracle 15일차 - 인라인뷰 본문

Back-end/Oracle

Oracle 15일차 - 인라인뷰

이안92 2020. 8. 25. 09:33
반응형

2020.08.25(화)

 

VIEW => 페이징 (인라인뷰)

 

VIEW, SUBQUERY

PL/SQL (Function, Procedure, Trigger)

INDEX

=> VIEW : 기존의 테이블에서 필요한 데이터를 모아서 관리

메모리에 저장되는 과정이 아니고 가상으로 저장

=> 가상 테이블 (보안이 좋다)

=> SQL문장을 단순화할 수 있다

 

종류)

 = 단순뷰 : 한개의 테이블을 참조

 = 복합뷰 : 여러개의 테이블 참조 (JOIN, SubQuery)

 = 인라인뷰 (TOP-N)

    FROM SELECT~

 = ALTER를 사용할 수 없다

 = 삭제 : DROP VIEW view명

 = 저장, 수정이 가능 => View에서 수정이나 삭제가되는 것이 아니라

                                 참조테이블에서 변경

 = READ ONLY => DML을 사용할 수 없다

 = SELECT만 사용해서 데이터만 볼 수 있게 만든다

 형식)

 CREATE [OR REPLACE] VIEW view명

 AS SELECT~

 

=> CREATE (TABLE제작), PL/SQL (Function), VIEW

=> DML (INSERT, SELECT, DELETE, UPDATE) => 웹프로그램

 

CREATE VIEW dept_view AS SELECT * FROM dept;

SELECT * FROM dept_view;

INSERT INTO dept_view VALUES(50, '영업부', '서울');

SELECT * FROM dept;

DROP VIEW dept_view;

CREATE VIEW dept_view AS SELECT * FROM dept WITH READ ONLY;
--SELECT만 가능해짐 (INSERT, UPDATE, DELETE 불가능)
CREATE VIEW emp_dept_view AS SELECT empno, ename, job, hiredate, mgr, comm, sal, dname, loc FROM emp, dept WHERE emp.deptno=dept.deptno;

SELECT * FROM emp_dept_view;

DROP VIEW emp_dept_view;

CREATE OR REPLACE VIEW emp_dept_view AS SELECT empno, ename, job, dname, loc FROM emp, dept WHERE emp.deptno=dept.deptno;

INSERT INTO student VALUES(1, '홍길동', 80, 90, 75);
INSERT INTO student VALUES(2, '심청이', 82, 80, 77);
INSERT INTO student VALUES(3, '강감찬', 67, 89, 56);
INSERT INTO student VALUES(4, '을지문덕', 100, 80, 95);
INSERT INTO student VALUES(5, '이순신', 56, 89, 60);
COMMIT;
SELECT * FROM student;
CREATE OR REPLACE VIEW student_view(hakbun,name,kor,eng,math,total,avg,rank)
AS SELECT hakbun, name, kor, eng, math, kor+eng+math, ROUND((kor+eng+math)/3.0,2),
RANK() OVER(ORDER BY (kor+eng+math) DESC) FROM student;
SELECT * FROM student_view;

 

rownum : 자동 지정번호 (오라클에서 지정하는 컬럼명)

SELECT empno, ename, rownum FROM emp;
SELECT empno, ename, rownum FROM emp WHERE rownum<=5;

-- 급여가 높은 사람 상위 5개만 출력(인라인 뷰, 테이블대신에 select가 들어감)
SELECT empno, ename, sal, rownum FROM (SELECT empno, ename, sal FROM emp ORDER BY sal DESC) WHERE rownum<=5;
-- 페이지 나누기
SELECT empno, ename, sal, rownum FROM (SELECT * FROM emp ORDER BY sal DESC) WHERE rownum BETWEEN 6 AND 10; --오류

SELECT empno, ename, sal, num FROM (SELECT empno, ename, sal, rownum as num FROM (SELECT empno, ename, sal FROM emp ORDER BY sal DESC)) WHERE num BETWEEN 6 AND 10;
반응형
Comments