개발공부/정보처리기사

[정보처리기사 실기] 7장 SQL 응용

햄❤️ 2023. 4. 15. 17:58
728x90

 

정보처리기사 수제비 2022 실기 문제집을 요약하며 공부했습니다! 😁 

 


 

7-1. 데이터베이스 기본

7-1-1. 트랜잭션

 

📌 트랜잭션 특성 🌟

- 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위

  • 원자성(Atomicity): 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 하는 성질
  • 일관성(Consistency): 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 하는 성질
  • 격리성=고립성(Isolation): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않어야 한다는 성질
  • 영속성(Durability): 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질

 

📌 트랜잭션 상태 변화

  • 활동 상태(Active): 초기 상태. 트랜잭션이 실행 중일 때 가지는 상태
  • 부분 완료 상태(Partially Commited): 마지막 명령문이 실행된 후에 가지는 상태
  • 완료 상태(Commited):  트랜잭션이 성공적으로 완료된 후 가지는 상태
  • 실패 상태(Failed): 정상적인 실행이 더 이상 진행될 수 없을 때 가지는 상태
  • 철회 상태(Aborted): 트랜잭션이 취소되고, 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태

*TCL 명령어: 커밋(확정), 롤백(취소), 체크포인트(저장 시기 설정)

 

📌 병행 제어(Concurrency Control)

- 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호 작용을 제어하는 기법

- ✏️ 미 보장시 문제점

  • 갱신 손실(Lost Update): 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
  • 현황 파악 오류(Dirty Read): 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류 
  • 모순성(Inconsistency): 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
  • 연쇄복귀(Cascading Rollback): 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류

 

- ✏️ 병행 제어 기법의 종류

  • 로킹(Locking): 접근하려는 데이터를 다른 트랜잭션이 접근하지 못하도록 잠그는(lock) 직렬화 기법(순차적 진행 보장)
  • 낙관적 검증(Optimistic Validation):  트랜잭션 수행 동안은 어떠한 검사를 하지 않고, 트랜잭션이 종료된 이후에 일괄적으로 검사하는 방식
  • 타임 스탬프 순서(Time Stamp Ordering): 데이터에 접근하는 시간(Timestamp)을 미리 정해두어 부여된 시간 순서대로 데이터에 접근
  • 다중 버전 동시성 제어(MVCC; Multi Version Concurrency Control): 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬 가능성이 보장되는 적절한 버전을 선택하여 접근하는 기법

 

📌 데이터 베이스 고립화 수준

- 고립화 수준: 다른 트랜잭션이 현재 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도

 

- ✏️고립화 수준 종류

  • Read Uncommited(연산중인 데이터 읽기 허용)
  • Read Commited(완료 될 때까지 읽기 제한)
  • Repeatable Read(종료시까지 갱신,삭제 제한)
  • Serializable Read(영역 전체에 대한 접근 제한)

 

📌 회복 기법

- 회복기법: 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업

 

- ✏️회복기법 종류

  • 로그 기반 회복 기법
    • 지연 갱신 회복 기법(Deferred Update): 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법
    • 즉각 갱신 회복 기법(immediate Update): 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영

 

  • 체크 포인트 회복 기법: 장애 발생시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전 상태로 복원 
  • 그림자 페이징 회복 기법(Shadow Paging Recovery): 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법

 

📌 DDL(Data Definition Language)

- 데이터 정의어: 데이터를 정의하는 언어, 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어

1. 테이블: 카디널리티(튜플의 개수), 차수(애트리뷰트의 개수)

2. 뷰: 뷰는 ALTER문으로 변경할 수 없음

3. 인덱스: 검색 연산의 최적화를 위해 데이터베이스 내 값에 대한 주소 정보로 구성된 데이터 구조

 ✏️인덱스 종류: 순서 인덱스, 해시 인덱스, 비트맵 인덱스, 함수 기반 인덱스, 단일 인덱스, 결합 인덱스, 클러스터드 인덱스

 

4. TABLE 관련 DDL

// 테이블 생성
CREATE TABLE 테이블명
(
	컬럼명 데이터 타입 [제약조건]

)

// 컬럼 추가
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건]

// 컬럼 수정
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [제약조건]

// 컬럼 삭제 
ALTER TABLE 테이블명 DROP 컬럼명;

//테이블 삭제
DROP TABLE 테이블명 [CASCADE | RESTRICT];

