38. [SQL 응용] 트랜잭션

y55n·2022년 4월 2일
0

정보처리기사

목록 보기
39/50
post-custom-banner

수제비 2022 정보처리기사 실기 수험서를 보고 공부한 기록입니다.


👉트랜잭션

1. 트랜잭션(Transaction)의 개념

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

2. 트랜잭션의 특성

특성설명주요기법
원자성 (Atomicity)-트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 하는 성질
-트랜잭션의 연산 전체가 성공 또는 실패(All or Nothing)되어야 하는 성질
-Commit/Rollback
-회복성 보장
일관성 (Consistency)-시스템이 가지고 있는 고정요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 하는 성질-무결성 제약조건
-동시성 제어
격리성=고립성 (Isolation)-동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다는 성질-Read Uncommitted
-Read Committed
-Repeatable Read
-Serializable
영속성 (Durability)-성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장되어야 하는 성질-회복기법

3. 트랜잭션의 상태 변화

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

4. 트랜잭션 제어

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

▼ TCL 명령어

명령어핵심설명
커밋(COMMIT)트랜잭션 확정트랜잭션을 메모리에 영구적으로 저장하는 명령어
롤백(ROLLBACK)트랜잭션 취소트랜잭션 내역을 저장 무료화시키는 명령어
체크포인트(CHECKPOINT)저장 시기 설정ROLLBACK을 위한 시점을 지정하는 명령어

5. 병행 제어(일관성 주요 기법)

① 병행 제어(Concurrency Control) 개념

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

② 병행 제어의 목적

  • 데이터베이스의 공유를 최대화한다
  • 시스템의 활용도를 최대화한다
  • 데이터베이스의 일관성을 유지한다
  • 사용자에 대한 응답시간을 최소화한다

③ 병행 제어 미보장 시 문제점

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

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

④ 병행 제어 기법의 종류

  • 로킹(Locking)
    • 같은 자원을 액세스하는 다중 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 직렬화 기법
    • 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음
    • 로킹 단위가 작아지면 데이터베이스 공유도가 증가
    • 로킹 단위가 작아지면 로킹 오버헤드가 증가
    • 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함
  • 낙관적 검증(Optimistic Validation)
    • 트랜잭션이 어떤한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법
  • 타임 스탬프 순서(Time Stamp Ordering)
    • 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프(Time Stamp)을 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
  • 다중버전 동시성 제어(MVCC; Multi Version Concurrency Control)
    • 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법

6. 데이터베이스 고립화 수준(격리성 주요 기법)

① 고립화 수준(Isolation Level) 개념

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

② 고립화 수준 종류

  • Read Uncommitted
    • 한 트랜잭션에서 연산(갱신) 중인(아직 커밋되지 않은) 데이터를 다른 트랜잭션이 읽는 것을 허용하는 수준
    • 연산(갱신) 중인 데이터에 대한 연산은 불허
  • Read Committed
    • 한 트랜잭션에서 연산(갱신)을 수행할 때, 연산이 완료될 때까지 연산 대상 데이터에 대한 읽기를 제한하는 수준
    • 연산이 완료되어 커밋된 데이터는 다른 트랜잭션이 읽는 것을 허용
  • Repeatable Read
    • 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료 시까지 해당 데이터에 대한 갱신·삭제를 제한하는 수준
  • Serializable Read
    • 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한하는 수준

7. 회복 기법(영속성 주요 기법)

① 회복 기법(Recovery) 개념

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

② 회복 기법 종류

  • 로그 기반 회복 기법
    • 지연 갱신 회복 기법(Deferred Update): 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법
    • 즉각 갱신 회복 기법(Immediate Update): 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법
  • 체크 포인트 회복 기법(Checkpoint Recovery):장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원시키는 회복 기법
  • 그림자 페이징 회복 기법(Shadow Paging Recovery): 데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법

👉DDL

