본문 바로가기

자격증/정처기

정처기 실기 파트7

반응형

SQL 응용

I.    데이터베이스 기본

1.   트랜잭션

(1)  트랜잭션(Transaction)

-     개념 : 데이터를 보장하기 위한 특성이자, 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위

-     특성 : ACID

  Atomicity : 분해가 불가능한 작업의 최소단위 / 연산 전체가 성공 또는 실패 / 하나라도 실패 시 전체가 취소

  Consistency : 트랜잭션이 실행 성공 후 항상 일관된 데이터베이스 상태를 보존

  Isolation : 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가능한 특성

  Durability : 성공이 완료된 트랜잭션의 결과는 영속성으로 데이터베이스에 저장

-     상태 변화 : 활부완실철(활동 상태, 부분 완료 상태, 완료 상태, 실패 상태, 철회 상태)

-     제어 : TCL명령어(커롤체) : Commit, Rollback, Checkpoint

-     병행 제어(Concurrency Control) : 일관성 주요 기법

  개념 : DB 일관성 유지를 위한 상호작용 제어 기법

  목적 : DB 공유 최대화, 시스템의 활용도 최대화, DB 일관성 유지, 사용자에 대한 응답시간 최소화

  병행 제어 미보장 시 문제점 : 갱현모연(갱신 손실, 현황 파악오류, 모순성, 연쇄복귀)

  병행 제어 기법의 종류 : 로낙타다(로킹, 낙관적 검증, 타임 스탬프 순서, 다중버전 동시성 제어)

-     데이터베이스 고립화 수준(Isolation Level) : 격리성 주요 기법

  개념 : 무결성을 해치지 않게 잠금 설정

  종류

Read Uncommitted : 연산(갱신)중인 데이터를 읽을 수는 있으나 연산은 불가
Read Committed :
연산 완료 전까지 데이터 읽기 제한
Repeatable Read :
트랜잭션 종료 시 까지 해당 데이터 갱신, 삭제 제한
Serializable Read :
해당 데이터 영역 전체에 대한 접근 제한

-     회복 기법(Recovery) : 영속성 주요 기법

  개념 : 수행 도중 장애로 손상된 데이터베이스를 손상 되기 전 상태로 복구

  종류 : 회로체크

로그 기반 회복 기법 : 지연 갱신 회복 기법(Deferred Update), 즉각 갱신 회복 기법(Immediate Update)
체크 포인트 회복 기법(CheckPoint Recovery)
그림자 페이징 회복 기법(Shadow Paging Recovery)

(2)  데이터 정의어(DDL;Data Definition Language)

-     개념 : 데이터 구조 정의에 사용되는 명령어

-     DDL의 대상 : 도스테뷰인(도메인, 스키마, 테이블, , 인덱스)

  Domain : 하나의 속성이 가질 수 있는 원자들의 집합

  Schema : DB의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조
  External Schema :
사용자나 개발자의 관점에서 필요로 하는 DB의 논리적 구조, ‘서브스키마라고도 함
  Conceptual Schema : DB
전체적인 논리적 구조, 개체 간 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의
  Internal Schema :
물리적 저장장치 관점에서 보는 DB 구조

Table

1. Table (= Relation = Entity)
2. Field :
데이터 저장 항목
3. Column (= Attribute) :

4. Row (=Tuple) :

5. Identifier :
식별자
6. Cardinarlity(
카디널리티) : Tuple의 개수
7. Degree(
차수) : Attribute의 개수
8. Domian :
하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들 집합

  View : 논리(=가상)의 테이블
특징 : 논리적 데이터 독립성 제공, 데이터 조작 연산 간소화, 보안 기능(접근제어) 제공, 뷰 변경 불가

  Index : 데이터를 빠르게 찾을 수 있는 수단
특징 : 기본키(PK;Primary Key) 컬럼은 자동으로 인덱스 생성
종류 : 순해비함단결클(순서 인덱스;Ordered Index, 해시 인덱스;Hash Index, 비트맵 인덱스;Bitmap Index, 함수기반 인덱스;Functional Index, 단일 인덱스;Single Index, 결합 인덱스;Concatenated Index, 클러스터드 인덱스;Clusted Index)
스캔방식 : 인덱스 범위 스캔, 인덱스 전체 스캔, 인덱스 단일 스캔, 인덱스 생략 스캔

-     DDL 명령어 : Create, Alter, Drop, Truncate

(3)  데이터 조작어 (DML;Data Manipulation Language)

-     개념 : DB에 저장된 자료를 입력, 수정, 삭제, 조회하는 언어

-     Select Insert, Update, Delete

(4)  데이터 제어어(DCL;Date Control Language)