//테이블 내 데이터 삭제
TRUNCATE TABLE 테이블명;

- CASCADE: 참조하는 테이블까지 연쇄 제거

- RESTRICT: 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않는 옵션

 

5. VIEW 관련 DDL

// 뷰 생성
CREATE VIEW 뷰이름 AS 조회쿼리

// 뷰 교체
CREATE OR REPLACE VIEW 뷰이름 AS 조회쿼리;

//뷰 삭제
DROP VIEW 뷰이름;

 

6. INDEX 관련 DDL

//인덱스 생성
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);

//인덱스 수정
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);

//인덱스 삭제
DROP INDEX 인덱스명;

 

 

📌 DML(Data Manipulation Language)

- 데이터 조작어: 데이터베이스에 저장된 자료들을 입력,수정,삭제, 조회하는 언어

//SELECT

SELEC [ALL | DISTICT] 속성명1, 속성명2, ...
FROM 테이블명,
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC]];

 

- WHERE 절 문법

  • LIKE
    • % : 0개 이상의 문자열과 일치
    • [] : 1개의 문자와 일지
    • [^]: 1개의 문자와 불일치
    • _ :  특정 위치의 1개의 문자와 일치

 

✏️ 조인

  • 내부 조인(Inner Join): 공통 존재 컬럼의 값이 같은 경우 추출
SELECT A.컬럼1, A.컬럼2, ..., B.컬럼1, B.컬럼2, ...
FROM 테이블1 A [INNER] JOIN 테이블2 B
[WHERE 검색조건];

 

  • 외부 조인(Outer Join) 
    • 왼쪽 외부 조인(Left Outer Join): 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터 추출 
    • 오른쪽 외부 조인(Right Outer Join): 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터 추출
    • 완전 외부 조인(Full Outer Join): 양쪽의 모든 데이터를 추출하는 기법
//왼쪽 외부조인
SELECT A.컬럼1, A.컬럼2, ... B.컬럼1, B.컬럼2, ...
FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B
ON 조인조건 [WHERE 검색조건];

//오른쪽 외부조인
SELECT A.컬럼1, A.컬럼2, ... B.컬럼1, B.컬럼2, ...
FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
ON 조인조건 [WHERE 검색조건];

//완전 외부조인
SELECT A.컬럼1, A.컬럼2, ... B.컬럼1, B.컬럼2, ...
FROM 테이블1 A FULL [OUTER] JOIN 테이블2 B
ON 조인조건 [WHERE 검색조건];

 

  • 교차 조인(Cross Join): 조인 조건이 없는 모든 데이터 조합을 추출하는 기법
  • 셀프 조인(Self Join):  자기 자신에게 별칭을 지정한 후 다시 조인하는 기법
//교차 조인
SELECT 컬럼1, 컬럼2, ...
FROM 테이블1 CROSS JOIN 테이블2

//셀프 조인
SELECT A.컬럼1, A.컬럼2, ... , B.컬럼1, B.컬럼2, ...
FROM 테이블1 A [INNTER] JOIN 테이블1 B ON 조인조건 
[WHERE 검색조건]

 

✏️ 집합 연산자

- UNION(중복 제거된 합집합), UNION ALL(A+B), INTERSECT(교집합), MINUS(A-B)

 

✏️ INSERT,UPDATE, DELETE

//데이터 삽입
INSERT INTO 테이블명(속성명1, ..)
VALUES(데이터1, ..);

//데이터 변경
UPDATE 테이블명 SET 속성명 = 데이터, ...
WHERE 조건;

//데이터  삭제 
DELETE FROM 테이블명 WHERE 조건;

 

 

📌 DCL(Data Control Language)

- 데이터베이스 관리자가 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 관리자가 사용하는 제어용 언어

// 사용 권한 부여
GRANT 권한 ON 테이블 TO 사용자;

// 사용 권한 회수
REVOKE 권한 ON 테이블 FROM 사용자;

 


 

7-2. 응용 SQL 작성하기

7-2-1. 집계성 SQL 작성

 

📌 집계함수

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

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

 

✏️집계 함수 종류

  • COUNT, SUM, AVG, MAX, MIN, STDDEV(표준편차), VARIAN(분산)

 

📌 그룹 함수

-  테이블의 전체 행을 하나 이상의 컬럼을 기준으로 컬럼값에 따라 그룹화하여 그룹별로 결과를 출력하는 함수

 

