[정처기 실기] SQL 응용

선뀰·2024년 6월 28일
0

1. 트랜잭션

논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위

  • 트랜잭션 특성 (ACID)
    1) 원자성 : 연산 전체가 정상적으로 실행
    2) 일관성 : 트랜잭션 수행 전과 수행 완료 후 상태가 같아야 한다.
    3) 격리성=고립성 : 트랜잭션이 서로 영향을 미치지 않아야 한다.
    4) 영속성 : 결과는 영속적으로 데이터베이스에 저장

  • 트랜잭션 제어 TCL
    1) 커밋(COMMIT) : 메모리에 영구적으로 저장
    2) 롤백(ROLLBACK) : 트랜잭션 저장 무효화
    3) 체크포인트(CHECKPOINT) : ROLLBACK을 위한 시점을 지정

  • 병행제어 기법의 종류
    로킹(Locking) : 다른 트랜잭션이 동시에 접근하지 못하도록 상호배제기능을 제공
    낙관적 검증 : 일단 트랜잭션을 수행하고, 종료시 검증을 수행해야 한다.
    타임 스탬프 순서 : 타임스탬프를 부여하고 부여된 시간에 따라 트랜잭션 작업을 수행
    다중버전 동시성 제어 : 직렬가능성이 보장되는 적절한 버전을 선택하여 접근

  • 회복기법(영속성 주요 기법)
    트랜잭션 중간 장애로 인해 손상된 DB를 손상되기 이전의 정상적인 상태로 복구시키는 작업

  • 회복기법 종류
    1) REDO : 데이터베이스 내용이 손상된 경우, 가장 최근의 복제본으로 재작업을 하는 기법
    가장 최근의 복제본을 적재한 후 일어난 변경만을 로그를 이용하여 재실행함으로써 데이터베이스를 복원
    2) UNDO : 트랜잭션들이 작업한 변경 내용들을 모두 취소하는 기법이다. 모든 변경 내용을 취소하여 복원

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

  • 체크 포인트 회복 기법
    검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원

  • 그림자 페이징 회복 기법
    데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법

2. 데이터 정의어 (DDL)

데이터를 담는 그릇을 정의하는 언어, 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 데이터 구조와 관련된 명령어를 데이터 정의어라고 부른다.

- DDL 대상
1) 도메인 : 하나의 속성이 가질 수 있는 원자값들의 집합
2) 스키마 : 데이터베이스 구조, 제약조건 등 정보를 담고 있는 기본적인 구조

외부스키마 : 사용자나 개발자의 관점에서 논리적 구조, 사용자 뷰, 서브 스키마로 불린다.
개념스키마 : 데이터베이스의 전체적인 논리적 구조,
내부스키마 : 물리적 저장 장치의 관점, 내부 레코드의 물리적 순서

3) 테이블 : 데이터 저장 공간
4) 뷰 : 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
5) 인덱스 : 검색을 빠르게 하기 위한 데이터 구조

  • 데이터 정의어 (DDL 명령어) 크알드트로 외우기!!
    SQL을 사용하면 주로 사용될 정의어이다.

1) CREATE : 데이터베이스 오브젝트 생성하는 명령어
2) ALTER : 데이터베이스 오브젝트 변경하는 명령어
3) DROP : 데이터베이스 오브젝트 삭제하는 명령어
4) TRUNCATE : 데이터베이스 오브젝트 내용 삭제하는 명령어

  • 테이블 : 릴레이션, 엔터티라고 불린다.
    튜플 / 행 : 테이블 내의 행을 의미하며 레코드라고 한다.
    카디널리티 : 튜플의 개수
    애트리뷰트 / 열 : 테이블 내의 열을 의미, 열의 개수를 디그리라고 한다.
    차수 : 애트리뷰트의 개수
    식별자 : 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념
    도메인 : 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합

  • 뷰 : 논리 테이블로서 사용자에게 테이블과 동일, 조인 기능 사용 가능,
    But, ALTER문을 이용하여 변경 불가능하다.
    CREATE문, DROP문 사용 가능
    단순 질의어를 사용할 수 있다.

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

1. TABLE생성 DDL

