개발자의 자기계발 블로그( ੭ ・ᴗ・ )੭
[오라클] 그룹 쿼리와 집합 연산자 본문
✅ 기본 집계 함수
- COUNT (expr)
쿼리 결과 건수를 반환하는 함수
SELECT COUNT(*)
FROM EMPLOYEES;
-- EMPLOYEES 테이블의 전체 로우 수가 나옴
SELECT COUNT(DISTINCT department_id)
FROM EMPLOYEES;
-- DISTINCT는 중복값을 제외하라는 뜻
- SUM(expr)
합계를 반환하는 함수 - AVG(expr)
평균을 반환하는 함수 - MIN(expr), MAX(expr)
최솟값과 최댓값을 반환하는 함수 - VARIANCE(expr), STDDEV(expr)
분산과 표준편차를 반환하는 함수
분산❓ 주어진 범위의 개별 값과 평균값과의 차이인 편차를 구해 이를 제곱해서 평균한 값
표준편차❓ 분산 값의 제곱근
✅ GROUP BY 절과 HAVING 절
전체가 아닌 특정 그룹으로 묶어 데이터를 집계하는 구문 >> GROUP BY
GROUP BY 구문은 WHERE과 ORDER BY 절 사이에 위치함
SELECT department_id, SUM(salary)
FROM EMPLOYEES
GROUP BY department_id,
ORDER BY departmeny_id;
-- 사원테이블에서 각 부서별 급여의 총액을 구함
SELECT period, region, SUM(loan_jan_amt) totl_jan
FROM kor_loan_status
WHERE period LIKE '2013%'
GROUP BY period, region
ORDER BY period, region;
-- 월별날짜와 지역별로 묶어서 2013년 지역별 가계대출 총 잔액을 구함
HAVING 절은 GROUP BY 구문 안에 들어가는 조건절이다.
✅ ROLLUP 절과 CUBE 절
ROLLUP과 CUBE는 GROUP BY 절에서 사용되어 그룹별 소계를 추가로 보여주는 역할을 함.
🔽 ROLLUP(expr1, expr2, ...)
expr에는 그룹핑 대상, 즉 select 리스트에서 집계 함수를 제외한 컬럼 등의 표현식이 올 수 있으며,
명시한 표현식 수와 순서에 따라 레벨별로 집게한 결과가 반환됨
표현식 개수가 n개이면 n+1레벨까지 하위레벨에서 상위레벨 순으로 데이터가 집계됨
... 글만 보면 이해가 어려움
SELECT period, gubun, SUM(loan_jan_amt) total_jan
FROM kor_loan_status
WHERE period LIKE '2013%'
GROUP BY ROLLUP(period, gubun);
/*
2013년도 대출 종류별 총 잔액을 구한 쿼리문
ROLLUP 절에 period와 gubun을 명시했으므로 총 레벨 수는 3
3레벨 - 월과대출종류
2레벨 - 월
1레벨 - 전체합계
*/
🔽 CUBE(expr1, expr2, ...)
ROLLUP이 레벨별로 순차적 집계를 했다면,
CUBE는 명시적 표현식 개수에 따라 가능한 모든 조합별로 집계한 결과를 반환한다.
CUBE는 2의 expr개 제곱 만큼 종류별로 집계 된다.
ROLLUP과 CUBE는 많이 사용하진 않을 것 같아서 이정도만 포스팅하고
나중에 필요해지면 추가 포스팅을 하겠다..
✅ 집합 연산자
여러 개의 SELECT 문을 연결해 또 다른 하나의 쿼리를 만드는 역할을 하는 것
🔽 UNION
합집합을 의미함
만약 두 개의 데이터 집합이 있으면 각 집합 원소를 모두 포함한 결과가 반환된다.
중복되는 항목은 한 번만 조회된다.
🔽 UNION ALL
합집합인데 중복되는 항목도 모두 조회한다.
🔽 INTERSECT
교집합을 의미함
데이터 집합에서 공통된 항목만 추출한다.
🔽 MINUS
차집합을 의미함
한 데이터 집합을 기준으로 다른 데이터 집합과 공통된 항목을 제외한 결과만 추출한다.
❗ 집합 연산자를 사용할 때 주의해야 할 내용이 있다.
- 집합 연산자로 연결되는 각 SELECT문의 SELECT 리스트의 개수와 데이터 타입은 일치해야 한다.
- 집합 연산자로 SELECT 문을 연결할 때 ORDER BY 절은 맨 마지막 문장에서만 사용할 수 있다.
- BLOB, CLOB, BFILE 타입의 컬럼에 대해서는 집합 연산자를 사용할 수 없다.
- UNION, INTERSECT, MUNUS 연산자는 LONG형 컬럼에는 사용할 수 없다.
🔽 GROUPING SETS 절
ROLLUP 이나 CUBE 처럼 GROUP BY 절에 명시해서 그룹 쿼리에 사용되는 절
8..8 그룹핑 셋절에 관해서도 필요한 경우에 추가 포스팅 하겠음!!!
'ORACLE' 카테고리의 다른 글
[오라클] SQL 함수 (1) | 2024.04.03 |
---|---|
[오라클] SQL문 (2) (0) | 2024.04.02 |
[오라클] SQL문 (1) (0) | 2024.04.02 |
[오라클] DB 구성 객체 - 뷰, 인덱스, 시노님, 시퀀스 (0) | 2024.04.01 |
[오라클] DB 구성 객체 - 테이블 (1) | 2024.03.29 |