View
물리적 테이블 : 사용자가 CREATE에 의해 생성된 실제 존재하는 테이블
논리적 테이블 : 사용자가 SQL문에 의해 가공된 테이블
1) 정의
- 테이블에 대한 가상의 테이블로써 테이블처럼 직접 데이터를 소유하지 않고 검색시에 이용할 수 있도록 정보를 담고 있는 객체
- 테이블 정보의 부분 집합
2) 사용 목적
- 테이블에 대한 보안 기능을 설정해야 하는 경우
- 복잡하며 자주 사용하는 질의 SQL문을 보다 쉽고 간단하게 사용해야 하는 경우
3) 뷰 생성 권한 부여
- cmd -> sqlplus / as sysdba 입력
- SQL> grant create view to 아이디;
4) 뷰 생성 형식
REPLACE : 이미 존재하는 뷰의 내용을 수정함
1 |
|
5) 뷰 생성하기
CREATE VIEW 뷰이름
1 |
|
6) 뷰 삭제하기
DROP VIEW 뷰이름
1 |
|
7) 테이블,뷰 목록 확인
1 |
|
8) 뷰생성(두번째부터는 수정)
CREATE OR REPLACE VIEW 뷰이름
AS 실제로실행할SQL명령어
1 |
|
9) 뷰의 세부 정보 확인(데이터사전)
1 |
|
서브쿼리
1) 월급을 가장 많이 받는 직원정보 조회
1-1) 최대급여
1 |
|
1-2) 서브쿼리
1 |
|
2) 평균 급여보다 많은 급여를 받는 직원의 이름, 부서명, 급여 조회
2-1) 평균급여
1 |
|
2-2) 서브쿼리
1 |
|
3) 부서코드 10의 최고급여보다 더 많은 급여를 받는 직원목록 조회
3-1) 부서코드 10의 최고급여
1 |
|
3-2) 서브쿼리
1 |
|
4) 손흥민과 같은 입사일에 입사한 직원들중에 박지성보다 급여를 적게 받는 사람의 이름, 급여, 입사일 조회
4-1) 손흥민의 입사일
1 |
|
4-2) 박지성의 급여
1 |
|
4-3) 서브쿼리
1 |
|
프로시저(Procedural)
PL/SQL(Procedural Language) 프로시저
- 절차적인 데이터베이스 프로그래밍 언어
CREATE / READ / UPDATE / DELETE 관련한 프로시저 생성
1) 행 추가 프로시저(CREATE)
1 |
|
2) 행 수정 프로시저(UPDATE)
1 |
|
3) 행 삭제 프로시저(DELETE)
1 |
|
4) 상세보기(READ)
1 |
|
5) 목록(READ)
1 |
|
6) 레코드 갯수 프로시저
1 |
|
7) 검색 프로시저
1 |
|
8) 페이징 프로시저
1 |
|
Index(인덱스)
- 데이터를 빠르게 찾을 수 있는 수단
- 테이블에 대한 조회 속도를 높여 주는 자료속도
- PK칼럼은 자동을 인덱스 생성된다.
- 인덱스 생성
- CREATE INDEX 인덱스이름
- 인덱스 삭제
- DROP INDEX 인덱스이름
- 인덱스 수정
- ALTER INDEX 인덱스 이름
- 인덱스 방식
- 1) full scan
- 처음부터 끝까지 일일이 검사하는 방식 (전수조사)
- 2) index range scan
- 이름이 여러개인 경우 목차를 찾아서 페이지를 찾아감, 훨씬 빠름. 별도의 메모리가 있어야 한다.
- 3) index unique scan
- 학번은 1개만 존재함. 유일한 값
- 1) full scan
- 실행계획보기 F10 (커서위치 중요)
- PRIMARY KEY, UNIQUE 제약조건을 만들면 해당 인덱스 페이지가 자동으로 생성
인덱스 테스트
테스트용 레코드 100만건 입력
1 |
|
기본골격
DECLARE는 일시적으로 선언할때
1 |
|
프로시저 전에는 0 출력, 후에는 1000000
1 |
|
모조칼럼
ROWID : 행의 주소값 / ROWNUM : 행번호
1 |
|
인덱스 사용하지 않은 경우
실행계획 F10 > full scan, cost 894
1 |
|
name 칼럼을 기준으로 인덱스 생성하기
name 칼럼에서 조회하고 F10 계획 결과 확인하기
1 |
|
인덱스 사용한 경우
실행계획 F10 > range scan, cost 3
1 |
|
인덱스 목록
1 |
|
결과값
EMP3_NAME_INDEX EMP3 NONUNIQUE > 중복될수 있음
SYS_C007084 EMP4 UNIQUE > PRIMARY KEY 를 설정했음 그래서 UNIQUE
1 |
|
name 인덱스 삭제 후 테스트
1 |
|
이름과 급여를 기준으로 인덱스 생성
1 |
|
full scan , cost 894
1 |
|
range scan , cost 17
1 |
|
full scan , cost 895
1 |
|
range scan , cost 3
1 |
|
CASE WHEN ~ THEN END 구문
형식
1 |
|
1) 국어점수에 따라 A, B, C, D, F학점 구하기
1 |
|
DECODE() 함수 사용
- 값을 비교하여 해당하는 값을 돌려주는 함수
- 단, 비교시에 정확히 같은 값(=)만 비교가 가능함.
- DECODE(A, B, 같을때의 값, 다를때의 값)
1 |
|
2) addr(주소)칼럼의 주소를 한글로 조회
1 |
|
3) 부서코드 10 경리팀, 20 연구팀, 30 총무팀, 40 전산팀
1 |
|
DECODE() 함수
1 |
|
4) 커미션 5이상 ‘5%’, 4이상 ‘4%’, 3이상 ‘3%’, 2이상 ‘2%’ 나머지 ‘없음’
1 |
|