-     개념 : DB관리자가 데이터 보안, 무결성 유지, 병행제어, 회복을 위한 제어용 언어

-     Grant, Revoke

II.   응용 SQL 작성하기

1.   집계성 SQL 작성

(1)  집계함수(Aggregate Function)

-     개념 : 여러 행 또는 테이블 전체 행으로부터 하나의 결과값을 반환하는 함수

-     구문

SELECT 컬럼1, 컬럼2, …, 집계함수
  FROM
테이블명
[WHERE
조건]
GROUP BY
컬럼1, 컬럼2, …
[HAVING
조건식(집계함수 포함)]

-     종류

  COUNT : 복수 행의 줄 수 반환

  SUM : 복수 행의 해당 컬럼 간의 합계를 계산

  AVG : 복수 행의 해당 컬럼 간의 평균을 계산

  MAX : 복수 행의 해당 컬럼 중 최대값을 계산

  MIN : 복수 행의 해당 컬럼 중 최소값을 계산

  STDDEV : 복수 행의 해달 컬럼 간의 표준편차를 계산

  VARIAN : 복수 행의 해당 컬럼 간의 분산을 계산

(2)  그룹함수(Group Function)

-     개념 : 하나 이상의 컬럼을 기준으로 컬럼 값에 따라 그룹화 하여 그룹별로 출력

-     유형

  ROLLUP : 지정 컬럼 수보다 하나 더 큰 레벨만큼의 중간 집계 값 생성 / 계층별로 구성되어 순서가 바뀌면 결과가 바뀜

  예시

부서명(DEPT) 직위(JOB) 연봉(SALARY)
마케팅부 부장 4,000
마케팅부 차장 2,000
마케팅부 과장 1,500
기획부 부장 3,800
기획부 차장 1,800

SELECT DEPT, JOB SUM(SALARY)
  FROM DEPT_SALARY
[WHERE …]
GROUP BY [
컬럼, …] ROLLUP (DEPT,JOB)
[HAVING  …]
[ORDER BY …];

부서명(DEPT) 직위(JOB) 연봉(SALARY)
마케팅부 부장 4,000
마케팅부 차장 2,000
마케팅부 과장 1,500
마케팅부   7,500
기획부 부장 3,800
기획부 차장 1,800
기획부   5,600
    13,100

 

  CUBE함수 : 결합 가능한 모든 값에 대한 다차원 집계 생성 그룹 함수, 연산이 많이 시스템에 부담, 컬럼 간 순서에 따라 결과 다름

  예시

부서명(DEPT) 직위(JOB) 연봉(SALARY)
마케팅부 부장 4,000
마케팅부 차장 2,000
마케팅부 과장 1,500
기획부 부장 3,800
기획부 차장 1,800

SELECT DEPT, JOB SUM(SALARY)
  FROM DEPT_SALARY
[WHERE …]
GROUP BY [
컬럼, …] CUBE (DEPT,JOB)
[HAVING  …]
[ORDER BY …];

부서명(DEPT) 직위(JOB) 연봉(SALARY)
    13,100
  부장 7,800
  차장 3,800
  과장 1,500
마케팅부   7,500
마케팅부 부장 4,000
마케팅부 차장 2,000
마케팅부 과장 1,500
기획부   5,600
기획부 부장 3,800
기획부 차장 1,800

 

  GROUPING SETS함수 : 집계 대상 컬럼들에 대한 개별 집계 구할 수 있음, 컬럼 간 순서와 무관한 결과

  예시

부서명(DEPT) 직위(JOB) 연봉(SALARY)
마케팅부 부장 4,000
마케팅부 차장 2,000
마케팅부 과장 1,500
기획부 부장 3,800
기획부 차장 1,800

SELECT DEPT, JOB SUM(SALARY)
  FROM DEPT_SALARY
[WHERE …]
GROUP BY [
컬럼명1, 컬럼명2, …] GROUPING SETS (DEPT,JOB,())
[HAVING  …]
[ORDER BY …];

부서명(DEPT) 직위(JOB) 연봉(SALARY)
    13,100
  부장 7,800
  차장 3,800
  과장 1,500
마케팅부   7,500
기획부   5,600

 

(3)  윈도 함수

-     개념 : 온라인 분석 처리 용도, OLAP 함수 라고도 함

-     구문

SELECT 함수명(파라미터)
  OVER
  ([PARTITION BY
컬럼1, …]
  [ORDER BY
컬럼A, …])
  FROM
테이블명

