본문 바로가기

ORACLE/Excercise

Oracle - 연습문제 #3


1. 현재 날짜를 출력하고 열 헤더는 Current Date 로 출력하는 SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> col "Current Date" format a15
SQL> select sysdate as "Current Date" from dual;

Current Date                                                                   
---------------                                                                
08/12/25                                                                       

SQL>

2. EMP 테이블에서 현재 급여에  15%가 증가된 급여를 사원번호, 이름, 업무, 급여, 증가된 급여(New Salary), 증가액(Increase) 순서로 출력하는 SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> col ename format a10
SQL> col job format a10
SQL> select empno, ename, job, sal, sal*1.15 as "New Salary",
  2  (sal*1.15)-sal as "Increase" from emp;

     EMPNO ENAME      JOB               SAL New Salary   Increase              
---------- ---------- ---------- ---------- ---------- ----------              
      7369 SMITH      CLERK             800        920        120              
      7499 ALLEN      SALESMAN         1600       1840        240              
      7521 WARD       SALESMAN         1250     1437.5      187.5              
      7566 JONES      MANAGER          2975    3421.25     446.25              
      7654 MARTIN     SALESMAN         1250     1437.5      187.5              
      7698 BLAKE      MANAGER          2850     3277.5      427.5              
      7782 CLARK      MANAGER          2450     2817.5      367.5              
      7788 SCOTT      ANALYST          3000       3450        450              
      7839 KING       PRESIDENT        5000       5750        750              
      7844 TURNER     SALESMAN         1500       1725        225              
      7876 ADAMS      CLERK            1100       1265        165              

     EMPNO ENAME      JOB               SAL New Salary   Increase              
---------- ---------- ---------- ---------- ---------- ----------              
      7900 JAMES      CLERK             950     1092.5      142.5              
      7902 FORD       ANALYST          3000       3450        450              
      7934 MILLER     CLERK            1300       1495        195              

14 개의 행이 선택되었습니다.

SQL>

3. EMP 테이블에서 이름, 입사일, 입사일로부터 6개울후 돌아오는 월요일을 구하여 출력하는 DELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> select ename, hiredate, next_day(add_months(hiredate,6),'월')
  2  as "Six Months Later" from emp;

ENAME      HIREDATE Six Months Later                                           
---------- -------- ----------------                                           
SMITH      80/12/17 81/06/22                                                   
ALLEN      81/02/20 81/08/24                                                   
WARD       81/02/22 81/08/24                                                   
JONES      81/04/02 81/10/05                                                   
MARTIN     81/09/28 82/03/29                                                   
BLAKE      81/05/01 81/11/02                                                   
CLARK      81/06/09 81/12/14                                                   
SCOTT      87/04/19 87/10/26                                                   
KING       81/11/17 82/05/24                                                   
TURNER     81/09/08 82/03/15                                                   
ADAMS      87/05/23 87/11/30                                                   

ENAME      HIREDATE Six Months Later                                           
---------- -------- ----------------                                           
JAMES      81/12/03 82/06/07                                                   
FORD       81/12/03 82/06/07                                                   
MILLER     82/01/23 82/07/26                                                   

14 개의 행이 선택되었습니다.

SQL>

4. EMP 테이블에서 이름, 입사일, 급여, 입사일로부터 현재까지의 월수, 입사일로부터 현재까지의 급여의 총계를 출력하는 SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename, hiredate, sal,
  2  trunc(months_between(sysdate,hiredate),0) as "근무월수",
  3  sal*(trunc(months_between(sysdate,hiredate),0)) as "총급여"
  4* from emp
SQL> /

ENAME      HIREDATE        SAL   근무월수     총급여                           
---------- -------- ---------- ---------- ----------                           
SMITH      80/12/17        800        336     268800                           
ALLEN      81/02/20       1600        334     534400                           
WARD       81/02/22       1250        334     417500                           
JONES      81/04/02       2975        332     987700                           
MARTIN     81/09/28       1250        326     407500                           
BLAKE      81/05/01       2850        331     943350                           
CLARK      81/06/09       2450        330     808500                           
SCOTT      87/04/19       3000        260     780000                           
KING       81/11/17       5000        325    1625000                           
TURNER     81/09/08       1500        327     490500                           
ADAMS      87/05/23       1100        259     284900                           

