컴퓨터 공부/Advanced Database

[5월 28일 1교시] 그룹 함수 1

려리군 2009. 5. 28. 14:06

실행계획

쿼리를 수행하기(what) 위해서 방법(how)에 대한 계획을 세운다.

(Cost based) Optimizer가 계획을 작성.

Sort Merge

Nested Loop 

 - 중복 for문 방식으로 join하는 방식.

 - 행의 개수가 작은 것이 좋다. driving table을 선택.

Hash


집계함수

집계 함수를 사용하여 각 그룹의 합계 정보를 얻고 몇 개의 그룹으로 열을 나눌 수 있다.

※  *은 NULL을 포함하여 센다.

count(DISTINCT|ALL|* 표현식) 

 - 열의 개수를 리턴한다. (표현식에 대해 NULL은 포함하지 않는다.)

sum(DISTINCT|ALL 열이름) : 열에 대한 합계를 구한다. NULL에 대한 고려를 할 필요가 없다.

avg(DISTINCT|ALL 열이름) : 열에 대한 평균을 구한다. NULL에 대해 고려를 해야한다.

                                         (내부적으로 count를 쓰기 때문)

max(ALL 표현식), min(ALL 표현식) : 최대값과 최소값을 구한다.

STDDEV(DISTINCT|ALL 열이름) : 열에 대한 표준편차를 구한다.

VARIANCE(DISTINCT|ALL 열이름) : 열에 대한 분산을 구한다.


GROUP BY 구문


having절에서도 (일반)열에 대한 정보를 적을 수 있다. 하지만,

where절에 (일반)열에 대한 정보를 필터 하면 그룹핑 할 양이 줄어들어 효율적이다.


※ GROUP BY절에는 positional notation이나 column alias를 사용할 수 없다. (수행 순서 때문!)

positional notation : select 구문에 나타난 열의 인덱스

positional notation 예시) 

select ename, sal, comm from emp order by 2

2의 뜻은 select의 열 중 2번째인 sal을 뜻함.

column alias 예시) 

select dept_no, sum(sal) sum_sal from emp order by sum_sal


select 절에 나타나는 열은 group by절에도 나타나야 한다.

예시)

select deptno, job, sum(sal)

from emp

where deptno in (10,20)

group by deptno, job