-     분류 : 순행비(순위 함수, 행 순서 함수, 그룹 내 비율 함수)

  순위 함수 : RANK(2, 2, 2, 5, 6) / DENSE_RANK(2, 2, 2, 3, 4) / ROW_NUMBER(2, 3, 4, 5, 6)

  행 순서 함수 : FIRST_VALUE(가장 먼저 나오는 값) / LAST_VALUE(가장 마지막 나오는 값) / LAG(이전 로우 값) / LEAD(이후 로우 값)

  그룹 내 비율 함수 : RATIO_TO_REPORT(각 로우의 상대적 비율, 0~1 , OVER안 컬럼 생략시 테이블 전체) / PERCENT_RANK(행의 순서별 백분율로 빠르면 0 느리면 1 , 0~1 )

III.  절차형 SQL 활용하기

1.   절차형 SQL(Procedural Language)

(1)  개념 : 절차 지향적인 프로그램이 가능하도록 하는 트랜잭션 언어

(2)  종류

-     프로시저(Procedure) : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합

-     사용자 정의함수(User-Defined Function) : 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환할 수 있는 절차형 SQL

-     트리거(Trigger) : 삽입, 갱신, 삭제등의 이벤트가 발생할 때 마다 관련 작업이 자동으로 수행되는 절차형 SQL

(3)  출력부

-     DBMS_OUTPUT 패키지 개념 : 메시지 버퍼에 저장 후 버퍼로부터 메시지 읽어오는 인터페이스 패키지

-     종류 : DBMS_OUTPUT.PUT(문자열); / DBMS_OUTPUT.PUT_LINE(문자열); [개행0]

(4)  제어부(Control)

-     조건문

  IF

IF 조건 THEN
 
문장;
ELSIF
조건 THEN
 
문장;
….
ELSE
 
문장;
END IF;

  간단한 케이스 문(Simple Case Expression) : 명확한 값으로 조건 분류

CASE 변수
  WHEN
1 THEN
    SET
명령어;
  WHEN
2 THEN
    SET
명령어;

  ELSE
    SET
명령어;
END CASE;

  검색된 케이스 문(Searched Case Expression) : 병확한 값 및 조건

CASE
  WHEN
조건1 THEN
    SET
명령어;
  WHEN
조건2 THEN
    SET
명령어;

  ELSE
    SET
명령어;
END CASE;

-     반복문

  LOOP

LOOP
 
문장1;
  EXIT WHEN
탈출조건;
END LOOP;

  WHILE

WHILE 반복 조건 LOOP
 
문장;
EXIT WHEN
탈출조건;
END LOOP;

  FOR LOOP

FOR 인덱스 IN 시작값, …, 종료값
LOOP
 
문장;
END LOOP;

(5)   예외부(EXCEPTION)

EXCEPTION
  WHEN
조건 THEN
    SET
명령어;

2.   프로시저(Procedure)

(1)  개념 : 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합

(2)  구성 : 디비컨SET

-     DECLARE : 선언부

-     BEGIN/END : 실행 프로그램의 기본 단위

-     CONTROL : 순차적으로 처리, 조건문과 반복문 이용 처리

-     SQL : 주로 DML 사용, TRUNCATE 사용도 가능

-     EXCEPTION : BEGIN/END절 실행 중 예외처리

-     TRANSACTION : DBMS적용 또는 취소 여부 결정

(3)  문법

CREATE [OR REPLACE] PROCEDURE 프로시저_
(
파라미터_ [IN | OUT | INOUT] 데이터_타입, …)
IS
 
변수선언
BEGIN
 
명령어;
[COMMIT | ROLLBACK]
END;
[OR REPLACE] 기존 프로시저 존재 시 덮어씀
모드 IN     : OS에서 프로시저로 값 전달
OUT   :
프로시저에서 OS로 값 전달
INOUT : IN, OUT
동시 수행
BEGIN 시작
COMMIT 성공적으로 끝난 프로시저 값 반영
ROLLBACK 트랜잭션 발생 이전으로 돌림
END 종료

l  호출 : EXCUTE 프로시저_(파라미터1, 파라미터2, …) / EXEC프로시저_(파라미터1, 파라미터2, …)

3.   사용자 정의함수(User-Defined Function)

(1)  개념 : 사용자가 생성하는 절차형 SQL

(2)  구성 : 프로시저의 구성에서 TRANSCATION RETURN으로 변경, 나머지는 동일

-     RETURN : 함수값 반환

(3)  문법

CREATE [OR REPLACE] FUNCTION 함수명
(
파라미터_ [IN | OUT | INOUT] 데이터_타입, …)
RETURN
데이터_타입
IS
 
변수선언
BEGIN
 
명령어;
  RETURN