1. 데이터 정의어(DDL; Data Definition Language)의 개념

  • 데이터 정의어는 데이터를 정의하는 언어로서 '데이터를 담는 그릇을 정의하는 언어'이다
  • 테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령어들로 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 데이터 구조와 관련된 명령어들을 데이터 정의어라고 부른다

2. DDL의 대상

  • 도메인(Domain)
    • 하나의 속성이 가질 수 있는 원자값들의 집합
    • 속성의 데이터 타입과 크기, 제약조건 등의 정보
  • 스키마(Schema)
    • 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조
    • 스키마는 외부/개념/내부 3계층으로 구성되어 있음
    • 외부 스키마(External Schema)
      • 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조
      • 사용자 뷰를 나타냄
      • 서브 스키마로 불림
    • 개념 스키마(Conceptual Schema)
      • 데이터베이스의 전체적인 논리적 구조
      • 전체적인 뷰를 나타냄
      • 개체 간의 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의
    • 내부 스키마(Internal Schema)
      • 물리적 저장장치의 관점에서 보는 데이터베이스 구조
      • 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 표현
  • 테이블(Table): 데이터 저장 공간
  • 뷰(View): 하나 이상의 물리 테이블에서 유도되는 가상의 테이블
  • 인덱스(Index): 검색을 빠르게 하기 위한 데이터 구조

① 테이블(Table)

▼테이블의 개념

  • 테이블은 데이터를 저장하는 항목인 필드(Field)들로 구성된 데이터의 집합체이다
  • 하나의 DB 내에 여러 개의 테이블로 구성될 수 있고, 릴레이션(Relation) 혹은 엔터티(Entity)라고도 불린다

▼테이블의 용어

  • 튜플(Tuple)/행(Row)
    • 테이블 내의 행을 의미하며 레코드(Record)라고도 함
    • 튜플은 릴레이션(Relation)에서 같은 값을 가질 수 없음
  • 애트리뷰트(Attribute)/열(Column)
    • 테이블 내의 열을 의미
    • 열의 개수를 디그리(Degree)라고 함
  • 식별자(Identifier): 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분할 수 있는 논리적인 개념
  • 카디널리티(Cardinality): 튜플(Tuple)의 개수
  • 차수(Degree): 애트리뷰트(Attribute)의 개수
  • 도메인(Domain): 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합

② 뷰(View)

▼뷰의 개념

  • 뷰는 논리 테이블로서 사용자에게(생성 관점 아닌 사용 관점에서) 테이블과 동일하다
  • 뷰와 같은 결과를 만들기 위해 조인 기능을 활용할 수 있느나, 뷰가 만들어져 있다면 사용자는 조인 없이 하나의 테이블을 대상으로 하는 단순한 질의어를 사용할 수 있다

▼뷰의 특징

  • 논리적 데이터 독립성 제공: 데이터베이스에 영향을 주지 않고 애플리케이션이 원하는 형태로 데이터에 접근 가능
  • 데이터 조작 연산 간소화: 애플리케이션이 원하는 형태의 논리적 구조를 형성하여 데이터 조작 연산을 간소화
  • 보안 기능(접근제어) 제공: 특정 필드만을 선택해 뷰를 생성할 경우 애플리케이션은 선택되지 않은 필드의 조회 및 접근 불가
  • 뷰 변경 불가: 뷰 정의는 ALTER 문을 이용하여 변경할 수 없음(뷰는 CREATE 문을 사용하여 정의, 뷰를 제거할 때에는 DROP 문을 사용)

▼뷰의 목적

  • 뷰를 사용하는 주된 이유는 단순 질의어를 사용할 수 있기 때문이다
  • FROM 절에 있는 하나의 뷰를 통해 뷰를 구성하는 복수의 테이블을 대체하는 단순성에 그 의의가 있다
  • 테이블의 중요 데이터 일부만을 제공할 수 있는 장단점이 있다