ENAME      HIREDATE        SAL   근무월수     총급여                           
---------- -------- ---------- ---------- ----------                           
JAMES      81/12/03        950        324     307800                           
FORD       81/12/03       3000        324     972000                           
MILLER     82/01/23       1300        323     419900                           

14 개의 행이 선택되었습니다.

SQL>

5. EMP 테이블에서 다음의 결과가 출력되도록 작성하시오.

 Dream Salary
-------------------------------------------------------------------
KING earns $5,000.00 monthly but wants $15,000.00
BLAKE earns $2,850.00 monthly but wants $8,550.00
CLARK earns $2,450.00 monthly but wants $7,350.00
................................................
14 rows selectd

-------------------------------------------------------------------

SQL> ed
file afiedt.buf(이)가 기록되었습니다

  1  select ename || ' earns' || to_char(sal,'$9,999.99') || ' Monthly but wants '
  2  || to_char(sal*3,'$999,999.99') as "Dream Salary"
  3  from emp
  4  start with ename='KING'
  5* connect by prior empno=mgr
SQL> /

Dream Salary                                                                   
--------------------------------------------------------------------------------
KING earns $5,000.00 Monthly but wants   $15,000.00                            
JONES earns $2,975.00 Monthly but wants    $8,925.00                           
SCOTT earns $3,000.00 Monthly but wants    $9,000.00                           
ADAMS earns $1,100.00 Monthly but wants    $3,300.00                           
FORD earns $3,000.00 Monthly but wants    $9,000.00                            
SMITH earns   $800.00 Monthly but wants    $2,400.00                           
BLAKE earns $2,850.00 Monthly but wants    $8,550.00                           
ALLEN earns $1,600.00 Monthly but wants    $4,800.00                           
WARD earns $1,250.00 Monthly but wants    $3,750.00                            
MARTIN earns $1,250.00 Monthly but wants    $3,750.00                          
TURNER earns $1,500.00 Monthly but wants    $4,500.00                          

Dream Salary                                                                   
--------------------------------------------------------------------------------
JAMES earns   $950.00 Monthly but wants    $2,850.00                           
CLARK earns $2,450.00 Monthly but wants    $7,350.00                           
MILLER earns $1,300.00 Monthly but wants    $3,900.00                          

14 개의 행이 선택되었습니다.

SQL>

6. EMP 테이블에서 모든 사원의 이름과 급여 (15자리로 출력 좌축의 빈곳은 "*"로 대치)를 출력하는 SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> col lpad(sal,15,'*') format a20
SQL> select ename, lpad(sal,15,'*') from emp;

ENAME      LPAD(SAL,15,'*')                                                    
---------- --------------------                                                
SMITH      ************800                                                     
ALLEN      ***********1600                                                     
WARD       ***********1250                                                     
JONES      ***********2975                                                     
MARTIN     ***********1250                                                     
BLAKE      ***********2850                                                     
CLARK      ***********2450                                                     
SCOTT      ***********3000                                                     
KING       ***********5000                                                     
TURNER     ***********1500                                                     
ADAMS      ***********1100                                                     

ENAME      LPAD(SAL,15,'*')                                                    
---------- --------------------                                                
JAMES      ************950                                                     
FORD       ***********3000                                                     
MILLER     ***********1300                                                     

14 개의 행이 선택되었습니다.

SQL>

7. EMP 테이블에서 모든 사원의 정보를 이름, 업무, 입사일, 입사한 요일을 출력하는  SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> select ename, job, hiredate,
  2  to_char(hiredate,'RR/MM/DD/DAY') as "Day"
  3  from emp;

ENAME      JOB        HIREDATE Day                                             
---------- ---------- -------- ------------------------------------------      
SMITH      CLERK      80/12/17 80/12/17/수요일                                 
ALLEN      SALESMAN   81/02/20 81/02/20/금요일                                 
WARD       SALESMAN   81/02/22 81/02/22/일요일                                 
JONES      MANAGER    81/04/02 81/04/02/목요일                                 
MARTIN     SALESMAN   81/09/28 81/09/28/월요일                                 
BLAKE      MANAGER    81/05/01 81/05/01/금요일                                 
CLARK      MANAGER    81/06/09 81/06/09/화요일                                 
SCOTT      ANALYST    87/04/19 87/04/19/일요일                                 
KING       PRESIDENT  81/11/17 81/11/17/화요일                                 
TURNER     SALESMAN   81/09/08 81/09/08/화요일                                 
ADAMS      CLERK      87/05/23 87/05/23/토요일                                 