1) CREATE TABLE

CREATE TABLE 테이블명
(
	컬럼명 데이터타입 PRIMARY KEY, --기본키 설정
    컬럼명 데이터타입 FOREIGN KEY REFERENCES 참조테이블(기본키), -- 외래키 설정
    컬럼명 데이터타입 UNIQUE,
    컬럼명 데이터타입 NOT NULL,
    컬럼명 데이터타입 CHECK(조건식), --제약조건 설정
    컬럼명 데이터타입 DEFAULT 값
);

PRIMARY KEY : 기본키
FOREIGN KEY : 외래 키를 정의 참조 대상을 테이블로 명시
UNIQUE : 유일한 값을 갖도록 하는 제약조건
NOT NULL : 해당 컬럼은 NULL값을 포함하지 않도록 하는 제약조건
CHECK : 개발자 정의, 참(TRUE)이어야 하는 조건을 지정
DEFAULT : 데이터 INSERT시 해당 컬럼의 값을 넣지 않는 경우 기본값으로 설정

2) ALTER TABLE 테이블을 수정하는 명령어
ALTER TABLE 테이블명 ADD 컬럼명 데이터타입 [제약조건];

ALTER TABLE 사원 ADD 전화번호 VARCHAR(11) UNIQUE;
				MODIFY : 컬럼을 수정하는 문법
                DROP COLUMN : 테이블에 필요한 컬럼을 삭제하는 문법

3) DROP TABLE 테이블 삭제
DROP TABLE 테이블명 [CASCADE | RESTRICT];
CASCADE와 RESTRICT의 경우 외래키(FOREIGN KEY)가 걸려 있을 때 해당한다.

CASCADE : 참조하는 테이블까지 연쇄적으로 제거
RESTRICT : 다른 테이블이 삭제할 테이블을 참조 중이면 제거하지 않는다.

4) TRUNCATE TABLE 테이블 내의 데이터 삭제 O 테이블 삭제 X
ex. TRUNCATE TABLE 테이블명;

3. VIEW

  • VIEW 관련 DDL
    1) CREATE VIEW : 뷰를 생성하는 명령이다.
CREATE VIEW 뷰이름 AS
조회쿼리;

CREATE VIEW 사원뷰 AS
SELECT 사번, 이름
 FROM 사원
WHERE 성별 = 'M';

2) CREATE OR REPLACE VIEW : 뷰를 교체하는 명령이다.

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

3) DROP VIEW : 뷰를 삭제하는 명령이다.

DROP VIEW 뷰이름;
  • INDEX 관련 DDL
    1) CREATE INDEX
    CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
    ex. CREATE INDEX 사번인덱스 ON 사원(사번);

2) ALTER INDEX
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);
ex. ALTER INDEX 사번인덱스 ON 사원(사번);

3) DROP INDEX
DROP INDEX 인덱스를 삭제하는 명령어이다.
ex. DROP INDEX 사번인덱스;

4. 데이터 조작어(DML)

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

  • DML 명령어 (세인업데로 외우기!)
    1) SELECT : 테이블 내의 칼럼에 저장된 데이터를 조회
    2) INSERT : 테이블 내 칼럼에 데이터를 추가
    3) UPDATE : 테이블 내 칼럼에 저장된 데이터를 수정
    4) DELETE : 테이블 내 칼럼에 저장된 데이터를 삭제

  • SELECT 명령문 순서

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

  • SELECT 절
    ALL : 모든 튜플을 검색할 때 사용
    DISTINCT : 중복된 속성이 조회될 경우 그중 한 개만 검색한다.
    COUNT(DISTINCT) : 중복된 값을 제거한 튜플의 개수를 출력

  • FROM 절
    검색될 데이터를 포함하는 테이블명

  • WHERE 절
    검색할 조건

    1) 비교 : =, <>, !=, >=, <=
    2) 범위 : 칼럼 BETWEEN 값1 AND 값2, 컬럼 >= 값1 AND 컬럼 <= 값2
    3) 집합 : 칼럼 IN (값1, 값2, ...) 칼럼 NOT IN (값1, 값2, ...)
    4) 패턴 : 칼럼 LIKE 패턴
    % : 0개 이상의 문자열과 일치
    ex. '데%' 데로 시작되는 문자열 검색
    [ ] : 1개의 문자와 일치
    ex. '[ABCD]' 'A','B','C','D'인 문자열과 일치하는 문자열 검색
    [^] : 1개의 문자와 불일치
    _ : 특정 위치의 1개의 문자와 일치
    5) NULL
    6) 복합조건 : AND, OR, NOT 조건

  • GROUP BY 절
    속성값을 그룹으로 분류할 때 사용

  • HAVING 절
    GROUP BY에 의해 분류한 후 그룹에 대한 조건을 지정할 때
    ex. GROUP BY 직책, 부서
    HAVING 급여합계 >= 5000;

  • ORDER BY 절
    속성값을 정렬할 때 [ASE | DESC] 기본값은 오름차순이다.

