본문 바로가기
프로그래밍/데이터베이스

[SQL 기초 - 14장] 오라클 뷰, view 사용 이유, 시퀀스, 인덱스(1)

by 잡학다방 2024. 12. 19.
반응형

안녕하세요! 

밀린 과제처럼 업로드를 하려고 열심히 글을 작성하고 있습니다..ㅎ

요즘 너무 바쁘지만 그래도 화이팅해서 내용 전달 해보겠습니다!

오늘은 뷰(view) 와 시퀀스(sequence) 그리고 인덱스(index) 에 대해서 알아보려고 합니다.

자바와 마찬가지로 오라클에도 객체의 개념이 있습니다.

오라클 객체 및 view​

1. table : 데이터를 저장할 수 있는 공간

2. view : SQL => 실제 데이터가 존재하는 것이 아님.

논리적인 데이터 집합의 정의

(* view table 은 잘못된 표현이에요!)

view 생성방법

view 부터 살펴 보겠습니다.

문법 먼저 보면

위와 같이 작성 할 수 있습니다.

테이블과 인덱스도 동일한 문법을 갖추고 있습니다.

그럼 view 를 한 번 생성해 보겠습니다.

emp 테이블에서 급여 정보인 sal, comm 컬럼을 제외하고

나머지 6개 컬럼만 조회할 수 있는 SELECT 쿼리를

v_emp 이름의 view로 생성ㅎ..........ㅏ 기 전에..!!

view를 생성하려면 접속해있는 계정에 view 생성 권한이 필요한데요,

system 계정이 아닌 다른 계정을 사용하고 계시다면

system 계정에 가서 사용하는 계정에게 권한을 줘야 합니다.

먼저 system 계정으로 SQL 워크시트를 하나 열고,

GRANT CREATE VIEW TO tdkim

 

위와 같이 작성하고 엔터 눌러 주겠습니다.

그 다음에 COMMIT; 까지 해주시면 다음부터는 권한을 줄 필요가 없겠죠?

다시 원래 사용하던 계정의 워크시트로 넘어와서 view를 생성해보죠.

위 처럼 작성해주시면 되는데

OR REPLACE 는 생성하고자 하는 view 의 이름과 동일한 view 가 존재하면

대체하겠다는 의미로 사용하는데 없어도 무방합니다.

view 는 일반 SELECT 절로 테이블을 조회하는 것 처럼

view 이름으로 조회할 수 있습니다.

위의 쿼리로 방금 만든 view 와 동일한 테이블처럼 조회할 수 있는데

view를 만드는 이유는 뭘까요?

여기에서 알 수 있는 view 의 이점!!

1. 코드를 재사용 할 수 있다.

2. SQL 코드가 짧아진다.

그리고 아까처럼 생성권한을 줄 수 있지만,

조회 권한만 줄 수도 있습니다.

똑같이 system 계정에 들어가서

 
GRANT SELECT ON v_emp TO tdkim;

 

이렇게 작성하시면 조회만 가능하죠.

view 사용 이유

만약 emp 테이블이 있다면

거기에 있는 sal 나 comm 을 다른사람들이 보면 기분이 나쁠 수가 있어요.

그래서 그것들을 제외한 나머지만 view로 만들어서

view를 조회 할 수 있는 권한만 준다면

관리자 외에는 sal 과 comm 을 볼 수 없겠죠?

emp 테이블에 있는 정보인데 v_emp 에는 그 정보가 없으니까요.

따라서 view 는 비 관련자로부터 정보에 대한 접근도 제한 할 수 있습니다.

아까 제가 view table 은 잘못된 표현이라고 한 것 기억나시나요?

아까 만든 v_emp view가 있죠?

그런데 만약에 emp 테이블에 신규 사원 데이터를 입력을 했습니다.

그럼 emp 테이블은 기존 14건 에서 15건으로 늘어나겠죠.

그렇다면 v_emp view 의 결과는 몇건이 조회가 될까요??

정답은 똑같은 15건 입니다.

view 는 실체가 없는 데이터 집합을 정의하는 SQL 이기 때문에

해당 SQL에서 사용하는 테이블의 데이터가 변경이 되면

