Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 정처기
- 혼공파
- 티스토리챌린지
- 안드로이드
- 혼공단
- 알고리즘
- Til
- 카카오코테
- 기술면접
- java
- 자료구조
- 혼공챌린지
- Android
- MySQL
- 프로그래머스
- 정보처리기사
- select
- 안드로이드스튜디오
- 오블완
- 인프런
- 코틀린
- 스터디
- join
- 자바
- 코테
- Kotlin
- doitandroid
- groupby
- CS
- SQL
Archives
- Today
- Total
Welcome! Everything is fine.
[정처기/실기] 7단원(SQL 응용) 요약 본문
728x90
* 수제비 정보처리기사 실기 책을 보고 직접 정리한 내용입니다.
1. 데이터베이스 기본
[1-1] 트랜잭션의 특성
- 트랜잭션(Transaction)
- 인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야하는 특성
- 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위
원자성(Atomicy)
- 트랜잭션의 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야하는 성질
- 트랜잭션의 연산 전체가 성공 또는 실패(All or Nothing)되어야 하는 성질
일관성(Consistency)
- 시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 하는 성질
격리성 = 고립성(Isolation)
- 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질
영속성(Durability)
- 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질
[1-2] 트랜잭션의 상태 변화
활동 상태(Active)
- 초기 상태, 트랜잭션이 실행 중일 때 가지는 상태
부분 완료 상태(Partially Committed)
- 마지막 명령문이 실행된 후에 가지는 상태
완료 상태(committed)
- 트랜잭션이 성공적으로 완료된 후 가지는 상태
실패 상태(Failed)
- 정상적인 실행이 더 이상 진행될 수 없을 때 가지는 상태
철회 상태(Aborted)
- 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태
[1-3] 트랜잭션 제어(TCL)
- 트랜잭션 제어 언어(TCL; Transaction Control Language) : 트랜잭션 결과를 허용하거나 취소하는 목적으로 사용되는 언어
커밋(COMMIT)
- 트랜잭션 확정
- 트랜잭션을 메모리에 영구적으로 저장하는 명령어
롤백(ROLLBACK)
- 트랜잭션 취소
- 트랜잭션 내역을저장 무효화시키는 명령어
체크포인트(CHECKPOINT)
- 저장 시기 설정
- ROLLBACK을 위한 시점을지정하는 명령어
[1-4] 병행제어(일관성 주요 기법)
- 병행 제어 : 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호 작용을 제어하는 기법
목적
- 데이터베이스의 공유 최대화
- 시스템의 활용도 최대화
- 데이터베이스의 일관성 유지
- 사용자에 대한 응답시간 최소화
병행 제어 미보장 시 문제점
- 갱신 손실(Lost Update) : 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류
- 현황 파악 오류(Dirty Read) : 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류
- 모순성(Inconsistency) : 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
- 연쇄복귀(cascading Rollback) : 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류
병행 제어 기법의 종류
- 로킹(Locking)
- 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제(Mutual Exclusion) 기능을 제공하는 기법
- 특징
- 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함
- 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음
- 로킹 단위가 작아지면 데이터베이스 공유도 증가
- 로킹 단위가 작아지면 로킹 오버헤드 증가
- 낙관적 검증(Optimistic Validation)
- 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법
- 타임 스탬프 순서(Time Stamp Ordering)
- 트랜잭션 실행 전 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
- 다중 버전 동시성 제어(MVCC; Multi Version Concurrency Control)
- 트랜잭션의 타임 스탬프와 접근하려는 데이터의 타임 스탬프를 비교하여 직렬 가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법
[1-5] 데이터베이스 고립화 수준(격리성 주요 기법)
- 고립화 수준(Isolation Level) : 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도
고립화 수준 종류
- Read Uncommited
- Read Commited
- Repeatable Read
- Serializable Read
[1-6] 회복 기법(영속성 주요 기법)
- 회복 기법(Recovery) : 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
REDO
- 데이터베이스가 비정상적으로 종료되었을 때, 디스크에 저장된 로그를 분석하여 트랜잭션 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법
- 데이터베이스 내용 자체가 손상된 경우, 가장 최근의 복제본을 적재한 후, 이후 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터베이스를 복원하는 기법
UNDO
- 데이터베이스가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만, 완료 기록이 없는 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법
- 데이터베이스 내용 자체는 손상되지 않았지만, 변경 중이거나 변경된 내용에 대한 신뢰성을 잃어버린 경우, 모든 변경 내용을 취소하여 복원하는 기법
회복 기법 종류
- 로그 기반 회복 기법
- 지연 갱신 회복 기법(Deferred Update) : 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법
- 즉각 갱신 회복 기법(Immediate Update) : 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법
- 체크 포인트 회복 기법 : 장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원시키는 회복 기법
- 그림자 페이징 회복 기법 : 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법
[2-1] 데이터 정의어(DDL; Data Definition Language)
- 테이블과 같은 데이터 구조를 정의하는데 사용되는 명령어
- 특정 구조를 생성, 변경, 삭제, 이름 바꾸는 데이터 구조와 관련된 명령어
[2-2] DDL의 대상
도메인
- 하나의 속성이 가질 수 있는 원자값들의 집합
- 속성의 데이터 타입과 크기, 제약조건 등의 정보
스키마
- 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조
- 외부/개념/내부 3계층으로 구성
- 외부 스키마(=서브 스키마)
- 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조
- 사용자 뷰를 나타냄
- 개념 스키마
- 데이터베이스의 전체적인 논리적 구조
- 전체적인 뷰를 나타냄
- 개체 간의 관계, 제약 조건, 접근 권한, 무결성, 보안에 대해 정의
- 내부 스키마
- 물리적 저장장치의 관점에서 보는 데이터베이스 구조
- 외부 스키마(=서브 스키마)
테이블
- 데이터를 저장하는 항목인 필드들로 구성된 데이터의 집합체(=릴레이션, 엔터티)
- 테이블 관련 용어
- 튜플/행 /레코드 : 릴레이션에서 같은 값을 가질 수 없음
- 애트리뷰트/열 : 열의 개수를 디그리(Degree)라고 함
- 식별자 : 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념
- 카디널리티 : 튜플의 개수
- 차수 : 애트리뷰트의 개수
- 도메인 : 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합
뷰
- 하나 이상의 물리적 테이블에서 유도되는 가상의 테이블/논리 테이블
- 뷰의 특징
- 논리적 데이터 독립성 제공 : 데이터베이스에 영향을 주지 않고 애플리케이션이 원하는 형태로 데이터에 접근 가능
- 데이터 조작 연산 간소화 : 애플리케이션이 원하는 형태의 논리적 구조를 형성하여 데이터 조작 연산을 간소화
- 보안 기능 제공(접근 제어) : 특정 필드만을 선택해 뷰를 생성할 경우 애플리케이션은 선택되지 않은 필드의 조회 및 접근 불가
- 뷰 변경 불가 : 뷰 정의는 ALTER문을 이용하여 변경할 수 없음(뷰는 CREATE문을 사용하여 정의, 뷰를 제거할 때는 DROP문 사용)
- 뷰의 장점
- 논리적 독립성 제공 : 테이블의 구조가 바뀌어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨
- 사용자 데이터 관리 용이 : 단순한 질의어 사용 가능
- 데이터 보안의 용이 : 보안 데이터에 대한 접근 제어 가능
- 뷰의 단점
- 뷰 자체 인덱스 불가
- 뷰 정의 변경 불가 : 뷰의 정의를 변경하려면 뷰를 삭제하고 재생성
- 데이터 변경 제약 존재 : 뷰의 내용에 대한 삽입, 삭제, 변경 제약이 있음
인덱스
- 검색을 빠르게 하기 위한 데이터 구조
- 인덱스 특징
- 기본 키(PK; Primary Key) 컬럼은 자동으로 인덱스가 생성됨
- 연월일이나 이름을 기준으로 하는 인덱스는 자동으로 생성되지 않음
- 테이블의 컬럼에 인덱스가 없는 경우, 테이블의 전체 내용을 검색(테이블 전체 스캔; Table Full Scan)
- 인덱스가 생성되어 있을 때 데이터를 빠르게 찾을 수 있음(인덱스 범위 스캔; Index Range Scan)
- 조건절에 ‘=’으로 비교되는 컬럼을 대상으로 인덱스를 생성하면 검색 속도를 높일 수 있음
- 인덱스의 종류
- 순서 인덱스
- 데이터가 정렬된 순서로 생성되는 인덱스
- B-Tree 알고리즘 활용
- 해시 인덱스
- 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스
- 데이터 접근 비용이 균일, 튜플 양에 무관
- 비트맵 인덱스
- 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
- 수정 변경이 적을 경우 유용
- 함수기반 인덱스
- 수식이나 함수를 적용하여 만든 인덱스
- 단일 인덱스
- 하나의 컬럼으로만 구성한 인덱스
- 주 사용 컬럼이 하나일 경우 사용
- 결합 인덱스
- 두 개 이상의 컬럼으로 구성한 인덱스
- WHERE 조건으로 사용하는 빈도가 높은 경우 사용
- 클러스터드 인덱스
- 기본 키 기준으로 레코드를 묶어서 저장하는 인덱스
- 저장 데이터의 물리적 순서에 따라 인덱스가 생성
- 특정 범위 검색 시 유리함
- 순서 인덱스
[2-3] DDL 명령어
CREATE
- 데이터베이스 오브젝트 생성
ALTER
- 데이터베이스 오브젝트 변경
DROP
- 데이터베이스 오브젝트 삭제
TRUNCATE
- 데이터베이스 오브젝트 내용 삭제
[2-4] TABLE 관련 DDL
CREATE TABLE
CREATE TABLE 테이블명
(
컬럼명 데이터타입 [제약조건],
...
);
ALTER TABLE
- ALTER TABLE 컬럼 추가
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건];
- ALTER TABLE 컬럼 수정
ALTER TABLE 테이블명 MODIFY 컬럼명 데이터타입 [제약조건];
- ALTER TABLE 컬럼 삭제
ALTER TABLE 테이블명 DROP COLUMN 컬럼명;
DROP TABLE
- 테이블을 삭제하는 명령어
DROP TABLE 테이블명 [CASCADE | RESTRICT];
- DROP TABLE 명령어 옵션
- CASCADE : 참조하는 테이블까지 연쇄적으로 제거하는 옵션
- RESTRICT : 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않는 옵션
TRUNCATE TABLE
- 테이블 내의 데이터들을 삭제하는 명령어
TRUNCATE TABLE 테이블명;
[2-5] VIEW 관련 DDL
CREATE VIEW
- 뷰를 생성하는 명령어
- VIEW 테이블의 SELECT 문에는 UNION 이나 ORDER BY 절을 사용할 수 없음
CREATE VIEW 뷰이름 AS
조회쿼리;
CREATE OR REPLACE VIEW
- 뷰를 교체하는 명령어
CREATE OR REPLACE VIEW 뷰이름 AS
조회쿼리;
DROP VIEW
- 뷰를 삭제하는 명령어
DROP VIEW 뷰이름;
[2-6] INDEX 관련 DDL
CREATE INDEX
- 인덱스를 생성하는 명령어
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
ALTER INDEX
- 인덱스를 수정하는 명령어
- BUT, 기존 인덱스를 삭제하고 신규 인덱스를 생성하는 방식으로 사용 권고
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
DROP INDEX
- 인덱스를 삭제하는 명령어
DROP INDEX 인덱스명;
[3-1] 데이터 조작어(DML; Data Manipulation Language)
- 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어
[3-2] DML 명령어
SELECT
- 테이블 내 컬럼에 저장된 데이터 조회
INSERT
- 테이블 내 컬럼에 데이터 추가
UPDATE
- 테이블 내 컬럼에 저장된 데이터 수정
DELETE
- 테이블 내 컬럼에 저장된 데이터 삭제
[3-3] SELECT 명령어
SELECT
- 테이블에서 출력할 컬럼을 명시하기 위해 사용
ALL | 모든 튜플을 검색 할 때 사용 |
DISTINCT | 중복된 속성이 조회될 경우 그중 한 개만 검색 |
FROM
- 질의에 의해 검색될 데이터를 포함하는 테이블명 기술
WHERE
- 검색할 조건을 기술
- WHERE절 문법
- 비교
- =
- <>, !=
- <, <=, >, >=
- 범위
- BETWEEN
- 집합
- IN
- NOT IN
- 패턴
LIKE% 0개 이상 문자열과 일치 [ ] 1개 문자와 일치 [^] 1개의 문자와 불일치 _ 특정 위치의 1개의 문자와 일치 - NULL
- IS NULL
- IS NOT NULL
- 복합조건
- AND
- OR
- NOT
- 비교
GROUP BY
- 속성값을 그룹으로 분류하고자 할 때 사용
HAVING
- GROUP BY에 의해 분류한 후그룹에 대한 조건 지정
ORDER BY
- 속성값을 정렬하고자 할 때 사용(ASC : 오름차순, DESC : 내림차순)
조인(Join)
- 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법
- 논리적 조인 유형
- 내부 조인
- 외부 조인
왼쪽 외부 조인 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터 추출 오른쪽 외부 조인 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 데이터 추출 완전 외부 조인 양쪽의 모든 데이터 추출 - 교차 조인
- 셀프 조인
서브쿼리(Sub-Query)
- SQL문 안에 포함된 또 다른 SQL문
- 알려지지 않은 기준을 위한 검색을 위해 사용
- 서브쿼리 유형
- FROM절 서브쿼리
- WHERE절 서브쿼리
집합 연산자(Set Operator)
- 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식
- 집합 연산자 유형
- UNION : 중복 레코드를 제외
- UNION ALL : 중복 레코드도 허용
- INTERSECT : 중복 레코드만 포함
- MINUS : 비교 레코드 제외(첫 쿼리에 있고 두 번째 쿼리에는 없는 결과 반환)
[3-4] INSERT 명령어
- 데이터의 내용을 삽입할 때 사용하는 명령어
INSERT INTO 테이블명(속성명1, ...)
VALUES (데이터1, ...);
[3-5] UPDATE 명령어
- 데이터의 내용을 변경할 때 사용하는 명령어
UPDATE 테이블명
SET 속성명 = 데이터, ...
WHERE 조건;
[3-6] DELETE 명령어
- 데이터의 내용을 삭제할 때 사용하는 명령어
DELETE FROM 테이블명
WHERE 조건;
[3-7] 데이터 제어어(DCL; Data Control Language)
- 데이터베이스 관리자(DBA)가 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 사용하는 제어용 언어
GRANT
- 사용 권한 부여
GRANT 권한 ON 테이블 TO 사용자;
REVOKE
- 사용 권한 취소
REVOKE 권한 ON 테이블 FROM 사용자;
2. 응용 SQL 작성하기
[1-1]데이터 분석 함수의 개념
데이터 분석 함수
다중 행 연산자
- IN : 리턴되는 값 중에서 조건에 해당하는 값이 있으면 참
- ANY : 서브쿼리에 의해 리턴되는 각각의 값과 조건을 비교하여 하나 이상을 만족하면 참
- ALL : 값을 서브쿼리에 의해 리턴되는 모든 값과 조건 값을 비교하여 모든 값을 만족해야만 참
- EXIST : 메인 뭐링의 비교 조건이 서브쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참
[2-1] 집계함수
- COUNT
- SUM
- AVG
- MAX
- MIN
- STDDEV
- VARIANCE
[2-2] 그룹함수
- ROLLUP
- CUBE
- GROUPING SETS
[2-3] 윈도함수
- 순위 함수
- RANK
- DENSE_RANK
- ROW_NUMBER
'자격증 및 기타 활동 > 정보처리기사' 카테고리의 다른 글
[정처기/실기] 9단원(소프트웨어 개발 보안 구축) 요약 (0) | 2023.10.25 |
---|---|
[정처기/실기] 8단원(서버 프로그램 구현) 요약 (0) | 2023.10.25 |
[정처기/실기] 3단원(데이터 입출력 구현) 요약 (0) | 2023.10.25 |
[정처기/실기] 2단원(화면설계) 요약 (0) | 2023.10.25 |
[정처기/실기] 1단원(요구사항 확인) 요약 (0) | 2023.10.15 |