5. 조인(JOIN)

두개 이상의 테이블을 연결하여 데이터를 검색하는 방법이다.

  • 내부조인 (Inner join)
    공통 존재 컬럼의 값이 같은 경우 추출하는 기법
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2
FROM 테이블1 A [INNER] JOIN 테이블2 B
	ON 조인조건
[WHERE 검색조건];
  • 외부 조인 (Outer join)
    1) 왼쪽 외부 조인 (Left Outer Join) : 왼쪽 테이블의 모든 데이터, 오른쪽 테이블의 동일 데이터 추출
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2 
FROM 테이블1 A LEFT [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건]

2) 오른쪽 외부 조인 (Right Outer Join) : 오른쪽 테이블의 모든 데이터, 왼쪽 테이블의 동일 데이터 추출하는 기법

SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2 
FROM 테이블1 A RIGHT [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건]

3) 완전 외부 조인 (Full Outer Join) : 양쪽의 모든 데이터를 추출하는 기법

SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2 
FROM 테이블1 A FULL [OUTER] JOIN 테이블2 B
ON 조인조건
[WHERE 검색조건]
  • 교차 조인 (Cross Join) : 조인 조건이 없는 모든 데이터 조합을 추출하는 기법
SELECT 컬럼1, 컬럼2
FROM 테이블1 CROSS JOIN 테이블2
  • 셀프 조인 (Self Join) : 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법
    같은 테이블을 사용하고, 별칭만 A,B와 같은 다른 값으로 지정한다.
SELECT A.컬럼1, A.컬럼2, B.컬럼1, B.컬럼2 
FROM 테이블1 A [INNER] JOIN 테이블1 B
ON 조인조건
[WHERE 검색조건]

6. 서브쿼리(Sub-Query)

SQL문 안에 포함된 또 다른 SQL문이다. 서브쿼리에 사용되는 컬럼 정보는 메인쿼리의 컬럼 정보를 사용할 수 있지만, 역으로 성립하지 않는다.

  • 서브쿼리 유형
    1) FROM 절 서브쿼리 : 서브쿼리가 FROM절 안에 들어있는 상태, 인라인 뷰라고 한다. 뷰처럼 동적으로 생성된 테이블 형태로 사용
SELECT MAX(가격) AS 가격
FROM 도서가격 A,
	(SELECT 책번호
    	FROM 도서
        WHERE 책명='자료구조') B
WHERE A.책번호 = B.책번호

2) WHERE 절 서브쿼리 : WHERE절 안에 들어있는 형태, 중첩 서브쿼리 라고 불린다.

SELECT MAX(가격) AS 가격
FROM 도서가격
WHERE 책번호 IN (SELECT 책번호
				FROM 도서
                WHERE 책명='자료구조');
  • 집합 연산자
    테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식이다.
    1) UNION : 중복 행이 제거된 쿼리 결과를 반환
    2) UNION ALL : 중복 행이 제거되지 않은 쿼리 결과를 반환
    3) INTERSECT : 두 쿼리에 공통적으로 존재하는 결과를 반환
    4) MINUS : 첫 쿼리에 있고, 두 번째 쿼리에 없는 결과를 반환 (A-B OR B-A)
profile
공부 기록

0개의 댓글