▼뷰의 장점

  • 논리적 독립성 제공: 뷰는 논리 테이블(테이블의 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨)
  • 사용자 데이터 관리 용이: 복수 테이블에 존재하는 여러 종류의 데이터에 대해 단순한 질의어 사용이 가능
  • 데이터 보안의 용이
    • 중요 보안 데이터를 저장 중인 테이블에는 접근 불허
    • 해당 테이블의 일부 정보만을 볼 수 있는 뷰에는 접근을 허용
    • 보안 데이터에 대한 접근 제어 가능

▼뷰의 단점

  • 뷰 자체 인덱스 불가: 인덱스는 물리적으로 저장된 데이터를 대상으로 하기에 논리적 구성인 뷰 자체는 인덱스를 가지지 못함
  • 뷰 정의 변경 불가: 뷰의 정의를 변경하려면 뷰를 삭제하고 재생성
  • 데이터 변경 제약 존재: 뷰의 내용에 대한 삽입, 삭제, 변경 제약이 있음

③ 인덱스(Index)

▼인덱스의 개념

  • 인덱스는 검색 연산의 최적화를 위해 데이터베이스 내 값에 대한 주소 정보로 구성된 데이터 구조이다
  • 인덱스는 데이터를 빠르게 찾을 수 있는 수단으로서, 테이블에 대한 조회 속도를 높여 주는 자료 구조이다
  • 인덱스는 테이블의 특정 레코드 위치를 알려 주는 용도로 사용한다

▼인덱스의 특징

  • 기본 키(PK; Primary Key)컬럼은 자동으로 인덱스가 생성된다
  • 연월일이나 이름을 기준으로 하는 인덱스는 자동으로 생성되지 않는다
  • 테이블의 컬럼에 인덱스가 없는 경우, 테이블의 전체 내용을 검색한다(테이블 전체 스캔; Table Full Scan)
  • 인덱스가 생성되어 있을 때 데이터를 빠르게 찾을 수 있다(인덱스 범위 스캔; Index Range Scan)
  • 조건절에'='로 비교되는 컬럼을 대상으로 인덱스를 생성하면 검색 속도를 높일 수 있다

▼인덱스의 종류

  • 순서 인덱스(Ordered Index)
    • 데이터가 정렬된 순서로 생성되는 인덱스
    • B-Tree 알고리즘 활용(오름차순/내림차순 지정가능)
  • 해시 인덱스(Hash Index)
    • 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스
    • 데이터 접근 비용이 균일, 튜플(Row) 양에 무관
  • 비트맵 인덱스(Bitmap Index)
    • 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스
    • 수정 변경이 적을 경우 유용(생년월일, 상품번호 등)
  • 함수기반 인덱스(Functional Index)
    • 수식이나 함수를 적용하여 만든 인덱스
  • 단일 인덱스(Singled Index)
    • 하나의 컬럼으로만 구성한 인덱스
    • 주 사용 컬럼이 하나일 경우 사용
  • 결합 인덱스(Concatenated Index)
    • 두 개 이상의 컬럼으로 구성한 인덱스
    • WHERE 조건으로 사용하는 빈도가 높은 경우 사용
  • 클러스터드 인덱스(Clustered Index)
    • 기본 키(PK) 기준으로 레코드를 묶어서 저장하는 인덱스
    • 저장 데이터의 물리적 순서에 따라 인덱스가 생성
    • 특정 범위 검색 시 유리함

▼인덱스의 스캔 방식

  • 인덱스 범위 스캔(Index Range Scan): 인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식
  • 인덱스 전체 스캔(Index Full Scan): 수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식
  • 인덱스 단일 스캔(Index Unique Scan): 수직적 탐색만으로 데이터를 찾은 스캔 방식
  • 인덱스 생략 스캔(Index Skip Scan): 선두 컬럼이 조건 절에 빠졌어도 인덱스를 활용하는 스캔방식

3. DDL 명령어

