오라클이 제공하는 수학관련 함수를 이용한 자료 검색
** 수학과 관련된 함수
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;
'JAVA > Oracle' 카테고리의 다른 글
오라클 예제 - lower() 와 trim을 이용한 sql 명령어 (0) | 2016.06.18 |
---|---|
오라클이 제공하는 문자열 관련 함수를 이용한 자료 검색 (0) | 2016.06.18 |
사원관리 시스템 개발 시 필요한 정보와 like 연산자 사용(칼럼의 값이 특정 무자열을 포함하고 있는 자료의 검색) (0) | 2016.06.18 |
Oracle/JAVA 연동 예제 : 상품관리 프로그램 작성 (0) | 2016.06.18 |
Oracle 명령어 (0) | 2016.06.18 |