[SQLD] SQL활용 - 서브쿼리, 그룹 합수
서브쿼리
- 서브쿼리
하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
서브쿼리는 괄호를 감싸서 사용
서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
서브쿼리에서는 ORDER BY 사용 불가
동작하는 방식에 따른 분류
Un-Correlated(비연관) 서브쿼리 | - 서브쿼리가 메인쿼리 컬럼을 가지고 있지 않은 형태 - 메인쿼리에 값을 제공하기 위한 목적 |
Correlated(연관) 서브쿼리 | - 서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태 - 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 사용 |
반환되는 데이터 형태에 따른 분류
single row 서브쿼리(단일 행 서브쿼리) | - 서브쿼리의 실행 결과가 항상 1건 이하인 서브쿼리 - 단일 행 서브쿼리는 단인 행 비교 연산자와 함께 사용 ex. =, >, <, <=, >=, <> |
multi row 서브쿼리(다중 행 서브쿼리) | - 서브쿼리의 실행 결과가 여러 건인 서브쿼리 - 다중 행 서브쿼리는 다중 행 비교연산자와 함께 사용 ex. in, all, any, some, exists |
multi column 서브쿼리(다중 컬럼 서브쿼리) | - 서브쿼리의 실행 결과로 여러 컬럼을 반환 - 메인쿼리의 조건절에 여러 컬럼 동시 비교 가능 - 서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼 위치가 동일해야함 |
스칼라 서브쿼리
- SELECT 절에서 사용하는 서브쿼리
- 한 행, 한 컬럼만을 반환하는 서브쿼리
인라인뷰
- FROM절에서 사용
- 테이블 명이 올 수 있는 곳에서 사용, ORDER BY 사용 가능
뷰
- 실제 데이터를 가지고 있지 않지만 테이블을 수행하는 역할을 수행하기 때문에 가상 테이블이라고도 함
장점 | 설명 |
독립성 | 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. |
편리성 | 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성한다. |
보안성 | 직원의 급여정보와 같이 숨기고 싶은 정보가 존재할 때 사용 |
그룹 함수(GROUP 함수)
- 그룹함수
하나의 SQL로 테이블을 한 번만 읽어서 빠르게 원하는 리포트를 작성
ROLLUP 함수
Subtotal을 생성하기 위해 사용하며 GROUP BY로 묶인 칼럼의 소계 계산
Grouping Columns의 수를 N이라고 했을 때 N+1 Level의 Subtotal이 생성
계층 구조로 GROUP BY의 칼럼 순서가 바뀌면 결과 값 바뀜. 인수 순서에 주의
* 표현식
GROUP BY ROLLUP(E1,E2)
CUBE 함수
조합이 가능한 모든 값에 대해 다차원 집계
ROLLUP에 비해 시스템 부하가 심함
* 표현식
GROUP BY CUBE(E1,E2)
GROUPING SETS 함수
특정 항목에 대한 소계 계산
GROUP BY 컬럼 순서와 무관하게 개별적으로 처리
‘GROUP BY CUBE (E1,E2)’와 ‘GROUP BY GROUPING SETS (E1,E2,(E1,E2),())’는 동일한 결과
* 표현식
‘GROUP BY GROUPING SETS(E1,E2)