본문 바로가기

JAVA/Oracle

오라클이 제공하는 수학관련 함수를 이용한 자료 검색

반응형

오라클이 제공하는 수학관련 함수를 이용한 자료 검색


** 수학과 관련된 함수

sum, max, min, avg, count


예)

모든사원의 급여 총액을 검색

select sum(sal) from emp;


근무자들의 평균 급여를 검색

select avg(sal) from emp;


최고급여액 금액

select max(sal) from emp;


round(반올림), ceil(올림수), floor(버림수)


예)

모든사원의 평균 급여 검색

select floor(avg(sal)) 평균급여 from emp;


127.5789

select round(127.5678, 1) from dual; // 결과값 : 127.6 // ,1 은 첫째자리까지 표시 하고 싶다는 말로 둘째자리에서 반올림 한다.


select round(25697, -2) from dual; // 결과값 : 25700 // -2 는 백의자리까지 표시 하고 싶다는 말로 십의 자리에서 반올림 한다.



** 오라클 책에 가끔있는 경우

127.5 반올림 하고 싶을때

select round(127.5) from emp; // 일반적인 경우

select round(127.5) from dual; // 책을 보면 함수설명을 위해 'dual' 가상의 테이블을 사용한다.


** avg의 동작방식


총 27명인 회사에 신입이 들어와 28명이 됬는데 아직 급여가 정해지지 않았을때 null 값을 포함시키지 않는다.

1) select sum(sal) / 27 from emp; // O

2) select sum(sal) / 28 from emp; // X


컬럼의 값이 null 인것은 포함하지 않는다.

컬럼의 값이 null 인 경우는 어떠한 연산도 수행되지 않는다.

만약, 연산을 수행시키려면 특정값으로 대체한 후 가능하다.

명령어 ==> nvl 함수를 이용한다.

nvl(칼럼이름, 대체할 값)
 

==> select avg( nvl(sal, 0)) from emp; // 만약 sal 값이 null 인 것은 0으로 대체하라는 것


연습)

개발1부에 근무하고 주소지가 '서울시'인 모든 근무자들의 평균급여를 출력하시오.

단, 급여가 결정되지 않았을 때는 500으로 대체하여 처리한다.

소수이하 첫째 자리까지만 출력합니다.

==> select avg ( nvl (sal, 500)) from emp where dname = '개발1부' and addr like '서울시%';

select round(avg ( nvl (sal, 500)),1) from emp where dname = '개발1부' and addr like '서울시%';


** 질의문의 from절이나 where 절에 또다른 질의문이 포함 될 수 있다.

==> '서브쿼리' 라고 한다.

select 칼럼1, 칼럼2,.... from (테이블명)

where 칼럼 >= (질의문)

select 칼럼1, 칼럼2,.... from (select ~~) // 테이블명 대신에 또다른 질의문이 온다.


예)

모든사원의 평균급여보다 더 높은 급여를 받은 사원의 정보를 출력

select avg(sal) from emp; ==> 626.923077

select * from emp where sal > 626.923077;


위에 두문장을 하나로 만든것


select * from emp where sal > (select avg(sal) from emp);


** 자료를 수정하기 위한 명령어의 형식

update 테이블이름 set 컬럼1=값1, 컬럼2=값2,.... // 이렇게 하면 모든 데이터가 다 바뀐다

update 테이블이름 set 컬럼1=값1, 컬럼2=값2,.... where 조건식 // 이렇게 해야 조건에 맞는 데이터만 바뀜


** 문제를 위한 레코드 수정

수정 1 :사원이름이 홍길동인 사원의 급여를 300으로 수정

 


update emp set sal=300 where name = '홍길동';


수정 2 : 사원이름이 '김동현'의 주소를 '서울시 마포구 신수동'으로 수정합니다.


update emp set addr='서울시 마포구 신수동' where name = '김동현';


연습)

최저급여를 받고 주소지가 '서울시'인 근무자들의 사원번호, 사원명, 연봉, 보너스을 검색하시오.

연봉은 정수2째 자리까지만 표시하고,

보너스는 연봉의 20% 입니다.

연봉이 높은순으로 출력하고 동일할 때는 사원명순으로 출력합니다.


최저급여

select min(sal) from emp;


본질의문

select no, name, round(nvl(sal,0)*12,-1) annsal, nvl(sal,0)*12*0.2 bonus

from emp

(where sal = 500 and) // 500 자리에 최저급여 문장이 들어가야함

where sal = (select min(sal) from emp)

and addr like '서울시%'

order by nvl(sal,0)*12 desc, name;

반응형