view 에도 영향을 미치게 됩니다.

view 는 실체가 없는 데이터 집합!

기억해 두세요!

그리고 view 는 SQL 이기 때문에 조인된 결과나,

그룹함수를 적용하여 행의 건수가 달라지는 SQL 도 view 로 생성하는 것이 가능합니다.

예를 들면,

emp, dept 테이블의 경우 업무상 자주 같이 쓰일 수 밖에 없는 테이블입니다.

따라서 이 두 테이블을 조인하여

부서명, 사원번호, 사원이름, 담당업무, 입사일자의

다섯개 컬럼을 갖는 viewv_emp_dept 로 생성하면

매번 조인하지 않고 바로바로 조회 할 수 있습니다.

 

위와 같이 작성하시면 됩니다.

처음에 view 생성 문법을 사용하고, 지난번에 배웠던 CTAS 구문을 사용해서

SELECT 이하 절에 조인 조건을 걸어서 테이블을 합치는 것이죠.

 

(CTAS 기억 안나시면 ↑↑↑↑↑↑ 확인하세요!!)

view 의 문법, 기능, 이점들 정리 하시길 바랍니다.

시퀀스​

다음으로는 시퀀스 입니다.

시퀀스란 중복되지 않는 정수값을 반환해주는 오라클 객체입니다.

시작값부터 1씩 순차적으로 증가한 값을 반환합니다.

시작값은 default 값으로 1이 들어가고

혹은 개발자가 설정 가능합니다.

​시퀀스 생성방법

문법은 간단합니다.

시퀀스를 생성 해보겠습니다.

위처럼 seq_emp 라는 시퀀스를 생성했습니다.

시퀀스 사용방법

그리고 시퀀스 객체에서 제공하는 함수가 있는데요

nextvalcurrval 이라는 함수입니다.

nextval시퀀스 객체의 다음 값을 요청하는 함수입니다.

함수를 호출하면 시퀀스 객체의 값이 하나 증가하여

다음번 호출시 증가된 값을 반환합니다.

currvalnextval 함수를 사용하고 나서 사용할 수 있는 함수입니다.

nextval 함수를 통해 얻은 값을 다시 확인 할 때 사용합니다.

시퀀스 객체가 다음에 리턴할 값에 영향을 미치지 않아요.

주의 할 점은 'nextval 함수를 사용하고 나서' 사용하는 것이니

currval 함수 먼저 사용하면 에러가 납니다!!

위처럼 nextval 함수를 작성해서 실행하게 되면

이렇게 실행 할 때마다 1씩 증가되어 조회가 됩니다.

그리고 currval 함수를 작성해서 실행하면

이처럼 현재 시퀀스 값이 나오게 됩니다.

인덱스

다음으로 인덱스 입니다.

음.. 오늘은 개념적인 부분만 설명하고

다음에 자세하게 설명하도록 하겠습니다.

먼저 인덱스는 비유를 하자면 책의 목차 같은 녀석입니다.

데이터를 조회할 때 이 인덱스를 이용해서 빠르게 조회할 수 있죠.

인덱스의 특징을 나열해 보자면

1. 테이블의 일부 컬럼을 기준으로 데이터를 정렬한 객체

2. 테이블의 row 를 가리키는 주소를 갖고있다.(rowid)

3. 정렬된 인덱스를 기준으로 해당 row 의 위치를 빠르게 검색하여

테이블의 원하는 행에 빠르게 접근

4. 테이블에 데이터를 입력하면 인덱스 구조도 갱신된다.

5. 인덱스 구성 컬럼이 모두 null 일 경우 해당 row 는 인덱스에 저장되지 않는다.

위와 같은 특징을 가진것이 인덱스 입니다.

오늘은 이정도만 하고 끝내도록 하겠습니다...ㅎ

 

오늘 뷰, 시퀀스, 인덱스에 대해서 알아봤습니다.

제가 드리는 내용이 좋은 내용인지 모르겠네요 ㅎ

그래도 계속해서 열심히 업로드 하겠습니다!

오늘도 끝까지 봐주셔서 감사합니다.

다음에 봐요~

 

반응형