본문 바로가기

Oracle

Oracle sqlplus select Function(복수행 함수)

select 실행 순서

1. from 테이블명

2. where 조건절

3. group by 칼럼명

4. having 조건절

5. select 칼럼명1, 칼럼명2, ...

6. order by 칼럼명 [asc/desc] > 오름차순 혹은 내림차순

 

※ 계정 파일은 oraclexe\app\oracle\product\10.2.0\server\RDBMS\ADMIN 폴더안에 있는 scott.sql 파일을 활용함.

예제 table

테이블 column 설명

- empno 사원번호

- ename 사원이름

- job 직책

- mgr 매니저의 사원번호

- hiredate 입사일

- sal 봉급

- comm 성과급

- deptno 부서번호

 

 

함수 (Function)

- 어떠한 일을 수행하는 기능으로써 주어진 인수를 재료로 처리를 하여 그 결과를 반환하는 일을 수행한다.

 

함수의 종류

1) 단일행 함수

- 하나의 row 당 하나의 결과값을 반환하는 함수

 

2) 복수행 함수

- 여러개의 row 당 하나의 결과값을 반환하는 함수

 

 

1. 복수행 그룹 함수

 

1-1 COUNT (칼럼명) → 해당 칼럼이 존재하는 ROW 의 갯수를 반환한다.

(단, 저장된 데이터가 NULL 인 칼럼은 세지 않는다.)

- select count(ename) from emp;

- select count(comm) from emp;

- select count(*) from emp; → 모든 행(row)의 갯수를 얻어온다.

 

1-2 SUM (칼럼명) → 해당 칼럼의 값을 모두 더한 값을 리턴한다.

- select sum(sal) from emp;

 

1-3 AVN (칼럼명) → 해당 칼럼의 값의 모든값을 더한 후 ROW 의 갯수로 나눈 평균값을 리턴한다.

(단 NULL 칼럼은 제외된다.)

- select AVG(sal) from emp;

 

1-4 MAX(칼럼명) → 최대값을 리턴한다.

- select MAX(sal) from emp;

 

1-5 MIN(칼럼명) → 최소값을 리턴한다.

- select MIN(sal) from emp;

 

 

2. GROUP BY 절

- 그룹으로 묶을 때 사용한다.

 

- 부서별 급여의 총합을 출력하라.

- select deptno, sum(sal) from emp group by deptno;

 

- 부서별 평균 급여를 구해보시오.

- select deptno, avg(sal) from emp group by deptno;

 

- 부서별 평균 급여를 구해보세요 (반올림해서 소수 첫째 자리 까지만)

- select deptno, round(avg(sal),1) from emp group by deptno; 

 

- 직업별 최대 급여를 구해보시오

- select job, max(sal) from emp group by job;

 

- 급여가 1000 이상인 사원들의 부서별 평균 급여의 반올림 값을 부서번호로 내림차순 정렬해서 출력해 보시오.

- select deptno, avg(sal) from emp where sal >=1000 group by deptno order by deptno desc;

 

- 급여가 2000 이상인 사원들의 부서별 평균 급여의 반올림 값을

평균 급여의 반올림 값으로 오름차순 정렬해서 출력해 보세요.

- select deptno, round(avg(sal)) from emp where sal >= 2000 group by deptno order by round(avg(sal)) asc;

 

- 각 부서별 같은 업무(job)를 하는 사람의 인원수를 구해서 부서번호, 업무(job), 인원수를

부서번호에 대해서 오름차순 정렬해서 출력해 보세요.

- select deptno, job, count(*) from emp group by deptno, job order by deptno asc;

 

- 급여가 1000 이상인 사원들의 부서별 평균 급여를 출력해보세요.

(단, 부서별 평균 급여가 2000 이상인 부서만 출력하세요.)

- select deptno, avg(sal) from emp where sal >=1000  group by deptno having avg(sal)>=2000;