열정 실천

[SQLD] 005. SQL 활용 - 서브쿼리, 집합 연산자, 그룹 함수, 원도우 함수 본문

CS/DATABASE

[SQLD] 005. SQL 활용 - 서브쿼리, 집합 연산자, 그룹 함수, 원도우 함수

구운오니 2024. 11. 17. 00:00
728x90

| 01 | 서브 쿼리 

하나의 쿼리 안에 존재하는 또 다른 쿼리 

 

Scalar SubQuery 스칼라 서브쿼리 

주로 SELECT 절에 위치하지만 컬럼이 올 수 있는 대부분의 위치에 사용

컬럼 대신 사용됨으로 반드시 하나의 값만을 반환해야 한다. 

 

 

 

Inline View 인라인 뷰

FROM 절 등 테이블 명이 올 수 있는 위치에 사용

 

 

Nested Subquery 중첩 서브쿼리 

WHERE 절과 HAVING 절에 사용

 

 

| 02 | 뷰(view)

특정 SELECT 문에 이름을 붙여서 재사용이 가능하도록 저장해놓은 오브젝트이다. SQL에서 테이블처럼 사용할 수 있다. 

 

- 보안성 : 보안이 필요한 컬럼을 가진 테이블일 경우 해당 컬럼을 제외한 별도의 뷰를 생성하여 제공한다. 

- 독립성 : 테이블 스키마가 변경되었을 경우 어플리케이션은 변경하지 않고 관련 뷰만 수정한다. 

- 편리성 : 복잡한 쿼리 구문을 뷰명으로 단축시킴으로써 가독성을 높이고 편리하게 사용할 수 있다. 

 

 

 

 

| 03 | 집합 연산자

UNION ALL 각 쿼리의 결과 집합의 합집합. 중복 O
UNION 각 쿼리의 결과 집합의 합집합. 중복 X
INTERSECT 각 쿼리의 결과 집합의 교집합. 중복 O
MINUS/EXCEPT 앞에 있는 쿼리의 결과에서 뒤에 있는 쿼리의 결과를 뺀 차집합. 중복 X

 

 

 

 

| 04 | 그룹 함수

데이터를 GROUP BY하여 나타낼 수있는 데이터를 구하는 함수

 

[ 역할에 따른 구분 ]

집계 함수 COUNT, SUM, AVG, MAX, MIN
소계(총계) 함수 ROLLUP, CUBE, GROUPING SETS

 

 

1. ROLLUP : 소그룹 간의 총계를 계산하는 함수

ROLLUP(A) - A로 그룹핑 
- 총합계
ROLLUP(A, B) - A, B로 그룹핑 
- A로 그룹핑 
- 총합계
ROLLUP(A, B, C) - A, B, C로 그룹핑
- A, B로 그룹핑 
- A로 그룹핑 
- 총합계

 

 

 

2. CUBE : 조합할 수 있는 모든 그룹에 대한 소계를 계산하는 함수

CUBE(A) - A로 그룹핑 
- 총합계
CUBE (A, B) - A, B로 그룹핑 
- A로 그룹핑
- B로 그룹핑 
- 총합계
CUBE(A, B, C) - A, B, C로 그룹핑
- A, B로 그룹핑 
- A, C로 그룹핑 
- B, C로 그룹핑 
- A로 그룹핑
- B로 그룹핑
- C로 그룹핑
- 총합계

 

 

3. GROUPING SETS : 특정 항목에 대한 소계를 계산하는 함수. 

GROUPING SETS (A) - A로 그룹핑 
- B로 그룹핑
GROUPING SETS  (A, B, ( ) ) - A로 그룹핑
- B로 그룹핑 
- 총합계
GROUPING SETS  (A, ROLLUP(B))
- A로 그룹핑
- B로 그룹핑 
- 총합계
GROUPING SETS  (A, ROLLUP(B, C)) - A로 그룹핑 
- B, C로 그룹핑
- B로 그룹핑 
- 총합계
GROUPING SETS (A, B, C) - A로 그룹핑
- B로 그룹핑
- C로 그룹핑
- 총합계

 

* 총계를 더해주려면 인자값에 ( )를 추가해주거나 ROLLUP을 적용해주면 된다. 

 

 

 

4. GROUPING : ROLLUP, CUBE, GROUPING SETS 등과 함께 쓰이며 소계를 나타내는 Row를 구분할 수 있게 해줌 

 

 

 

 

 

 

| 05 | 윈도우 함수

 

순위 함수 RANK, DENSE._RANK, ROW_NUMBER
집계 함수 SUM, MAX, MIN, AVG, COUNT
행 순서 함수 FIRST_VALUE, LAST_VALUE, LAG, LEAD
비율 함수 CUME_DIST, PERCENT_RANK, NTILE, RATIO_TO_REPORT

 

 

1. 순위 함수

 

- RANK : 순위를 매기면서 같은 순위가 존재하면 존재하는 수만큼 다음 순위를 건너뛴다. (1,2,2,4,5,5,7 ...)

- DENSE_RANK : 순위를 매기면서 같은 순위가 존재하더라고 다음 순위를 건너뛰지않는다. (1,2,2,3,4,4,5, ...)

- ROW_RANK : 순위를 매기면서 동일한 값이라도 각기 다른 순위를 부여한다. (1,2,3,4,5,6,7 ...)

 

 

2. 집계함수

 

- SUM : 데이터의 합계를 구하는 함수이다. 숫자형만 인자값으로 올 수 있다. 

- MAX : 데이터의 최댓값을 구하는 함수이다. 

- MIN : 데이터의 최솟값을 구하는 함수이다. 

- AVG : 데이터의 평균값을 구하는 함수이다. 

- COUNT : 데이터의 건수를 구하는 함수이다. 

 

3. 행 순서 함수

- FIRST_VALUE : 파티션 별 가장 선두에 위치한 데이터를 구하는 함수이다. 

- LAST_VALUE : 파티션 별 가장 끝에 위치한 데이터를 구하는 함수이다. 

- LAG : 파티션 별로 특정 수만큼 앞에있는 데이터를 구하는 함수이다. 

- ELAD : 

 

4. 

728x90