본문 바로가기

코딩(Coding)/데이터베이스(SQL)

데이터베이스 2일차_sql 검색, 단일행함수(2)(oracle, sql)

반응형

< 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  ;












728x90
반응형