< SQL 단일행함수 실습문제 >
EX1. 현재 날짜를 표시하는 질의를 작성하고 열 레이블을 Date로 지정한다.
select sysdate as "Date" from dual ;
EX2. 사원 번호, 이름, 급여 및 15% 인상된 급여를 정수로 표시하고 열 레이블을 New salary로 한다.
select EMPLOYEE_ID, last_name, salary,
trunc(salary*1.15) as "New salary"
from emp ;
EX3. 급여 인상분(새 급여에서 이전 급여를 뺀 값)을 추가하도록 수정하고 열 레이블을 Increase로 지정한다.
select EMPLOYEE_ID, last_name, salary,
trunc(salary*1.15) as "New salary",
trunc(salary*1.15) - salary as "Increase"
from emp ;
EX4. 사원 이름, 입사일 및 급여 검토일을 표시한다.
급여 검토일은 여섯 달 근무 후 해당하는 첫 번째 월요일입니다.
열 레이블은 REVIEW로 지정하고 날짜는 "yyyy-mm-dd"과 같은 형식으로 표시되록 지정합니다.
( 일 1, 월 2...)
select last_name, hire_date,
to_char( next_day(add_months(hire_date, 6), 2),'yyyy-mm-dd') as "REVIEW"
from emp ;
EX5. 사원의 이름, 근무월수(입사일로부터 현재까지 월수)를 계산하며 열레이블을 MONTHS_WORKED로 지정합니다.
결과는 정수로 반올림하여 표시하고 오래 근무한 사원부터 출력하시오.
SELECT LAST_NAME,
ROUND(MONTHS_BETWEEN(SYSDATE, HIRE_DATE), 0) AS "MONTHS_WORKED"
FROM EMP
ORDER BY MONTHS_WORKED DESC ;
EX6. 각 사원에 대해 다음 항목을 생성하는 질의를 작성합니다.
<employee name> earns <salary> monthly but wants <3 times salary>.
열 레이블을 Wanted wage로 지정합니다.
출력 예 : King earns 24000 monthly but wants 72000
select last_name || ' earns ' || salary || ' monthly but wants ' || salary*3 as "Wanted wage"
from emp ;
EX7. 모든 사원의 이름 밑 급여를 표시하는 질의를 작성합니다,
급여는 15자 길이로 왼쪽에 $ 기호가 붙는 형식으로 표기하고 열 레이블은 salary 로 지정합니다.
select last_name, lpad(to_char(salary, '$99,999'), 15, ' ') as "salary"
from emp ;
EX8. 이름이 J, A 또는 M으로 시작하는 모든 사원의 이름(첫 글만 대문자로) 및 이름 길이를 표시하시오.
select initcap(last_name) as "NAME", length(last_name) as "NAME_LENGTH"
from emp
where substr(last_name, 1, 1) in ('J','A','M') ;
** 함수 확인 요
select initcap(last_name),length(last_name)
from emp
where REGEXP_LIKE(last_name, 'J|A|M');
EX9. 이름, 입사일 및 업무 시작 요일을 표시하고 열 레이블을 DAY로 지정합니다.
일요일 ~ 토요일 순으로 정렬
select last_name,
hire_date,
to_char(hire_date, 'Day') as DAY,
to_char(hire_date, 'd') as N
from emp
order by N ;
select last_name, hire_date, to_char(hire_date, 'day') as DAY
from emp
order by to_char(hire_date, 'd');
EX10. 사원 이름 및 급여와 커미션합계를 표시하는 질의를 작성합니다. 열이름은 TOTAL 로 지정한다.
커미션을 받으면 사원은 'Yes'으로 표시하고, 아니면 'No'로 표시하고
열 레이블은 COMMISSION으로 지정합니다.
select last_name,
salary+ salary * NVL(COMMISSION_PCT, 0) as "TOTAL",
COMMISSION_PCT,
NVL2(COMMISSION_PCT , 'Yes','No') as COMMISSION
from emp ;
EX11. 사원의 이름을 표시하고 급여 총액을 별표(*)로 나타내는 질의를 작성합니다.
각 별표는 1000달러를 나타냅니다.
급여 기준으로 데이터를 내림차순으로 정렬하고 열 레이블을 EMPLOYEE_GREAD 로 지정합니다.
출력 예 :
Hunold 9000 *********
Ernst 6000 ******
Austin 4800 ****
select last_name,
salary,
trunc( salary / 1000 ) ,
lpad(' ', trunc(salary/1000) + 1, '*') as EMPLOYEE_GREAD
from emp ;
SELECT last_name, salary, LPAD('*', TRUNC( salary / 1000, 0), '*' ) AS "EMPLOYEE_GREAD"
FROM emp
ORDER BY salary desc;
select last_name,salary,Rpad(' ',salary/1000+1,'*') as "EMPLOYEE_GREAD"
from emp
order by salary desc;
** 복잡함
select last_name, salary,
replace(substr(rpad(salary, length(salary) + trunc(salary/1000, 0), '0'), length(salary) + 1), '0', '*') as EMPLOYEE_GREAD
from emp
order by 2 desc;
SELECT LAST_NAME 이름,
SALARY 급여,
LPAD('*',TRUNC(SALARY + NVL(SALARY * COMMISSION_PCT,0),-3) / 1000,'*') EMPLOYEE_GREAD
FROM EMP;
select last_name, salary,
LPAD('*',trunc(salary/1000, 0),'*') as EMPLOYEE_GREAD
from emp;
select last_name, salary, rpad(' ', salary/1000+1, '*') as EMPLOYEE_GREAD
from emp;
EX12. 사원의 이름, 직무, 직무 열의 값을 기준으로 모든 사원의 등급을 표시하는 질의를 작성합니다.
job_id 가 'CLERK'로 끝나면 => '☆'
'REP'로 끝나면 => '☆☆'
'MAN'로 끝나면 => '☆☆☆'
그 밖은 공백으로 표시하시오. 열 레이블은 "GRADE"로 지정합니다.
출력 예 :
Johnson SA_REP ☆☆
Taylor SH_CLERK ☆
select last_name, job_id,
case
when job_id like '%CLERK' then '☆'
when job_id like '%REP' then '☆☆'
when job_id like '%MAN' then '☆☆☆'
else ' '
end as "GRADE"
from emp
order by GRADE ;
'코딩(Coding) > 데이터베이스(SQL)' 카테고리의 다른 글
데이터베이스 3일차_조인(oracle, sql) (0) | 2021.05.03 |
---|---|
데이터베이스 3일차_다중행함수(oracle, sql) (0) | 2021.05.03 |
데이터베이스 2일차_sql 검색, 단일행함수(oracle, sql) (0) | 2021.05.03 |
데이터베이스 1일차_(2)(oracle, sql) (0) | 2021.05.03 |
데이터베이스 1일차_(oracle, sql) (0) | 2021.05.03 |