구분 DDL 명령어설명
생성CREATE데이터베이스 오브젝트 생성하는 명령어
수정ALTER데이터베이스 오브젝트 변경하는 명령어
삭제DROP데이터베이스 오브젝트 삭제하는 명령어
TRUNCATE데이터베이스 오브젝트 내용 삭제하는 명령어

4. TABLE 관련 DDL

① CREATE TABLE

  • CREATE TABLE은 테이블을 생성하는 명령이다
  • CREATE TABLE에서 하나의 컬럼(속성)에 대해 '컬러명 데이터타입 제약조건' 으로 구성된다

▼CREATE TABLE 기본문법

CREATE TABLE 테이블명
(
	컬럼명 데이터타입 [제약조건],
	...
);

▼CREATE TABLE 상세문법

CREATE TABLE 테이블명
(
	컬럼명 데이터타입 PRIMARY KEY, --기본키 설정
	컬럼명 데이터타입 FOREIGN KEY REFERENCES 참조테이블(기본키), --외래키 설정
	컬럼명 데이터타입 UNIQUE,
	컬럼명 데이터타입 NOT NULL,
	컬럼명 데이터타입 CHECK(조건), --제약조건 설정
	컬럼명 데이터타입 DEFAULT);
  • CREATE TABLE에 들어갈 수 있는 제약조건으로는 기본 키(PRIMARY KEY), 외래 키(FOREIGN KEY), UNIQUE, NOT NULL, CHECK, DEFAULT가 있다

▼CREATE TABLE 제약조건

  • PRIMARY KEY
    • 테이블의 기본 키를 정의
    • 유일하게 테이블의 각 행을 식별
  • FOREIGN KEY
    • 외래 키를 저으이
    • 참조 대상을 테이블(컬럼명)로 명시
    • 열과 참조된 테이블의 열 사이의 외래 키 관계를 적용하고 설정
  • UNIQUE
    • 테이블 내에서 얻은 유일한 값을 갖도록 하는 제약조건
  • NOT NULL
    • 해달 컬럼은 NULL 값을 포함하지 않도록 하는 제약조건
  • CHECK
    • 개발자가 정의하는 제약조건
    • 참(TRUE)이어야 하는 조건을 지정
  • DEFAULT
    • 데이터를 INSERT 할 때 해당 컬럼의 값을 넣지 않는 경우 기본값으로 설정해 주는 제약조건

② ALTER TABLE

  • ALTER TABLE은 테이블을 수정하는 명령이다

▼ALTER TABLE 컬럼 추가

  • 테이블에 필요한 컬럼을 추가하는 문법이다
  • CREATE TABLE의 컬럼에 사용되는 제약조건인 PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK, DEFAULT를 ALTER TABLE에서도 사용할 수 있다

▼ALTER TABLE 컬럼 추가 문법

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

▼ALTER TABLE 컬럼 수정

  • 테이블에 필요한 컬럼을 수정하는 문법이다
  • 테이블 생성을 위한 CREATE 문에 제약조건을 명시 후에 ALTER를 통해 테이블 제약조건의 변경이 가능하다

▼ALTER TABLE 컬럼 수정 문법

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

▼ALTER TABLE 컬럼 삭제

  • 테이블에 필요한 컬럼을 삭제하는 문법이다

▼ALTER TABLE 컬럼 삭제 문법

ALTER TABLE 테이블명 DROP 컬럼명;

③ DROP TABLE

  • DROP TABLE은 테이블을 삭제하는 명령이다
DROP TABLE 테이블명 [CASCADE | RESTRICT];
  • DROP TABLE 명령어의 옵션에는 CASCADE와 RESTRICT가 있다
  • CASCADE와 RESTRICT의 경우 외래 키(FOREIGN KEY)가 걸려 있을 때 해당한다

▼DROP TABLE 명령어 옵션

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

④ TRUNCATE TABLE

  • TRUNCATE TABLE은 테이블 내의 데이터들을 삭제하는 명령이다
TRUNCATE TABLE 테이블명;

5. VIEW 관련 DDL

