모든 일상

2일차 예제문제 본문

코딩 공부/SQL

2일차 예제문제

통통푸린 2021. 4. 30. 07:28
728x90
반응형

EX1. 현재 날짜를 표시하는 질의를 작성하고 열 레이블을 Date로 지정한다.

select sysdate
as Date
from dual;

EX2. 사원 번호, 이름, 급여 및 15% 인상된 급여를 정수로 표시하고 열 레이블을 New salary 로 한다.

select employee_id,  last_name, salary, trunc(salary + (salary * 0.15),0) as "New salary"
from emp;


EX3. 급여 인상분(새 급여에서 이전 급여를 뺀 값)을 추가하도록 수정하고 열 레이블을 Increase로 지정한다.

select last_name, salary, (trunc(salary + (salary * 0.15),0)-salary) as "Increase"
from emp;



EX4. 사원 이름, 입사일 및 급여 검토일을 표시한다.      
    급여 검토일은 여섯 달 근무 후 해당하는 첫 번째 월요일입니다. 
    열 레이블은 REVIEW로 지정하고 날짜는 "yyyy-mm-dd"과 같은 형식으로 표시되도록 지정합니다.

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, hire_date, 
       round(months_between(sysdate, hire_date),0) as "MONTHS_WORKED"
from emp
order by months_between(sysdate, hire_date) 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 ' || to_char(salary, '$999,999')
       || ' monthly but wants ' || to_char(salary * 3, '$9,999,999') 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으로 시작하는 모든 사원의 이름(첫 글만 대문자로) 및 이름 길이를 표시하시오.
sol 1)
select initcap(last_name), length(last_name)
from emp
where last_name like 'J%' or last_name like 'A%' or last_name like 'M%'
order by last_name;

sol 2)
select initcap(last_name), length(last_name)
from emp
where substr( last_name, 1, 1) in ('J', 'M', 'A')
order by last_name;
 
->2번 솔루션이 더 효과적임

EX9. 이름, 입사일 및 업무 시작 요일을 표시하고 열 레이블을 DAY로 지정합니다. 
일요일 ~ 토요일 순으로 정렬

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, nvl2(commission_pct, 'Yes', 'No') as COMMISSION,
       salary + (salary * nvl(commission_pct,0)) as TOTAL
from emp;


EX11. 사원의 이름을 표시하고 급여 총액을 별표(*)로 나타내는 질의를 작성합니다. 
   각 별표는 1000달러를 나타냅니다. 
   급여 기준으로 데이터를 내림차순으로 정렬하고 열 레이블을 EMPLOYEE_GREAD 로 지정합니다.

       출력 예 : 
          Hunold 9000  *********
          Ernst 6000  ******
          Austin 4800  ****
   
select last_name ||' '|| salary ||' '|| lpad(' ',salary/1000 +1,'*') as "EMPLOYEE_GREAD"
from emp;


EX12. 사원의 이름, 직무, 직무 열의 값을 기준으로 모든 사원의 등급을 표시하는 질의를 작성합니다.

        job_id 가   'CLERK'로 끝나면   =>  '☆'
                       'REP'로 끝나면     => '☆☆'
                       'MAN'로 끝나면    => '☆☆☆'


   그 밖은 공백으로 표시하시오. 열 레이블은 "GRADE"로 지정합니다.

  출력 예 : 
      Johnson SA_REP      ☆☆
      Taylor SH_CLERK     ☆
sol 1)
select last_name,job_id,
    decode(substr(job_id,instr(job_id,'_')+1), 'CLERK', '☆',
                                               'REP', '☆☆',
                                               'MAN', '☆☆☆',
                                                          ' ')
as Grade                                          
from emp

sol 2)
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 3;

728x90
반응형

'코딩 공부 > SQL' 카테고리의 다른 글

SQL JOIN 예제문제  (0) 2021.04.30
3일차 예제문제  (0) 2021.04.30
1일차 예제문제  (0) 2021.04.28
2일차  (0) 2021.04.28
1일차  (0) 2021.04.27