MSA Full-Stack 개발자 양성 과정 -24일차 노트 필기_데이터베이스(Oracle) Rownum, View_220824
Rownum
: 레코드의 순서를 자동으로 만들어준다. 즉, 레코드의 행 번호를 만들고 싶을 때 사용
: Rownum을 사용할 때, 인라인 뷰가 많이 쓰여진다.
**인라인 뷰
: SUBQUERY의 종류 중 하나인 인라인뷰
: FROM 절 뒤에 서브쿼리가 오는 것을 인라인 뷰라고 한다.
-- EX) 급여를 기준으로 정렬해서 ROWNUM을 출력하고 싶다.
SELECT ROWNUM 번호, EMPNO, ENAME, JOB, SAL
FROM EMP
ORDER BY SAL;
**주의사항
Rownum
: Select 절 실행에 따라 레코드가 만들어지면서 번호가 순차적으로 부여되는 것으로 Rownum 1이 없으면 2가 실행될 수 없다.
: 따라서, Rownum을 가지고 조건을 줄 때, ~보다 작다 또는 1부터 조건을 사용해야 한다.
: ~보다 크다 또는 중간에 있는 Rownum을 조건으로 사용하고 싶을 때 인라인 뷰를 사용해야 한다.
--EX) ~보다 크다라는 조건식에 ROWNUM을 사용할 때
-- ROWNUM을 만든 테이블을 인라인뷰로 다시 만들어서 조건을 검색한다.
SELECT *
FROM (SELECT ROWNUM 번호, EMPNO, ENAME, JOB, SAL
FROM (SELECT * FROM EMP ORDER BY SAL DESC))
WHERE 번호 > 3;
/* WHERE 절에 ROWNUM 그대로 사용하면 인라인뷰 외부의 SELECT 절 ROWNUM이라고 여기기 때문에
인라인뷰 내부의 ROWNUM에 별칭 붙여야 함*/
View
: 가상테이블
- 실제 존재하지 않지만 실제 테이블과 똑같이 사용함 (select , insert , delete, update 가능)
: 생성할 때 옵션을 어떻게 설정하느냐에 따라 DML 여부가 달라진다.
: JOIN을 뷰로 만들었을 때는 DML 안됨
- 사용 이유
: 복잡한 쿼리문을(조인, 서브쿼리)미리 뷰로 만들어 사용하면 간단하게 검색 가능함.(단,insert , delete, update 안됨)
: 보안을 위해 사용함(관리자 유형에 따라 특정 컬럼 만 선택하여 보여줌)
- 테이블의 특정한 컬럼과 레코드를 선택해서 뷰를 만들어 권한에 제한이 있는 DBA에게 원본 테이블이 아니 뷰의 이름 을 알려줌으로써 DBA는 뷰만 접근할 수 있도록 제한
- 뷰 생성 방법
CREATE VIEW 뷰이름
AS 뷰의내용;
--뷰 수정
CREATE OR RELACE VIEW VIEW 뷰이름
AS 뷰의내용;
-- ** REPLACE: 뷰의 내용 교체
-- 뷰 삭제
DROP VIEW 뷰이름;
**뷰를 생성하는 옵션 설정
1) WITH CHECK OPTION : 뷰를 생성할 때, 조건을 이용해서 만들게 되면, insert , delete, update를 할 때 조건에
충족하지 않는 정보는 DML을 할 수 없도록 하는 것
2) WITH READ ONLY: 읽기 전용(데이터 조작X)