[Oracle] day_39 함수의 사용 예제로 복습하기
2020. 12. 17. 20:26ㆍWeb_Back-end/Oracle
2020/12/16 - [개발/Oracle] - [Oracle] 2020.12.16. day_38 select 문자열 연산자
위의 모든 내용을 복습하기
문제 | 실행결과 |
--1. 사원 테이블에서 모든 사원의 사원번호 ,사원명, 입사일,연봉, 월급을 조회하세요. --단, 월급은 연봉을 12로 나눈 값으로 소수점 첫번째자리에서 반올림하여 출력합니다. |
![]() |
1
2
|
select empno, ename, hiredate, sal, round(sal/12, 0) sal_month
from emp;
|
cs |
- 반올림하는 round()함수를 사용한다
- round(값, 반올림할 자릿수)
- 단, 실수부와 정수부에서 적용되는 일이 다르다
- 실수부(.를 기준으로 오른쪽 양수인덱스) : 반올림하여 볼 자릿수
- 정수부(.를 기준으로 왼쪽 음수인덱스) : 반올림할 자릿수
문제 | 실행결과 |
--2. 사원 테이블에서 입사월이 12월인 사원들의 사원번호, 사원명, 입사일, --연봉, 실수령액을 조회하세요. --단, 실수령액은 연봉과 보너스를 합산한 금액으로 연산하고, --세금은 실수령액에서 3.3%를 제외한 금액으로 연산하여 원단위절사하여 출력합니다. |
![]() |
1
2
3
4
|
select empno, ename, hiredate, sal,
trunc((sal+nvl(comm,0))-((sal+nvl(comm,0))*0.033),-1) sal_real
from emp
where to_char(hiredate, 'mm')=12;
|
cs |
- 연산을 해야하는 식에서 null값이 들어가 있다면, 연산결과를 볼 수 없기 때문에
- nvl() 함수를 가용하여 null인지를 먼저 확인한다
- nul(값, 'null일때 반환할 값')
- comm값이 null인 경우 0을 반환하여, sal과 comm을 연산한다
- 원 단위로 절사하기 위해 trunc()함수를 사용한다
- trunc(값, 절사할 자릿수)
문제 | 실행결과 |
--3. 사원 테이블에서 10번 부서와 30번 부서에 근무하면서 매니저가 있는 사원의 -- 사원번호, 매니저번호, 입사일, 연봉, 사원명, 직무를 조회하세요. -- 단, 입사일은 "년-월-일 분기 요일" 의 형식으로 출력하되 년도는 2자리만 출력 -- 하세요, 사원명은 모두 소문자로 출력하고, 직무는 앞자리만 대문자로 출력하세요. |
![]() |
1
2
3
4
5
6
7
|
select empno, mgr,
to_char(hiredate, 'yy-mm-dd q"분기" day')
sal,
lower(ename) ename,
initcap(job) job
from emp
where (deptno=10 or deptno=30) and mgr is not null;
|
cs |
- to_char() 함수를 통해 날짜를 변환한다
- to_char(날짜, 'pattern')
- 소문자로 반환하는 lower(), 앞글자만 대문자로 반환하는 initcap() 을 사용한다
문제 | 실행결과 |
--4. 아래의 값을 입력할 수 있는 테이블을생성하고 데이터를 추가하세요. /* 12345,'김ㅇ규','880101-1234567' 4326,'남ㅇ진','980101-2234567' 51,'민ㅇ권','991217-1234567' 98762,'배ㅇ리','991212-1234567' 961,'정ㅇ진','001212-4234567' */ |
![]() select * from work_1217; |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
create table work_1217(
wnum number(5),
wname char(9),
wid char(14)
);
insert into work_1217 (wnum, wname, wid) values (12345,'김0규','880101-1234567');
commit;
insert into work_1217 (wnum, wname, wid) values (4326,'남ㅇ진','980101-2234567');
commit;
insert into work_1217 (wnum, wname, wid) values (51,'민ㅇ권','991217-1234567');
commit;
insert into work_1217 (wnum, wname, wid) values (98762,'배ㅇ리','991212-1234567');
commit;
insert into work_1217 (wnum, wname, wid) values (961,'정ㅇ진','001212-4234567');
commit; |
cs |
- 한글의 바이트수는 2 or 3바이트이므로 주의하여 테이블을 작성한다
- create table 로 테이블을 만들고,
- insert into 테이블명 (컬럼,,) values (값,,) 으로 값을 넣는다
- transaction 의 대상쿼리는 insert, update, delete :
- 정상적으로 종료되는 경우에는 commit을 하여 작업상태를 저장해야한다
문제 | 실행결과 |
--5. 4번에서 생성한 테이블을 사용하여 번호, 이름, 주민번호 -앞자리만, 성별 을 조회하세요. -- 단, 번호는 I_00000000 의 형식으로 출력할 것. |
![]() |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
select
lpad(wnum, 10, 'I_00000000') wnum,
wname, wid,
substr(wid, 1, instr(wid, '-')-1) id_info,
case
mod(substr(wid, instr(wid, '-')+1, 1), 2)
when 0 then '여성'
else '남성'
end
gender
from work_1217;
|
cs |
- lpad() 함수를 통해 글자를 원하는 스타일로 패딩한다
- lpad는 문자열 앞에 문자열을 채워 지정한 길이의 문자열을 만든다
- lpad(값, 전체글자수, 채울문자) //채울 문자에 숫자도 가능하다
- substr() 함수를 통해 특정 문자열을 자를 수 있는데 해당문자의 인덱스를 알기위해,
- instr() 함수를 통해 얻어낸다
- instr(값, '기준문자열')
- case문으로 0일경우 여성을, 이외의 경우 남성을 반환할 수 있게 작성한다
- case 컬럼명 when 비교값 then 실행코드 else 비교값이 없을 때 실행코드 end
문제 | 실행결과 |
--6. 4번에서 생성한 테이블에서 이름이 '배ㅇ리'인 사람의 주민번호를 '991212-2234567' 로 변경하세요. | ![]() |
1
2
3
4
5
6
7
|
update work_1217
set wid = '991212-2234567'
where wname='배ㅇ리';
commit; select *
from work_1217
where wname = '배ㅇ리';
|
cs |
- update와 set을 통해 해당컬럼의 값(도메인)을 변경할 수 있다
- update는 transaction대상 쿼리이기 때문에 완료후에 commit 해준다
- transaction 의 대상쿼리는 insert, update, delete :
- 정상적으로 종료되는 경우에는 commit을 하여 작업상태를 저장해야한다