변수;
END;
[OR REPLACE] 기존 함수 존재 시 덮어씀
모드 IN : OS에서 프로시저로 값 전달
RETURN 데이터_타입 반환되는 데이터 타입 정의
BEGIN 시작
RETURN 데이터값 반환되는 단일 값
END 종료

 

4.   트리거(Trigger)

(1)  개념 : DB에서 삽입, 삭제, 갱신 등의 이벤트가 발생시 작업을 자동 수행

(2)  종류 : 행 트리거 / 문장 트리거

(3)  구성 : 프로시저에서 선언 후 EVENT부 추가, TRANSACTION부 제외

-     EVENT : 트리거가 실행되는 타이밍, 이벤트를 명시

(4)  문법

CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE | AFTER]
유형 ON 테이블명
[FOR EACH ROW]
BEGIN
END;
[OR REPLACE] 기존 트리거 존재 시 덮어씀
순서 BEFROE : 이벤트 발생 전
AFTER  :
이벤트 발생 후
유형 INSERT, UPDATE, DELETE의 조합
(INSERT or DELETE
같이 사용 가능)
FOR EACH ROW 매번 변경되는 행 수만큼 실행
BEGIN 시작
END 종료

 

(5)  주의사항 : TCL(COMMIT, ROLLBACK)사용 불가 / 연쇄오류 발생 가능성 주의

IV.  데이터 조작 프로시저 최적화

1.   데이터 조작 프로시저 성능개선

(1)  쿼리 성능 개선(튜닝)의 개념 : 프로시저에 존재하는 SQL실행 계획을 분석, 수정하여 시간 단축

(2)  쿼리 성능 개선 절차 : 문제 있는 SQL 식별 / 옵티마이저 통계 확인 / SQL 문 재구성 / 인덱스 재구성 / 실행계획 유지관리

(3)  옵티마이저(Optimizer) 통계 확인

-     개념 : 최적의 처리경로를 설정해주는 DBMS 내부의 핵심 엔진

-     유형

  RBO(Rule Based Optimizer) CBO(Cost Based Optimizer)
개념 통계 정보가 없는 상태에서 사전 등록된 규칙에 따라 경로 고려 통계 정보로부터 모든 접근 경로 고려
핵심 규칙(우선 순위) 기반 비용(수행 시간) 기반
평가
기준
인덱스 구조, 연산자, 조건절 형태 등 레코드 개수, 블록 개수, 평균 행 길이, 컬럼 값의 수, 컬럼 값 분포 등
장점 사용자가 원하는 처리경로로 유도가 용이 옵티마이저의 이해도가 낮아도 성능보장 가능

 

-     역할

  쿼리 변환(Query Transformer) : 좀 더 일반적이고 표준화된 형태로 변환

  비용 산정(Estimator) : 각 단계의 선택도, 카디널리티, 비용을 계산 / 궁극적 : 총비용 계산

  계획 생성(Plan Generation) : 하나의 쿼리를 수행 시 후보군이 될 만한 실행계획들을 생성

-     힌트 사용 : 옵티마이저에 명시적인 힌트 제공

  /*+RULE*/ : 규칙 기반 접근 방식 사용

  /*+CHOOSE*/ : 오라클 옵티마이저 디폴트 값에 따름

  /*INDEX(테이블명 인덱스명)*/ : 지정된 인덱스를 강제적으로 사용

  /*+USE_HASH(테이블명)*/ : 지정된 테이블들의 조인이 Hash Join으로 일어나게 유도

  /*+USE_MERGE(테이블명)*/ : 지정된 테이블들의 조인이 Sort Merge로 일어나게 유도

  /*+USE_NL(테이블명)*/ : 지정된 테이블들의 조인이 Nested Loop 형식으로 일어나게 유도

(4)  SQL 문 재구성

-     특정 값 지정 : 조건 절에 범위가 아닌 특정 값 지정

-     별도의 SQL 사용 : 하나의 SQL문 사용시 UNION ALL 연산자 사용

-     힌트 사용

-     HAVING 미사용 : 인덱스가 걸린 컬럼은 HAVING 사용시 인덱스 해제

-     인덱스만 진의 사용 : 가능한 인덱스만을 이용해 질의

(5)  인덱스 재구성

-     자주 쓰는 컬럼 선정

-     SORT 명령어 생략

-     분포도를 고려

-     변경이 적은 컬럼 선정

-     결합 인덱스 사용

반응형

'자격증 > 정처기' 카테고리의 다른 글

정처기 실기 파트9  (0) 2022.07.10
정처기 실기 파트8  (0) 2022.07.10
정처기 실기 파트6  (0) 2022.07.10
정처기 실기 파트5  (0) 2022.07.10
정처기 실기 파트4  (0) 2022.07.10