정보처리기사
[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 문의 조회 결과를 제외한 행을 출력함
- UNION: 합집합
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: 레코드의 순위를 계산하는 함수(동일 순위의 값이 존재해도 이와 무관하게 연속 번호를 부여)