① CREATE VIEW

  • CREATE VIEW는 뷰를 생성하는 명령이다
CREATE VIEW 뷰이름 AS 조회쿼리;
  • VIEW 테이블의 SELECT 문에는 UNION이나 ORDER BY 절을 사용할 수 없다
  • 컬럼명을 기술하지 않으면 SELECT 문의 컬럼명이 자동으로 사용된다

② CREATE OR REPLACE VIEW

  • CREATE OR REPLACE VIEW는 뷰를 교체하는 명령이다
  • OR REPLACE라는 키워드를 추가하는 것을 제외하고는 CREATE VIEW와 사용 방법이 동일하다
CREATE OR REPLACE VIEW 뷰이름 AS 조회쿼리;

③ DROP VIEW

DROP VIEW 뷰이름;

6. INDEX 관련 DDL

① CREATE INDEX

  • CREATE INDEX는 인덱스를 생성하는 명령이다
  • UNIQUE는 생략 가능하고, 인덱스 걸린 컬럼에 중복 값을 허용하지 않는다
  • 복수 컬럼을 인덱스로 걸 수 있다
CREATE [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);

② ALTER INDEX

  • ALTER INDEX는 인덱스를 수정하는 명령어이다
  • 일부 DBMS는 ALTER INDEX를 제공하지 않는다
  • 기존 인덱스를 삭제하고 신규 인덱스를 생성하는 방식으로 사용을 권고한다
ALTER [UNIQUE] INDEX 인덱스명 ON 테이블명(컬럼명1, 컬럼명2, ...);

③ DROP INDEX

  • DROP INDEX는 인덱스를 삭제하는 명령어이다
DROP INDEX 인덱스명;

👉DML

1. 데이터 조작어(DML; Data Manipulation Language)의 개념

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

2. DML 명령어

  • 데이터 조작어(DML)의 유형에는 SELECT, INSERT, UPDATE, DELETE가 있다
  • SELECT(조회): 테이블 내 칼럼에 저장된 데이터를 조회
  • INSERT(삽입): 테이블 내 칼럼에 데이터를 추가
  • UPDATE(갱신): 테이블 내 칼럼에 저장된 데이터를 수정
  • DELETE(삭제): 테이블 내 칼럼에 저장된 데이터를 삭제

3. SELECT(데이터 조회) 명령어

① SELECT 명령어 개념

  • SELECT 명령어는 데이터의 내용을 조회할 때 사용하는 명령어이다
  • SELECT 명령어는 SELECT절, FROM절, WHERE절, GROUP BY절, HAVING절, ORDER BY절로 구성된다
SELECT [ALL | DISTINCT] 속성명1, 속성명2, ...
FROM 테이블명1, ...
[WHERE 조건]
[GROUP BY 속성명1, ...]
[HAVING 그룹조건]
[ORDER BY 속성 [ASC | DESC]];
  • SELECT 절
    • 검색하고자 하는 속성명, 계산식을 기술
    • 속성명 별칭은 AS를 사용하며 생략 가능함
    • 2개 이상의 테이블을 대상으로 검색할 때는 '테이블명.속성명'으로 표현
    • 술어 부분은 ALL이 기본값
    • ALL
      • 모든 튜플을 검색할 때 사용
      • SELECT 뒤에 명시하지 않은 경우 ALL로 인식
    • DISTINCT
      • 중복된 속성이 조회될 경우 그 중 한 개만 검색(SELECT 뒤에 명시된 속성이 중복될 경우 한 개만 검색)
  • FROM 절
    • 질의에 의해 검색될 데이터들을 포함하는 테이블명을 기술
  • WHERE 절
    • 검색할 조건을 기술
  • GROUP BY 절
    • 속성값을 그룹으로 분류하고자 할 때 사용
  • HAVING 절
    • GROUP BY에 의해 분류한 후 그룹에 대한 조건 지정
  • ORDER BY 절
    • 속성값을 정렬하고자 할 때(ASC: 오름차순, DESC: 내림차순, ASC, DESC 키워드 생략 시 오름차순 정렬) 사용

