본문 바로가기

Lobo's study room/오라클DB

[2일차 과제]단일행 함수

< SQL 단일행함수 실습문제 >

이름 :조은수


EX1. 현재 날짜를 표시하는 질의를 작성하고 열 레이블을 Date로 지정한다.
SELECT SYSDATE AS "Date" FROM DUAL;

EX2. 사원 번호, 이름, 급여 및 15% 인상된 급여를 정수로 표시하고 열 레이블을 New salary 로 한다.
SELECT EMPLOYEE_ID, LAST_NAME,SALARY,TRUNC( (SALARY*1.15),0) AS "New salary"
from emp; 

EX3. 급여 인상분(새 급여에서 이전 급여를 뺀 값)을 추가하도록 수정하고 열 레이블을 Increase로 지정한다.
SELECT TRUNC((SALARY*1.15),0)-SALARY AS "INCREASE"
FROM EMP;


EX4. 사원 이름, 입사일 및 급여 검토일을 표시한다.      
    급여 검토일은 여섯 달 근무 후 해당하는 첫 번째 월요일입니다. 
    열 레이블은 REVIEW로 지정하고 날짜는 "yyyy-mm-dd"과 같은 형식으로 표시되도록 지정합니다.
SELECT LAST_NAME, HIRE_DATE, 
TO_DATE(NEXT_DAY(HIRE_DATE,'월요일'),'YYYY-MM-DD') AS "REVIEW"
FROM EMP;
==========
ADDMONTH
==========
SELECT LAST_NAME,HIRE_DATE,
TO_CHAR(NEXT_DAY(ADD_MONTHS(HIRE_DATE,6),2),'YYYY-MM-dd')
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 want '||(SALARY*3) AS "Wanted wage"
FROM EMP;

EX7. 모든 사원의 이름 및 급여를 표시하는 질의를 작성합니다, 
   급여는 15자 길이로 왼쪽에 $ 기호가 붙는 형식으로 표기하고 열 레이블은 salary 로 지정합니다.
SELECT LAST_NAME, LPAD(SALARY,15,'$')  AS "salary"
FROM EMP;
==============
TO_CHAR
==============
SELECT LAST_NAME,LPAD(TO_CHAR(SALARY,'$99,999'),15,'') AS "SALARY"
FROM EMP;

EX8. 이름이 J, A 또는 M으로 시작하는 모든 사원의 이름(첫 글만 대문자로) 및 이름 길이를 표시하시오.
SELECT LAST_NAME,LENGTH(LAST_NAME) 
FROM EMP
WHERE LAST_NAME LIKE ('J%') OR LAST_NAME LIKE ('A%') OR LAST_NAME LIKE ('M%');
---------
(2) 
SELECT LAST_NAME,LENGTH(LAST_NAME)
FROM EMP
WHERE SUBSTR(LAST_NAME,1,1) in ('J','M','A');

EX9. 이름, 입사일 및 업무 시작 요일을 표시하고 열 레이블을 DAY로 지정합니다. //정렬?!ㄱㄴㄷ순으로되네;;;;
일요일 ~ 토요일 순으로 정렬
SELECT NAME,HIRE_DATE,
HIRE_DATE,
TO_CHAR(TO_DATE(HIRE_DATE,'DAY')) AS "DAY"
FROM EMP
ORDER BY DAY ASC;///ERROR : HOW TO SHOW FROM SUN~SAT
===============
ORDER BY TO_CHAR(HIRE_DATE,'d');

EX10. 사원 이름 및 급여와 커미션합계를 표시하는 질의를 작성합니다. 열이름은 TOTAL 로 지정한다.
       커미션을 받으면 사원은 'Yes'으로 표시하고, 아니면 'No'로 표시하고 
       열 레이블은 COMMISSION으로 지정합니다.
SELECT LAST_NAME,SALARY
,SALARY+(SALARY*NVL(COMMISSION_PCT,0)) AS "TOTAL",
NVL2(COMMISSION_PCT,'Yes','No') AS "COMMISSION"
FROM EMP;

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

       출력 예 : 
          Hunold 9000  *********
          Ernst 6000  ******
          Austin 4800  ****
=================
SELECT LAST_NAME, SALARY, RPAD('',TRUNC(SALARY/1000)+1,'*') AS EMPLOYEE_GREAD
FROM EMP
ORDER BY SALARY DESC;
-----------------------------
SELECT LAST_NAME,SALARY,LPAD(' ',TRUNC(SALARY/1000)+1,'*') AS EMPLOYEE_GREAD
FROM EMP
ORDER BY SALARY DESC;

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