Joslynn의 하루

MSA Full-Stack 개발자 양성 과정 -24일차 노트 필기_데이터베이스(Oracle) Rownum, View_220824 본문

MSA Full-Stack 개발자 양성과정/데이터베이스(Oracle)

MSA Full-Stack 개발자 양성 과정 -24일차 노트 필기_데이터베이스(Oracle) Rownum, View_220824

Joslynn 2022. 8. 25. 01:16

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)

 

Comments