<목차>
ㅇ 산술연산자
ㅇ 연산자 사용 시 NULL 처리
ㅇ 참고자료 <Do it! 오라클로 배우는 데이터베이스 입문>
ㅇ 산술연산자
- 셀렉트 문장은 산술연산 진행할 수 있어 : + - * /
- 컬럼과 상수 , 컬럼과 컬럼
예) salary*12 , salary + salary
- 산술연산자 사용했다고 테이블이 변하는 건 아냐
- 셀렉트라는 명령문은 테이블의 데이터를 원하는 대로 보여주는 것뿐이야
= 테이블의 구조에 영향을 주는 언어가 아냐
= 셀렉트 문장은 트랜젝션에 영향을 주지 않아
= 테이블의 구조에 저장되고 취소되는 게 아냐
- 숫자 데이터에는 4개 모두 시행 가능
- 날짜 데이터에는 +, - 만 가능 (날짜가 ± 돼)
- 입력할 때는 연/월/일 이라는 포맷을 가지고 저장하지만
- 실제 테이블에 저장될 때는 시간, 분, 초까지 포함하여 소수점으로 표현이 되는 숫자 값으로 저장
- Q. (hire_date +1, hire_date-7 을 해도 열머리글이 다 하이어데이트야 )
- 문자 데이터에는 시행 불가 (에러나)
- 우선순위 : 괄호 > 곱셈 나눗셈 > 덧셈 뺄셈
- 12*salary+100 : 연봉에 100 더하기. 연봉에 인상률
- 12*(salary +100) : 급여에 100 더하고 연봉을 계산 . 월급여 인상률 - 이런 회사를 가 ㅋㅋㅋ
ㅇ 실습1 : 우리 회사에 근무하는 사원의 이름과 그 사원의 연봉을 구하시오.
SELECT last_name, salary*12
FROM employees;
ㅇ NULL 처리 함수 : NVL
- NULL값을 포함하는 산술식은 NULL로 평가
- NVL을 사용하여 대체 값 입력
- 대체해주는 값이 컬럼의 데이터 타입과 같아야 해 ★
- 문자는 문자로, 날짜는 날짜로, 숫자는 숫자로
- 문자와 날짜는 작은따옴표 까먹지 말고!
- 테이블 구조 자체가 바뀌는 게 아니라 이 문장이 실행되는 동안만
ㅇ 실습2 : 사원의 이름과 그 사원의 연봉을 구하시오.
단, 보너스를 받는 사원은 보너스값을 곱해서 출력하시오.
SELECT last_name, salary*12*(1+NVL(commission_pct,0))
FROM
- 보너스에 NULL 값 있으므로 NVL 사용
- salary*12*NVL(commission_pct, 1)
- 커미션pct컬럼에 널 값이 있으면 1로 대체해라
- 수업시간에 한 식인데 이러면
- 보너스 받는 사람들은 추가된 보너스만
- 안 받는 사람들은 실제 연봉
- SALARY*12*(1+NVL(COMMISSION_PCT,0))
- 커미션ptc컬럼에 널 값이 있으면 0으로 대체해라
그러면 커미션pct가 널이 없게 되고
- 거기에 1을 더해서 1.xx 꼴, 또는 1.0 꼴이 되게 하면 끝