핑구

03. GROUP BY HAVING 본문

JAVA 웹 개발/2. Oracle

03. GROUP BY HAVING

코딩 펭귄 2022. 6. 8. 10:53
📅 2021.09.10 ~ 2021.09.13

SELECT문 실행 순서

5: SELECT 컬럼명 AS 별칭, 계산식, 함수식

1: FROM 참조할 테이블명

2: WHERE 컬럼명|함수식 비교연산자 비교 값

3: GROUP BY 그룹으로 묶을 컬럼명

4: HAVING 그룹함수식 비교연산자 비교값

6: ORDER BY 컬럼명|별칭|컬럼순번 정렬 방식 (NULLS FIRST|LAST)

  • 데이터를 검색하여 추출하기 위해서는 일단 해당 테이블을 먼저 불러와야 한다. 따라서 FROM이 가장 먼저 실행된다.
  • SELECT 이후에 실행되는 것이 ORDER BY밖에 없기 때문에 ORDER BY에서만 SELECT에서 정해준 별칭을 사용할 수 있다. ORDER BY 이외 절은 모두 SELECT 이전에 실행되기 때문에 별칭이 만들어지기 이전이므로 사용할 수 없다.

 

GROUP BY

  • 그룹 함수는 단 하나의 결과만 산출하기 때문에 그룹 여러 개를 같이 사용하는 경우 행의 개수가 달라서 오류가 발생한다. 그룹 함수의 결과를 컬럼 값에 따라 그룹화해서 출력해야 하는 경우 사용한다.
  • 특정 컬럼으로 그룹화하여도 필수적으로 해당 컬럼을 출력해야 하는 것은 아니다.
  • 여러 개의 컬럼을 동시에 그룹화하는 것도 가능하다.

 

HAVING

  • 그룹 함수에 대한 조건을 부여하고 싶은 경우 사용된다. WHERE절은 SELECT절에 대한 조건을 의미하고, HAVING절은 GROUP BY절에 대한 조건을 의미한다.

 

ROLLUP/CUBE

  • 집계 함수로 그룹 별로 산출한 결과 값을 집계하는 함수이다.
  • ROLLUP : 그룹 별로 중간 집계 처리를 하는데, 인자로 전달받은 그룹 중에서 가장 먼저 지정된 그룹으로 집계를 진행한다.
  • CUBE : 그룹 별로 중간 집계 처리를 하는데, 인자로 전달받은 모든 그룹에 대한 집계를 진행한다.
  • GROUPING : ROLLUP이나 CUBE에 의한 집계 산출물을 구분할 수 있게 도와준다. 만약 ROLLUP/CUBE에 의한 집계 산출물이 인자로 전달받은 컬럼 집합의 산출물이면 0을 반환하고, 아니면 1을 반환한다.

 

집합 연산자

  • 여러 개의 SELECT 결과물을 하나의 쿼리로 만드는 연산자이다.
  • UNION : 합집합 (= OR)
  • INTERSECT : 교집합 (= AND)
  • UNION ALL : 합집합 + 교집합 (OR + AND)
    교집합 부분의 컬럼 값을 중복하여 반환한다.
  • MINUS : 차집합
    MINUS 아래에 존재하는 SELECT 결과물을 제외한다.
  • 집합 연산자의 경우 SELECT에 존재하는 컬럼이 다른 경우 어떤 컬럼을 가져와야 하는지 알 수 없기 때문에 결과가 출력되지 않는다.

 

GROUPING SETS

  • 집합 연산자의 UNION ALL과 같은 역할을 하지만, 합치고 싶은 컬럼의 개수가 다른 경우 사용 가능하다. 아래와 같이 사용한다.
    SELECT DEPT_CODE, JOB_CODE, MANAGER_ID, FLOOR(AVG(SALARY))
    FROM EMPLOYEE
    GROUP BY GROUPING SETS ((DEPT_CODE, JOB_CODE, MANAGER_ID),
                            (DEPT_CODE, MANAGER_ID),
                            (JOB_CODE, MANAGER_ID));
    

'JAVA 웹 개발 > 2. Oracle' 카테고리의 다른 글

05. 서브쿼리  (0) 2022.06.08
04. JOIN  (0) 2022.06.08
02. 함수  (0) 2022.06.08
01. DQL(SELECT)  (0) 2022.05.23
00. Oracle Database 개요  (0) 2022.05.16