정보처리기사

[8. SQL 응용] 핵심 키워드 정리

김꼬알 2023. 4. 7. 19:07

트랜잭션(Transaction)

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

 

트랜잭션의 특성: ACID

  • 원자성(Atomicity): 트랜잭션의 연산은 데이터베이스에 모두 반영되도록 완료(Commit)되든지 아니면 전혀 반영되지 않도록 복구(Rollback) 되어야 함
  • 일관성(Consistency): 트랜잭션이 그 실행을 성공적으로 완료하면 언제나 일관성있는 데이터베이스 상태로 변환됨
  • 독립성(Isolation): 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우, 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없음
  • 영속성(Durability): 성공적으로 완료된 트랜잭션의 결과는 시스템이 고장나더라도 영구적으로 반영되어야 함

 

트랜잭션의 상태: 활부완실철

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

 

 

병행 제어(Concurrency Control)

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

 

병행 제어의 목적

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

 

병행 제어 미보장 시 문제점: 갱현모연

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

 

병행 제어 기법의 종류: 로 낙타다

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

 

 

회복 기법(Recovery)

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

 

회복 기법의 종류: 회로체그

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

 

 

옵티마이저(Optimizer)

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

 

옵티마이저의 유형

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

 

SQL 수행 과정 내 옵티마이저 역할

  • 쿼리 변환(Query Transform): SQL을 좀 더 일반적이고 표준화된 형태로 변환
  • 비용 산정(Estimator): 쿼리 명령어 각 단계의 선택도, 카디널리티, 비용을 계산
  • 계획 생성(Plan Generator): 하나의 쿼리를 수행 시 후보군이 될 만한 실행 계획들을 생성해내는 역할

 

 

DDL(Data Define Languafe, 데이터 정의어)

DDL의 종류: 크알드트

  • CREATE, ALTER, DROP, TRUNCATE

 

CREATE 문: 도스테뷰인

  • 도메인, 스키마, 테이블, 뷰, 인덱스 등을 정의
/* 스키마 생성 */
CREATE SCHEMA 스키마명 AUTHORIZATION 사용자_id;

/* 도메인 생성*/
CREATE DOMAIN 도메인명 [AS] 데이터_타입
    [DEFAULT 기본값]
    [CONSTRAINT 제약조건명 CHECK (범위값)];
    