1. ROLLUP 함수

- 소그룹의 중간 집계 값을 산출. 지정 컬럼 수 보다 1단계 더 큰 레벨만큼의 중간 집계 값이 생성됨

SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
[WHERE...]
GROUP BY [컬럼...] ROLLUP 컬럼
[HAVING...]
[ORDER BY...]

 

2. CUBE 함수

 - 결합 가능한 모든 값에 대해 다차원 집계를 생성하는 그룹함수. 연산이 많아 시스템에 부하를 줌

SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
[WHERE...]
GROUP BY [컬럼...] CUBE(컬럼명a, ...)
[HAVING...]
[ORDER BY...]

 

3. GROUPING SETS 함수

- 집계 대상 컬럼들에 대한 개별 집계를 구할 수 있으며, 순서와 무관한 결과를 얻을 수 있음

SELECT 컬럼1, 컬럼2, ..., 집계함수
FROM 테이블명
[WHERE...]
GROUP BY [컬럼...] GROUPING SETS(컬럼명1, ...)
[HAVING...]
[ORDER BY...]

 

📌 윈도 함수

- 데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해 표준 SQL에 추가된 함수 = 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위)
SELECT NAME, SALARY
RANK() OVER (ORDER BY SALARY DESC) AS A
FROM EMPLOYEE;

 


 

7-3. 절차형 SQL 작성하기

7-3-1. 절차형 SQL

 

📌 절차형 SQL 종류

- 프로시저, 사용자 정의함수, 트리거

 

📌 프로시저

- 일련의 쿼리들을 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합

- DECLARE(선언부), BEGIN/END(선언부/종료부), CONTROL(제어부), SQL, EXCEPTION(예외), TRANSACTION(실행부)

- 모드(IN - 운영체제에서 프로시저로 값 전달 모드, OUT- 프로시저에서 처리한 결과를 운영체제로 전달하는 모드, INOUT - 두가지 기능 모두 수행하는 모드)

 

📌 사용자 정의 함수

- 일련의 SQL 처리를 수행하고, 수행 결과를 단일 값으로 반환(RETURN)할 수 있는 절차형 SQL

- 조회용도로 SELECT 문을 사용(INSERT, UPDATE, DELETE 사용 불가)

- 모드는 IN 만 가능 (운영체제에서 사용자 정의 함수로 값 전달 모드) 

- 호출문에 대한 함수값을 반환

 

📌 트리거

- 데이터베이스 시스템에서 삽입, 갱신, 삭제 등의 이벤트가 발생할 때마다 관련 작업이 자동으로 수행되는 절차형 SQL

- 반환값이 없음. EVENT가 존재

CREATE [OR REPLACE] TRIGGER 트리거명
[BEFORE | AFTER] 유형 ON 테이블명
[FOR EACH ROW]
BEGIN
END;

 

- BEFORE: 테이블에 대한 INSERT/UPDATE/DELETE를 수행하기 전에 트리거 실행 (AFTER는 수행 후 트리거 실행)

- FOR EACH ROW: 매번 변경되는 데이터 행의 수만큼 실행을 위한 명령어

- COMMIT, ROLLBACK 등의 트랜잭션 제어어(TCL) 사용 불가

 

 


 

7-4. 데이터 조작 프로시저 최적화 

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

 

📌 쿼리 성능 개선

- 최소의 시간으로 원하는 결과를 얻도록 프로시저를 수정하는 작업

 

📌 옵티마이저

- SQL을 가장 빠르고 효율적으로 수행할 최적의 처리경로를 생성해주는 DBMS 내부의 핵심엔진.

- 옵티마이저가 생성한 SQL 처리 경로를 실행계획이라고 부름

 

✏️ 유형

  • RBO(Rule Based Optimizer): 통계 정보가 없는 상태에서 사전 등록된 규칙에 따라 질의 실행 계획을 선택하는 옵티마이저로 규칙 우선 기반
  • CBO(Cost Based Optimizer): 통계 정보로부터 모든 접근 경로를 고려한 질의실행 계획을 선택하는 옵티마이저로 비용 기반

 

📌 힌트

- SQL 성능 개선의 핵심 부분으로 옵티마이저의 실행 계획을 원하는대로 변경할 수 있게 한다. 명시적인 힌트를 통해 실행계획을 변경한다. 

 

 

728x90