본문 바로가기
정처기 실기/SQL

정처기 실기 대비 SQL

by 별보는 개발자 2023. 3. 20.

1. 트랜잭션 : 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본단위

 - 트랜잭션의 특성 : 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 영속성(Durability)

 - 원자성 : 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 하는 성질

 - 일관성 : 트랜잭션 수행 전과 수행 완료 후의 상태가 같아야 하는 성질

 - 격리성 = 고립성 : 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질

 - 영속성 : 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질

 

2. 트랜잭션 제어 : 트랜잭션 제어언어는 TCL(Transaction Control Language)이라고 하며 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어

 - 커밋 : 트랜잭션 확정 : 트랜잭션을 메모리에 영구적으로 저장하는 명령어

 - 롤백 : 트랜잭션 취소 : 트랜잭션 내역을 저장 무효화 시키는 명령어

 - 체크포인트 : 저장 시기 설정 : ROLLBACK 위한 시점을 지정하는 명령어

 

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

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

 - 로킹 : 하나의 트랜잭션을 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제 기능을 제공하는 기법

 - 낙관적 검증 : 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료시 검증을 수행하여 데이터베이스에 반영하는 기법

 

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

 - REDO : 데이터베이스가 비정상적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작과 완료에 대한 기록이 있는 트랜잭션들의 작업을 재작업하는 기법

 - UNDO : 데이터베이스가 비성장적으로 종료되었을 때 디스크에 저장된 로그를 분석하여 트랜잭션의 시작은 있지만 완료 기록이 없는 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법

 

DDL : 데이터 정의어는 데이터를 정의하는 언어

 - 도메인 : 하나의 속성이 가질 수 있는 원자값들의 집합, 속성의 데이터 타입과 크기, 제약조건 등의 정보

 - 스키마 : 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조

 - 외부 스키마 : 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조

 - 개념 스키마 : 데이터베이스의 전체적인 논리적 구조, 전체적인 뷰를 나타냄

 - 내부 스키마 : 물리적 저장 장치의 관점에서 보는 데이터베이스 구조

 - 테이블 : 데이터 저장 공간

 - 뷰 : 하나 이상의 물리 테이블에서 유도되는 가상의 테이블

 - 인덱스 : 검색을 빠르게 하기 위한 데이터 구조

 

튜플 / 행 : 테이블 내의 행을 의미하며 레코드라고도 함

카디널리티 : 튜플의 개수

애트리뷰트 / 열 : 테이블 내의 열을 의미, 열의 개수를 디그리 라고 함

차수 : 애트리뷰트의 개수

 

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

데이터베이스 파일 구조 : 순차방법, 인덱스 방법, 해싱 방법

 

DDL : create, alter, drop, truncate

 

create table 사원 (

  사번 varchar(10) primary key,

  업무 varchar(20) foreign key references 부서(부서코드),

  이름 varchar(10) unique,

  생년월일 char(8) not null,

  성별 char(1) check (성별 = 'M' or 성별 = 'F')

);

 

alter table : 테이블을 추가

 

alter table 사원 add 전화번호 varchar(11) unique;

 ->  사원 테이블의 전화번호라는 컬럼에 대해 타입이 varchar(11) 이면서 유니크 제약조건을 걸도록 추가하기

 

alter table 사원 modify 이름 varchar(30) not null;

alter table 사원 drop column 생년월일;

 

drop table 사원;

cascade : 참조하는 테이블까지 제거

restrict : 다른 테이블이 삭제할 테이블을 참조중이면 제거하지 않음

 

truncate table 사원;

  -> 사원 테이블 내의 모든 데이터를 삭제

 

 

create view 사원뷰 as

select 사번, 이름 from 사원 where 성별 = 'M';

(view 테이블의 select 문에슨 union이나 order by 절을 사용할 수 없다)

 

drop view 뷰이름;

 

 