▼SELECT 절

  • SELECT 절은 테이블에서 출력할 컬럼을 명시하기 위해 사용한다

▼WHERE 절

[비교]

\= : 값이 같은 경우 조회

<>, != : 값이 다른 경우 조회

<, <=, >, >= : 비교 연산에 해당하는 데이터 조회

[범위]

BETWEEN: 컬럼 BETWEEN 값1 AND 값2 =>값1보다 크거나 같고, 값2보다 작거나 같은 데이터 조회 ( 컬럼>=값1 AND 컬럼<=값2 와 같은 결과)

[집합]

IN: 컬럼 IN (값1, 값2, ...) => 컬럼이 IN 안에 포함된 경우의 데이터 조회

NOT IN: 컬럼 NOT IN (값1, 값2, ...) => 컬럼이 IN 안에 포함되어 있지 않은 경우의 데이터 조회

[패턴]

LIKE: 컬럼 LIKE 패턴

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

[NULL]

IS NULL: 컬럼 IS NULL => 컬럼이 NULL인 데이터 조회

IS NOT NULL: 컬럼 IS NOT NULL => 컬럼이 NULL이 아닌 데이터 조회

[복합조건]

AND: 조건1 AND 조건2 => 조건1과 조건2 모두를 만족하는 데이터 조회

OR: 조건1 OR 조건2 => 조건1과 조건2 둘 중 하나를 만족하는 데이터 조회

NOT, ! : NOT 조건 => 조건에 해당하지 않는 데이터 조회

▼GROUP BY 절

  • GROUP BY 절은 속성값을 그룹으로 분류하고자 할 때 사용한다

▼HAVING 절

  • HAVING 절은 GROUP BY에 의해 분류한 후 그룹에 대한 조건을 지정할 때 사용한다

▼ORDER BY 절

  • ORDER BY 절은 속성값을 정렬하고자 할 때 사용한다

② 조인(Join)

▼조인 개념

  • 조인은 두 개 이상의 테이블을 연결하여 데이터를 검색하는 방법이다
  • 두 릴레이션으로부터 관련된 튜플들을 결합하여 하나의 튜플로 만드는 가장 대표적인 데이터 연결 방법이다

▼논리적 조인 유형(상세)

  • 내부 조인(Inner Join): 공통 존재 컬럼의 값이 같은 경우를 추출하는 기법
  • 외부 조인(Outer Join)
    • 왼쪽 외부 조인(Left Outer Join): 왼쪽 테이블의 모든 데이터와 오른쪽 테이블의 동일 데이터를 추출하는 기법
    • 오른쪽 외부 조인(Right Outer Join): 오른쪽 테이블의 모든 데이터와 왼쪽 테이블의 동일 
    • 완전 외부 조인(Full Outer Join):양쪽의 모든 데이터를 추출하는 기법
  • 교차 조인(Cross Join): 조인 조건이 없는 모든 데이터 조합을 추출하는 기법
  • 셀프 조인(Self Join): 자기 자신에게 별칭을 지정한 후 다시 조인하는 기법

▼내부 조인

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

▼왼쪽 외부 조인

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 검색조건];

▼교차 조인

SELECT 컬럼1, 컬럼2
FROM 테이블1
CROSS JOIN 테이블2;

▼셀프 조인

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

③ 서브쿼리(Sub-Query)

▼서브쿼리 개념

  • 서브쿼리는 SQL 문 안에 포함된 또 다른 SQL 문이다
  • 서브쿼리의 용도는 알려지지 않은 기준을 위한 검색을 위해 사용한다
  • 메인쿼리와 서브쿼리 관계는 주종 관계로서, 서브쿼리에 사용되는 컬럼 정보는 메인쿼리의 컬럼 정보를 사용할 수 있으나 역으로는 성립하지 않는다