/* 테이블 생성 */
CREATE TABLE 테이블명
    (속성명 데이터_타입 [DEFAULT 기본값] [NOT NULL], ...
    [, PRIMARY KEY(기본키_속성명, ...)]
    [, UNIQUE(대체키_속성명, ...)]
    [, FOREIGN KEY(외래키_속성명, ...)]
    	[REFERENCES 참조테이블(기본키_속성명, ...)]
        [ON DELETE 옵션]
        [ON UPDATE 옵션]
    [, CONSTRAINT 제약조건명] [CHECK(조건식)];

/* 뷰 생성 */
CREATE VIEW 뷰명[(속성명[, 속성명, ...])]
AS SELECT문;

/* 인덱스 생성 */
CREATE [UNIQUE] INDEX 인덱스명
ON 테이블명(속성명 [ASC | DESC] [, 속성명 [ASC | DESC]])
[CLUSTER];

 

ALTER 문

  • 테이블에 대한 정의 변경
/* 새로운 속성(열) 추가 */
ALTER TABLE 테이블명 ADD 속성명 테이터_타입 [DERAULT '기본값'];

/* 특정 속성의 Default 값 변경 */
ALTER TABLE 테이블명 ALTER 속성명 [SET DEFAULT '기본값'];

/* 특정 속성 삭제 */
ALTER TABLE 테이블명 DROP COLUMN 속성명 [CASCADE];

 

DROP 문

  • 스키마, 도메인, 기본 테이블, 뷰 테이블, 인덱스, 계약 조건 등을 제거
/* 스키마 제거 */
DROP SCHEMA 스키마명 [CASCADE | RESTRICT];

/* 도메인 제거 */
DROP DOMAIN 도메인명 [CASCADE | RESTRICT];

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

/* 뷰 제거 */
DROP VIEW 뷰명 [CASCADE | RESTRICT];

/* 인덱스 제거 */
DROP INDEX 인덱스명 [CASCADE | RESTRICT];

/* 제약조건 제거 */
DROP CONSTRAINT 제약조건명;
  • CASCADE: 제거할 요소를 참조하는 다른 모든 개체를 함께 제거
  • RESTRICT: 다른 개체가 제거할 요소를 참조 중 일때는 제거를 취소

 

TRUNCATE

  • 테이블에서 모든 행 삭제
TRUNCATE [TABLE] 테이블명 [, 테이블명]

 

 

DCL(Data Control Language, 데이터 제어어)

DCL 종류: 커롤그래

  • COMMIT, ROLLBACK, GRANT, REVOKE

 

GRANT / REVOKE 문

  • GRANT 문: 데이터베이스 관리자가 데이터베이스 사용자에게 권한을 부여
  • REVOKE 문: 데이터베이스 관리자가 데이터베이스 사용자에게 부여한 권한을 취소
/* 사용자 등급 지정 및 해제 */
GRANT 사용자등급 TO 사용자_ID_리스트 [INDENTIFIED BY 암호];
REVOKE 사용자등급 FROM 사용자_ID_리스트;

/* 테이블 및 속성에 대한 권한 부여 및 취소 */
GRANT 권한_리스트 ON 개체 TO 사용자 [WITH GRANT OPTION];
REVOKE [GRANT OPTION FOR] 권한_리스트 ON 개체 FROM 사용자 [CASCADE];
  • 그온투: GRANT 권한 ON 테이블 TO 사용자
  • 리온프: REVOKE 권한 ON 테이블 FROM 사용자
  • 권한 종류: ALL, SELECT, INSERT, DELETE, UPDATE, ALTER 등

 

COMMIT 문

  • 트랜잭션 처리가 정상적으로 완료된 후, 트랜잭션이 수행한 내용을 데이터베이스에 반영
/* <사원> 테이블에서 '사원번호'가 40인 사원의 정보를 삭제한 후, COMMIT을 수행 */
DELETE FROM 사원 WHERE 사원번호 = 40;
COMMIT;

 

ROLLBACK 문

  • 변경되었으나 아직 COMMIT 되지 않은 모든 내용을 취소하고 데이터베이스를 이전 상태로 되돌림
/* SAVEPOINT 'S1'까지 ROLLBACK을 수행 */
ROLLBACK TO S1;

 

SAVEPOINT 문

  • 트랜잭션 내에 ROLLBACK 할 위치인 저장점을 지정
/* SAVEPOINT 'S1'을 설정하고, '사원번호'가 20인 사원의 정보를 삭제 */
SAVEPOINT S1;
DELETE FROM 사원 WHERE 사원번호 = 20;

 

 

TCL(Transaction Control Language)

TCL의 종류: 커롤체

  • COMMIT, ROLLBACK, CHECKPOINT/SAVEPOINT
  • 트랜잭션을 제어하는 용도로 사용

 

 

DML(Data Manipulation Language, 데이터 조작어)

DML의 종류: 세인업데

  • SELECT, INSERT, UPDATE, DELETE

 

SELECT 문

  • 테이블에서 튜플을 검색
SELECT [PREDICATE] [테이블명.] 속성명 [AS 별칭][, [테이블명.] 속성명, ...]
	[, 그룹함수(속성명) [AS 별칭]]
FROM 테이블명[, 테이블명, ...]
[WHERE 조건]
[GRUOP BY 속성명, 속성명, ...]
[HAVING 조건]
[ORDER BY 속성명 [ASC | DESC]];
  • LIKE 연산자
    • %: 모든 문자를 대표함
    • _: 문자 하나를 대표함
    • #: 숫자 하나를 대표함

 

  • 그룹 함수: GROUP BY 절에 지정된 그룹별로 속성의 값을 집계할 때 사용
    • COUNT(속성명): 그룹별 튜플 수를 구하는 함수
    • SUM(속성명): 그룹별 합계를 구하는 함수
    • AVG(속성명): 그룹별 평균을 구하는 함수
    • MAX(속성명): 그룹별 최대값을 구하는 함수
    • MIN(속성명): 그룹별 최소값을 구하는 함수
    • STDDEV(속성명): 그룹별 표준편차을 구하는 함수
    • VARIANCE(속성명): 그룹별 분산을 구하는 함수
    • ROLLUP(속성명, 속성명, ...): 인수로 주어진 속성을 대상으로 그룹별 소계를 구하는 함수
      • 속성의 개수가 n개이면 n+1 레벨까지, 하위 레벨에서 상위 레벨 순으로 데이터가 집계됨
    • CUBE(속성명, 속성명, ...): ROLLUP과 유사한 형태이지만, CUBE는 인수로 주어진 속성을 대상으로 모든 조합의 그룹별 소계를 구함
      • 속성의 개수가 n개이면 2의 n승까지, 상위 레벨에서 하위 레벨 순으로 데이터가 집계됨

 

SELECT 속성명1, 속성명2, ...
FROM 테이블명
UNION | UNION ALL | INTERSECT | EXCEPT
SELECT 속성명1, 속성명2, ...
FROM 테이블명
[ORDER BY 속성명 [ASC | DESC]];
  • 집합 연산자
    • UNION: 합집합
      • 두 SELECT 문의 조회 결과를 통합하여 모두 출력함
      • 중복된 행은 한 번만 출력함
    • UNION ALL: 합집합
      • 두 SELECT 문의 조회 결과를 통합하여 모두 출력함
      • 중복된 행도 그대로 출력함
    • INTERSECT: 교집합
      • 두 SELECT 문의 조회 결과 중, 공통된 행만 출력함
    • EXCEPT: 차집합
      • 첫 번째 SELECT 문의 조회 결과에서 두 번째 SELECT 문의 조회 결과를 제외한 행을 출력함

 

INSERT 문

  • 기본 테이블에 새로운 튜플을 삽입할 때 사용
INSERT INTO 테이블명([속섬영1, 속성명2, ...]) VALUES (데이터1, 데이터2, ...);

 

UPDATE 문

  • 기본 테이블에 있는 튜플들 중에서 특정 튜플(행)의 내용을 변경
UPDATE 테이블명
SET 속성명 = 데이터[, 속성명=데이터, ...]
[WHERE 조건];

 

DELETE 문

  • 기본 테이블에 있는 튜플들 중에서 특정 튜플(행)을 삭제
  • DELETE 문은 테이블 구조나 테이블 자체는 그대로 남겨 두고, 테이블 내의 튜플들만 삭제
    • 테이블을 완전히 제거하려면 DROP 문을 사용
DELETE
FROM 테이블명
[WHERE 조건];

 

서브쿼리(Sub-Query)

  • SQL 문 안에 포함된 또 다른 SQL 문
  • 종류
    • FROM 절 서브쿼리
    • WHERE 절 서브쿼리
/* FROM 절 서브쿼리 */
SELECT MAX(가격)
FROM 도서가격 A, (SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조') B
WHERE A. 책번호 = B. 책번호;

/* WHERE 절 서브쿼리 */
SELECT MAX(가격)
FROM 도서가격
WHERE 책번호 IN (SELECT 책번호 FROM 도서 WHERE 책명 = '자료구조');

 

 

JOIN

  • 2개의 릴레이션에서 연관된 튜플들을 결합하여 하나의 새로운 릴레이션을 반환
  • 일반적으로 FROM 절에 기술하지만, 릴레이션이 사용되는 곳 어디에나 사용할 수 있음
  • 크게 INNER JOIN과 OUTER JOIN으로 구분됨

 

INNER JOIN

EQUI JOIN

  • JOIN 대상 테이블에서 공통 속성을 기준으로 '='(equal) 비교에 의해 같은 값을 가지는 행을 연결하여 결과를 생성하는 JOIN 방법
  • EQUI JOIN에서 JOIN 조건이 '=' 일 때 동일한 속성이 2번 나타나게 되는데, 이 중 중복된 속성을 제거하여 같은 속성을 한 번만 표기하는 방법을 NATURAL JOIN 이라고 함
  • EQUI JOIN에서 연결 고리가 되는 공통 속성을 JOIN 속성이라고 함
/* WHERE 절을 이용한 EQUI JOIN의 표기 형식 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2, ...
WHERE 테이블명1.속성명 = 테이블명2.속성명;

/* NATURAL JOIN 절을 이용한 EQUI JOIN의 표기 형식 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2, ...
WHERE 테이블명1 NATURAL JOIN 테이블명2;

/* JOIN ~ USING 절을 이용한 EQUI JOIN의 표기 형식 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2, ...
WHERE 테이블명1 JOIN 테이블명2 USING(속성명);

 

NON-EQUI JOIN

  • JOIN 조건에 '=' 조건이 아닌 나머지 비교 연산자, 즉 >, <, <>, >=, <= 연산자를 사용하는 JOIN 방법
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2, ...
WHERE 테이블명1 (NON-EQUI JOIN 조건);

 

OUTER JOIN

  • 릴레이션에서 JOIN 조건에 만족하지 않는 튜플도 결과로 출력하기 위한 JOIN 방법

 

LEFT OUTER JOIN

  • INNER JOIN의 결과를 구한 후, 우측 항 릴레이션의 어떤 튜플과도 맞지 않는 좌측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNER JOIN 결과에 추가
/* 방법 1 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 LEFT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;

/* 방법 2 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명(+);

 

RIGHT OUTER JOIN

  • INNER JOIN의 결과를 구한 후, 좌측 항 릴레이션의 어떤 튜플과도 맞지 않는 우측 항의 릴레이션에 있는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가
/* 방법 1 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 RIGHT OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;

/* 방법 2 */
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1, 테이블명2
ON 테이블명1.속성명(+) = 테이블명2.속성명;

 

FULL OUTER JOIN

  • LEFT OUTER JOIN과 RIGHT OUTER JOIN을 합쳐 놓은 것
  • INNER JOIN의 결과를 구한 후, 좌측 항 릴레이션의 튜플들에 대해 우측 항의 릴레이션에 어떤 튜플과도 맞지 않는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가
  • 그리고 우측 항의 릴레이션의 튜플들에 대해 좌측 항의 릴레이션의 어떤 튜플과도 맞지 않는 튜플들에 NULL 값을 붙여서 INNER JOIN의 결과에 추가
SELECT [테이블명1.]속성명, [테이블명2.]속성명, ...
FROM 테이블명1 FULL OUTER JOIN 테이블명2
ON 테이블명1.속성명 = 테이블명2.속성명;

 

 

프로시저(PROCEDURE)

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

 

프로시저 구성: 디비컨 SET

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

 

프로시저 생성

  • 프로시저를 생성하기 위해 CREATE PROCEDURE 명령어를 사용
CREATE [OR REPLACE] PROCEDURE 프로시저명(파라미터)
[지역변수 선언]
BEGIN
    프로시저 BODY;
END;

 

프로시저 실행

  • 프로시저를 실행하기 위해서는 EXECUTE 명령어 또는 CALL 명령어를 사용하며, EXECUTE 명령어를 줄여서 EXEC 로 사용하기도 함
EXECUTE 프로시저명;
EXEC 프로시저명;
CALL 프로시저명;

 

프로시저 제거

  • 프로시저를 제거하기 위해서 DROP PROCEDURE 명령어를 사용
DROP PROCEDURE 프로시저명;

 

 

트리거(TRIGGER)

  • 데이터베이스 시스템에서 데이터의 삽입(Insert), 갱신(Update), 삭제(Delete) 등의 이벤트(Event)가 발생할 때 관련 작업이 자동으로 수행되게 하는 절차형 SQL
  • 트리거의 구문에는 DCL(데이터 제어어)을 사용할 수 없으며, DCL이  포함된 프로시저나 함수를 호출하는 경우 오류가 발생

 

트리거 구성: 디이비컨 SE

  • 선언부(DECLARE)
  • 이벤트부(EVENT)
  • 시작/종료부(BEGIN/END)
  • 제어부(CONTROL)
  • SQL
  • 예외부(EXCEPTION)

 

/* 트리거의 생성 */
CREATE [OR REPLACE] TRIGGER 트리거명 [동작시기 옵션][동작 옵션] ON 테이블명
REFERENCING [NEW | OLD] AS 테이블명
FOR EACH ROW
[WHEN 조건식]
BEGIN
    트리거 BODY;
END;

/* 트리거의 제거 */
DROP TRIGGER 트리거명;

 

 

사용자 정의 함수

  • 프로시저와 유사하게 SQL을 사용하여 일련의 작업을 연속적으로 처리하지만, 종료 시 처리 결과로 단일값 만을 변환하는 절차형 SQL
  • 데이터베이스에 저장되어 SELECT, INSERT, DELETE, UPDATE 등 DML 문의 호출에 의해 실행됨
  • 예약어 RETURN 을 통해 단일값을 반환하며, 출력 파라미터가 없음

 

사용자 정의 함수 구성: 디비컨 SER

  • 선언부(DECLARE)
  • 시작/종료부(BEGIN/END)
  • 제어부(CONTROL)
  • SQL
  • 예외부(EXCEPTION)
  • 반환부(RETURN)

 

/* 사용자 정의 함수 생성 */
CREATE [OR REPLACE] FUNCTION 사용자 정의 함수명(파라미터)
[지역변수 선언]
BEGIN
    사용자 정의 함수 BODY;
    RETURN 반환값;
END;

/* 사용자 정의 함수 실행 */
SELCECT 사용자 정의 함수명 FROM 테이블명;
INSERT INTO 테이블명(속성명) VALUES(사용자 정의 함수명);
DELETE FROM 테이블명 WHERE 속성명 = 사용자 정의 함수명;
UPDATE 테이블명 SET 속성명 = 사용자 정의 함수명;

/* 사용자 정의 함수 제거 */
DROP FUNCTION 사용자 정의 함수명;

 

 

제어문

IF 문

  • 조건에 따라 실행할 문장을 달리하는 제어문
/* 조건이 참일 때만 실행 */
IF 조건 THEN
    실행할 문장1;
    실행할 문장2;
    ...
END IF;

/* 조건이 참일 때와 거짓일 때 실행할 문장이 다름 */
IF 조건 THEN
    실행할 문장1;
ELSE
    실행할 문장2;
END IF;

 

 

LOOP 문

  • 조건에 따라 실행할 문장을 반복 수행하는 제어문
LOOP
    실행할 문장;
    EXIT WHEN 조건;
END LOOP;

 

 

커서(CURSOR)

  • 쿼리문의 처리 결과가 저장되어 있는 메모리 공간을 가리키는 포인터(Pointer)
  • 커서의 수행은 열기(Open), 패치(Fetch), 닫기(Close)의 세 단계로 진행

 

선언 형식

  • (매개변수1, 매개변수2, ...)는 SELECT 문의 WHERE 절에 사용할 수 있으며, 생략이 가능
  • 커서는 SELECT 문의 실행 결과가 저장된 곳의 시작 위치를 가리킴
CURSOR 커서명(매개변수1, 매개변수2, ...)
IS
SELECT문;

 

/* 열기(Open) 형식 */
OPEN 커서명(매개변수1, 매개변수2, ...);

/* 패치(Fetch) 형식 */
FETCH 커서명 INTO 변수1, 변수2, ...;

/* 닫기(Close) 형식 */
CLOSE 커서명;

 

 

윈도 함수

  • 데이터베이스를 사용한 온라인 분석 처리 용도로 사용하기 위해서 표준 SQL에 추가된 함수
SELECT 함수명(파라미터)
    OVER
    ([PARTITION BY 컬럼1, ...]
    [ORDER BY 컬럼A, ...])
FROM 테이블명

 

순위 함수

  • RANK: 특정 항목(컬럼)에 대한 순위를 구하는 함수
  • DENSE_RANK: 레코드의 순위를 계산하는 함수(동일 순위의 레코드 존재 시에도 후순위를 넘어가지 않음)
  • ROW_NUMBER: 레코드의 순위를 계산하는 함수(동일 순위의 값이 존재해도 이와 무관하게 연속 번호를 부여)