Notice
Recent Posts
Recent Comments
Link
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자의 자기계발 블로그( ੭ ・ᴗ・ )੭

[오라클] 그룹 쿼리와 집합 연산자 본문

ORACLE

[오라클] 그룹 쿼리와 집합 연산자

쪼사원 2024. 4. 4. 14:11

✅ 기본 집계 함수

  • 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