과목 II. SQL 기본 및 활용
제2장 SQL 활용
제1절 서브 쿼리
제2절 집합 연산자
제3절 그룹 함수
제4절 윈도우 함수
제5절 Top N 쿼리
제6절 계층형 질의와 셀프 조인
제7절 PIVOT 절과 UNPIVOT 절
제8절 정규 표현식
# 다중 칼럼(Multi Column) 서브 쿼리
* 서브 쿼리의 실행 결과로 여러 칼럼을 반환한다. 메인 쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. 서브 쿼리와 메인 쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 한다.
# 집합 연산자
* UNION: 여러 개의 SQL 문의 결과에 대한 합집합으로 결과에서 모든 중복된 행은 하나의 행으로 만든다.
* UNION ALL: 여러 개의 SQL 문의 결과에 대한 합집합으로 중복된 행도 그대로 결과로 표시된다. 즉, 단순히 결과만 합쳐놓은 것이다. 일반적으로 여러 질의 결과가 상호 배타적(Exclusive)일 때 많이 사용한다. 개별 SQL 문의 결과가 서로 중복되지 않는 경우, UNION과 결과가 동일하다. (결과의 정렬 순서에는 차이가 있을 수 있음)
* INTERSECT: 여러 개의 SQL 문의 결과에 대한 교집합이다. 중복된 행은 하나의 행으로 만든다.
* EXCEPT: 앞의 SQL 문의 결과에서 뒤의 SQL 문의 결과에 대한 차집합이다. 중복된 행은 하나의 행으로 만든다. (일부 데이터베이스는 MINUS를 사용함)
# 오라클 계층형 질의
* START WITH 절은 계층 구조의 시작점을 지정하는 구문
* ORDER SIBLINGS BY 절은 형제 노드 사이에서 정렬을 지정하는 구문
* 순방향 전개란 부모 노드로부터 자식 노드 방향으로 전개하는 것
* 루트 노드의 LEVEL 값은 1이다.
# 계층형 질의문
* SQL Server에서의 계층형 질의문은 CTE(Common Table Expression)를 재귀 호출함으로써 계층 구조를 전개한다.
* SQL Server에서의 계층형 질의문은 앵커 멤버를 실행하여 기본 결과 집합을 만들고 이후 재귀 멤버를 지속적으로 실행한다.
* 오라클의 계층형 질의문에서 WHERE 절은 모든 전개를 진행한 이후 필터 조건으로서 조건을 만족하는 데이터만을 추출하는 데 활용된다.
* 오라클 계층형 질의문에서 PRIOR 키워드는 SELECT, WHERE 절에서도 사용할 수 있다.
# 반환되는 데이터의 형태에 따른 서브 쿼리 분류
* Single Row 서브 쿼리(단일 행 서브 쿼리): 서브 쿼리의 실행 결과가 항상 1건 이하인 서브 쿼리를 의미한다. 단일 행 서브 쿼리는 단일 행 비교 연산자와 함께 사용된다. 단일 행 비교 연산자에는 =, <, <=, >, >=, <>이 있다.
* Multi Row 서브 쿼리(다중 행 서브 쿼리): 서브 쿼리의 실행 결과가 여러 건인 서브 쿼리를 의미한다. 다중 행 서브 쿼리는 다중 행 비교 연산자와 함께 사용된다. 다중 행 비교 연산자에는 IN, ALL, ANY, SOME, EXISTS가 있다.
* Multi Column 서브 쿼리(다중 칼럼 서브 쿼리): 서브 쿼리의 실행 결과로 여러 칼럼을 반환한다. 메인 쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. 서브 쿼리와 메인 쿼리에서 비교하고자 하는 칼럼 개수와 칼럼의 위치가 동일해야 한다.
# 윈도우 함수
* PERCENT_RANK: 파티션별 윈도우에서 제일 먼저 나오는 것을 0으로, 제일 늦게 나오는 것을 1로 하여, 값이 아닌 행의 순서별 백분율을 구하는 함수
* DENSE_RANK: 순위를 구하는 함수로 동일한 순위를 하나의 등수로 취급
* CUME_DIST: 파티션별 윈도우의 전체 건수에서 현재 행보다 작거나 같은 건수에 대한 누적 백분율을 구하는 함수
* RANK: 파티션 내의 ORDER BY에 의한 순위를 구하는 함수로, 동일한 순위에 대해서는 동일한 순위를 부여
* RATIO_TO_REPORT: 파티션 내의 주어진 칼럼 값에 대한 합계와 행별 백분율을 소수점으로 구하는 함수
* NTILE: 파티션별 전체 건수를 주어진 인자로 N 등분한 결과를 반환
* PARTITION BY 절과 GROUP BY 절은 의미적으로 유사
* PARTITION BY 절이 없으면 전체 집합을 하나의 Partition으로 정의한 것과 동일
* 결과에 대한 함수 처리
* 윈도위 함수의 적용 범위는 Partition을 넘을 수 없다.
# 서브 쿼리
* 단일 행 서브 쿼리의 비교 연산자는 다중 행 서브 쿼리의 비교 연산자로 사용할 수 없지만, 반대의 경우는 가능하다.
* 비 연관 서브 쿼리가 주로 메인 쿼리에 값을 제공하기 위한 목적으로 사용된다.
* 메인 쿼리의 결과가 서브 쿼리로 제공될 수도 있고, 서브 쿼리의 결과가 메인 쿼리로 제공될 수 있으므로 실행 순서는 상황에 따라 달라진다.
# 뷰
* 뷰는 단지 정의만을 가지고 있으며, 실행 시점에 질의를 재작성하여 수행한다.
* 뷰의 장점 중 독립성은 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다.
* 뷰는 보안을 강화하기 위한 목적으로도 활용될 수 있다.
* 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS도 있다.
# GRANT와 REVOKE
* 어떤 사용자가 WITH GRANT OPTION과 함께 권한을 허가받았으면 그 사용자는 해당 권한을 WITH GRANT OPTION 유무와 관계없이 다른 사용자에게 허가할 수 있다.
* PUBLIC을 사용하면 자신에게 허가된 권한을 모든 사용자들에게 허가할 수 있다.
* REVOKE 문을 사용하여 권한을 취소하면 권한을 취소당한 사용자가 WITH GRANT OPTION을 통해서 다른 사용자에게 허가했던 권한들도 모두 연쇄적으로 취소된다.
* REVOKE 문을 사용하여 권한을 취소할 때 그 권한을 허가한 사용자가 권한을 취소할 수 있다.
'study .. > SQLD' 카테고리의 다른 글
| [과목 II. SQL 기본 및 활용] 제3장 관리 구문: contents (0) | 2025.08.21 |
|---|---|
| [과목 II. SQL 기본 및 활용] 제3장 관리 구문: index (1) | 2025.08.20 |
| [과목 II. SQL 기본 및 활용] 제2장 SQL 활용: index (1) | 2025.08.18 |
| [과목 II. SQL 기본 및 활용] 제1장 SQL 기본: contents (2) | 2025.08.17 |
| [과목 II. SQL 기본 및 활용] 제1장 SQL 기본: index (1) | 2025.08.17 |