create index 사번인덱스 on 사원(사번);

  -> 사원 테이블의 사번 컬럼에 사번인덱스라는 인덱스 명으로 인덱스를 생성

 

alter index 사번인덱스 on 사원(사번);

  ->  사원 테이블의 사번 컬럼에 대해 사번인덱스라는 인덱스 명으로 수정

 

drop index 사번인덱스;

  -> 사번인덱스라는 인덱스 명으로 가지고 있는 인덱스 삭제

 

 

select * from product where price between 5000 and 8000;

  -> 5000이상 8000이하

 

select * from product name like '정보%';

  -> 상품 테이블에서 이름이 정보로 시작되는 문자열

 

select * from product name like '[ABC]%';

  -> 첫번째 문자가 A또는 B또는 C인 문자열과 일치하는 문자열 검색

 

내부조인

select A.책번호, A.책명, B.가격

from 도서 A join 도서가격 B 

on A.책번호 = B.책번호;

 

왼쪽 외부조인

select A.책번호, A.책명, B.가격

from 도서 A left join 도서가격 B 

on A.책번호 = B.책번호;

 

오른쪽 외부조인

select A.책번호, A.책명, B.가격

from 도서 A rigth join 도서가격 B 

on A.책번호 = B.책번호;

 

완전외부조인

select A.책번호, A.책명, B.가격

from 도서 A full join 도서가격 B

on A.책번호 = B.책번호;

 

교차조인

select A.책번호, A.책명, B.가격

from 도서 A cross join 도서가격 B;

 

 

union : 중복행이 제거된 쿼리 결과를 반환

union all : 중복행이 제거되지 않은 쿼리 결과 반환

intersect : 공통적으로 존재하는 결과 - 교집함

minus : 첫번째 쿼리에만 존재하는 차집함

 

select ename

from emp

where sal <= 2000

union

select ename

from emp

where sal >= 1500;

 

 

insert into 학생(학번, 성명, 학년)

values(6633, '홍길동', 5);

 

update 학생 set 주소 = '인천' where 이름 = '장길산';

 

delete from 학생 where 이름 = '장길산';

 

grant update on 학생 to 장길산;  그온투

revoke update on 학생 from 장길산;  리온프

 

다중행 연산자

in : 리턴되는 값 중에서 조건에 해당하는 값이 있으면 참

any : 서브쿼리에 의해 리턴되는 각각의 값과 조건을 비교하여 하나 이상을 만족하면 참

all : 값을 서브쿼리에 의해 리턴되는 모든 값과 조건 값을 비교하여 모든 값을 만족해야만 참

exists : 하나라도 존재하면 참

 

집계함수

STDDEV : 복수 행의 해당 컬럼 간의 표준편차

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

 

select dept, job, sum(salary)

from dept_salary

group by rollup(dept, job);

부서명(dept) 직위(job) 연봉(salary)
마케팅부 부장 4000
마케팅부 차장 2000
마케팅부 과장 1500
마케팅부   7500
기획부 부장 3800
기획부 차장 1800
기획부   5600
    13100

 

 

select dept, job, sum(salary)

from dept_salary

group by cube(dept, job);

부서명 직위 연봉
    13100
  부장 7800
  차장 3800
  과장 1500
마케팅부   7500
마케팅부 부장 4000
마케팅부 차장 2000
마케팅부 과장 1500
기획부   5600
기획부 부장 3800
기획부 차장 1800

 

 

윈도함수

select name,

          salary,

         rank() over (order by salary desc) A,

        dense_rank() over (order by salary desc) B,

        row_number() over (order by salary desc) C,

이름 연봉 A B C
장길산 3000 1 1 1
임꺽정 2500 2 2 2
홍길동 2500 2 2 3
김철수 2200 4 3 4
한유리 2000 5 4 5

 

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

사용자 정의 함수 : 일련의 SQL 처리를 수행하고 수행 결과를 단일 값으로 반환

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

 

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