ENAME      JOB        HIREDATE Day                                             
---------- ---------- -------- ------------------------------------------      
JAMES      CLERK      81/12/03 81/12/03/목요일                                 
FORD       ANALYST    81/12/03 81/12/03/목요일                                 
MILLER     CLERK      82/01/23 82/01/23/토요일                                 

14 개의 행이 선택되었습니다.

SQL>

8. EMP 테이블에서 이름의 길이가 6자 이상인 사원의 정보를 이름, 이름의 글자수, 업무를 출력하는 SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> select ename, length(ename), job
  2  from emp
  3  where length(ename) >= 6
  4  order by ename;

ENAME      LENGTH(ENAME) JOB                                                   
---------- ------------- ----------                                            
MARTIN                 6 SALESMAN                                              
MILLER                 6 CLERK                                                 
TURNER                 6 SALESMAN                                              

SQL>

9. EMP 테이블에서 모든 사원의 정보를 이름, 업무, 급여, 보너스, 급여+보너스를 출력하는 SELECT 문장을 기술하시오.

-------------------------------------------------------------------

SQL> select ename, job, sal, comm, sal+coalesce(comm,0) from emp;

ENAME      JOB               SAL       COMM SAL+COALESCE(COMM,0)
---------- ---------- ---------- ---------- --------------------
SMITH      CLERK             800                             800
ALLEN      SALESMAN         1600        300                 1900
WARD       SALESMAN         1250        500                 1750
JONES      MANAGER          2975                            2975
MARTIN     SALESMAN         1250       1400                 2650
BLAKE      MANAGER          2850                            2850
CLARK      MANAGER          2450                            2450
SCOTT      ANALYST          3000                            3000
KING       PRESIDENT        5000                            5000
TURNER     SALESMAN         1500          0                 1500
ADAMS      CLERK            1100                            1100

ENAME      JOB               SAL       COMM SAL+COALESCE(COMM,0)
---------- ---------- ---------- ---------- --------------------
JAMES      CLERK             950                             950
FORD       ANALYST          3000                            3000
MILLER     CLERK            1300                            1300

14 개의 행이 선택되었습니다.

SQL>

10. EMP 테이블에서 사원의 급여와 사원의 급여 양만큼 "*"를 출력하는 SELECT 문장을 작성하여라. 단 "*"는 100을 의미한다.

 Employee and their salary
-------------------------------------------------------------------
KING          ************************************************
BLAKE       ************************************
CLARK      *****************************
JONES      *************************************
MARTIN    ********************
ALLEN      ***************************
TURNER    *************************
.........................................
14 rows selected.

-------------------------------------------------------------------

SQL> select ename, lpad('*',rtrim(trunc(sal,-2)/100),'*') as "Emp Salary" from emp;

ENAME                Emp Salary
-------------------- ----------------------------------------------------
SMITH                ********
ALLEN                ****************
WARD                 ************
JONES                *****************************
MARTIN               ************
BLAKE                ****************************
CLARK                ************************
SCOTT                ******************************
KING                 **************************************************
TURNER               ***************
ADAMS                ***********

ENAME                Emp Salary
-------------------- ----------------------------------------------------
JAMES                *********
FORD                 ******************************
MILLER               *************

14 개의 행이 선택되었습니다.

SQL>


11. EMP 테이블에서 JONES 사원을 ROOT로 시작하여 하위 계층 사원들의 사원번호, 이름, 급여, 계층 순서를 출력하시오.

-------------------------------------------------------------------

SQL> col name format a18
SQL> select lpad(' ',3*level)||ename "NAME", empno, mgr
  2  from emp
  3  start with ename='JONES'
  4  connect by prior empno=mgr;

NAME                    EMPNO        MGR                                       
------------------ ---------- ----------                                       
   JONES                 7566       7839                                       
      SCOTT              7788       7566                                       
         ADAMS           7876       7788                                       
      FORD               7902       7566                                       
         SMITH           7369       7902                                       

'ORACLE > Excercise' 카테고리의 다른 글

Oracle - 연습문제 #7  (0) 2008.12.29
Oracle - 연습문제 #6  (0) 2008.12.29
Oracle - 연습문제 #5  (0) 2008.12.27
Oracle - 연습문제 #4  (0) 2008.12.27
Oracle - 연습문제 #2  (0) 2008.12.26
Oracle - 연습문제 #1  (0) 2008.12.26