▼서브쿼리 유형

  • FROM 절 서브쿼리
    • 서브쿼리가 FROM 절 안에 들어있는 형태
    • 인라인 뷰(Inline Views)라고 불림
    • 뷰(View)처럼 결과가 동적으로 생성된 테이블 형태로 사용할 수 있음
  • WHERE 절 서브쿼리
    • 서브쿼리가 WHERE 절 안에 들어있는 형태
    • 중첩 서브쿼리(Nested Sub-Query)라고도 불림

④ 집합 연산자(Set Operator)

▼집합 연산자 개념

  • 집합 연산자는 테이블을 집합 개념으로 보고, 두 테이블 연산에 집합 연산자를 사용하는 방식이다
  • 집합 연산자는 여러 질의 결과를 연결하여 하나로 결합하는 방식을 사용한다(집합 연산자는 2개 이상의 질의 결과를 하나의 결과로 만들어 준다)

▼집합 연산자 유형

  • UNION: 중복 행이 제거된 쿼리 결과를 반환하는 집합 연산자
  • UNION ALL: 중복 행이 제거되지 않은 쿼리 결과를 반환하는 집합 연산자
  • INTERSECT: 두 쿼리 결과에 공통적으로 존재하는 결과를 반환하는 집합 연산자
  • MINUS: 첫 쿼리에 있고 두 번째 쿼리에는 없는 결과를 반환하는 집합 연산자

4. INSERT(데이터 삽입) 명령어

INSERT는 데이터의 내용을 삽입할 때 사용하는 명령어이다

INSERT INTO 테이블명(속성명1, ...)
VALUES (데이터1, ...);
  • 속성과 데이터 개수, 데이터 타입이 일치해야 함
  • 속성명은 생략 가능
  • 속성의 타입이 숫자인 경우 데이터는 따옴표를 붙이지 않아도 되며, 문자열인 경우 따옴표를 붙여야 함

5. UPDATE(데이터 변경) 명령어

UPDATE는 데이터의 내용을 변경할 때 사용하는 명령어이다

UPDATE 테이블명
SET 속성명=데이터, ...
WHERE 조건;
  • UPDATE 명령문은 WHERE 절을 통해 어떤 조건이 만족할 경우에만 특정 컬럼의 값을 수정하는 용도로 자주 사용됨

6. DELETE(데이터 삭제) 명령어

DELETE는 데이터의 내용을 삭제할 때 사용하는 명령어이다

DELETE FROM 테이블명
WHERE 조건;
  • 모든 레코드를 삭제할 때는 WHERE 절 없이 DELETE만 사용
  • 레코드를 삭제해도 테이블 구조는 남아 있어서 디스크에서 테이블을 완전히 삭제하는 DROP 명령과는 다름

👉DCL

1. 데이터 제어어(DCL; Data Control Language)의 개념

  • 데이터 제어어는 데이터베이스 관리자가 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 관리자(DBA)가 사용하는 제어용 언어이다
  • 데이터 제어어의 유형에는 GRANT, REVOKE가 있다

▼DCL의 유형

  • GRANT(사용 권한 부여) : 관리자(DBA)가 사용자에게 데이터베이스에 대한 권한을 부여하는 명령어
  • REVOKE(사용 권한 취소): 관리자(DBA)가 사용자에게 부여했던 권한을 회수하기 위한 명령어

① GRANT(권한 부여) 명령어

  • GRANT는 데이터베이스 관리자(DBA; Database Administrator)가 사용자에게 데이터베이스에 대한 권한을 부여하는 명령어이다
GRANT 권한 ON 테이블 TO 사용자;

② REVOKE(권한 회수) 명령어

  • REVOKE는 데이터베이스 관리자(DBA)가 사용자에게 부여했던 권한을 회수하기 위한 명령어이다
REVOKE 권한 ON 테이블 FROM 사용자;
profile
나 혼자 공부 기록
post-custom-banner

0개의 댓글