본문 바로가기

Dev./Back-end

Oracle 연습문제 2~7장

--2장◈ 연 습 문 제 ◈

--

--1. 아래의 SELECT 문장이 성공적으로 수행 될까요? (참 / 거짓)

--SQL> SELECT ename 이름,job 업무,sal 급여

--  2  FROM emp;

--

--

--2. 아래의 SELECT 문장이 성공적으로 수행 될까요? (참 / 거짓)

--SQL> SELECT *

--  2  FROM salgrade;

--

--

--3. 이 문장에 에러가 있습니다. 올바르게 작성하시오.

--SQL> SELECT empno,ename,sal X 12 년 봉

--  2  FROM emp;

--

Select empno,ename,sal*12 연봉 

From emp;

--

--4. EMP 테이블의 구조와 내용을 조회하여라.

--

Desc emp;

--

--5. EMP 테이블에서 중복되지 않는 부서번호를 출력하시오.

--

Select distinct deptno

From emp;

--

--6. EMP 테이블의 이름과 업무를 연결하여 출력하여라.

--

Select ename || job

From emp;

--

--7. DEPT 테이블의 부서명과 위치를 연결하여 출력하여라.

--

Select dname || loc

From dept;

--

--8. EMP 테이블의 업무와 급여를 연결하여 출력하여라.

--

Select job || sal

From emp;

--

--9. 6,7,8번의 결과를 부석하여 설명하여라.

--

Select ename || job as 이름직업

From emp;

Select dname || loc as 부서명위치

From dept;

Select job || sal as 직업연봉

From emp;

--?

--3장◈ 연 습 문 제 ◈

--

--1. WHERE절에 HIREDATE의 비교를 '01-JAN-82'가 아닌 '01-jan-82'로 기술하면 결과는 ?

--SQL> SELECT *

--  2  FROM emp

--  3  WHERE hiredate = '23-jan-82';

에러!;

--2. EMP 테이블에서 급여가 3000이상인 사원의 정보를 사원번호,이름,담당업무,급여를 출력하는 SELECT 문장을 작성하시오.


select 

  empno,

  ename,

  job,

  sal

from emp

where sal>=3000;


--3. EMP 테이블에서 사원번호가 7788인 사원의 이름과 부서번호를 출력하는 SELECT 문장을 작성하시오.


select

  ename,

  empno

from emp

where empno = '7788';


--4. EMP 테이블에서 입사일이 February 20, 1981과 May 1, 19981 사이에 입사한 사원의 이름,업무,입사일을 출력하는 SELECT 문장을 작성하시오. 단 입사일 순으로 출력하시오.


select

  ename,

  job,

  hiredate

from emp

where hiredate between '1981-02-20' and '1981-05-01';


--5. EMP 테이블에서 부서번호가 10,20인 사원의 모든 정보를 출력하는 SELECT 문장을 작성하시오. 단 이름순으로 정렬하여라.

--

select *

from emp

where deptno in (10,20)

order by ename asc;


--6. EMP 테이블에서 급여가 1500이상이고 부서번호가 10,30인 사원의 이름과 급여를 출력하는 SELECT 문장을 작성하여라. 단 HEADING을 Employee과 Monthly Salary로 출력하여라.

--

select

  ename as "Employee",

  round(sal/12) as "Monthly Salary"

from emp

where sal>=1500 and deptno in (10,30);


--7. EMP 테이블에서 1982년에 입사한 사원의 모든 정보를 출력하는 SELECT 문을 작성하여라.

--

select *

from emp

where to_char(hiredate,'yyyy')=1982;


--8. EMP 테이블에서 COMM에 NULL이 아닌 사원의 모든 정보를 출력하는 SELECT 문을 작성하여라.

--

select *

from emp

where comm is not null;


--9. EMP 테이블에서 보너스가 급여보다 10%가 많은 모든 종업원에 대하여 이름,급여,보너스를 출력하는 SELECT 문을 작성하여라.

--

select

  ename,

  sal,

  comm

from emp

where sal*1.1 >= comm;


--10. EMP 테이블에서 업무가 Clerk이거나 Analyst이고 급여가 1000,3000,5000이 아닌 모든 사원의 정보를 출력하는 SELECT 문을 작성하여라.

--

select *

from emp

where job in ('CLERK','ANALYST') 

and sal not in ('1000','3000','5000');


--11. EMP 테이블에서 이름에 L이 두 자가 있고  부서가 30이거나 또는 관리자가 7782인 사원의 모든 정보를 출력하는 SELECT 문을 작성하여라.

--

select *

from emp

where ename like '%L%L%' 

and deptno = 30

or empno = 7782;


--4장◈ 연 습 문 제 ◈

--

--1. 현재 날짜를 출력하고 열 레이블은 Current Date로 출력하는 SELECT 문장을 기술하시오.

--

select sysdate as "Current Date"

from dual;


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

--

select 

  empno,

  ename,

  job,

  sal,

  sal*1.15 "증가된 급여",

  sal*1.15-sal as "증가액"

from emp;


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

--

select

  ename,

  hiredate,

  next_day(add_months(hiredate,6),'월요일')

from emp;


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

--

select

  ename,

  hiredate,

  round((sysdate-hiredate)/12),

  sal,

  round((sysdate-hiredate)/12)*sal

from emp;

  


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

--

select ename||' earns '||to_char(sal,'$999,999')||' monthly but wants '||to_char(sal*3,'$999,999') as "Dream Salary"

from emp;


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

--

select 

  ename,

  lpad(sal,15,'*')

from emp;


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

--

select 

  ename,

  job,

  hiredate,

  to_char(hiredate,'day') 입사한요일

from emp;

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

--

select

  ename 이름,

  length(ename) 이름의글자수,

  job 업무

from emp

where length(ename)>=6;


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

--

select

  ename,

  job,

  sal,

  comm,

  sal+comm

from emp;


--5장◈ 연 습 문 제 ◈

--

--1. EMP 테이블에서 인원수,최대 급여,최소 급여,급여의 합을 계산하여 출력하는 SELECT 문장을 작성하여라.

--

select   

  count(sal),max(sal),min(sal),sum(sal)

from emp;

--2. EMP 테이블에서 각 업무별로 최대 급여,최소 급여,급여의 합을 출력하는 SELECT 문장을 작성하여라.

--

select 

  job,

  max(sal)+min(sal)+sum(sal)

from emp

group by job;

  

  

--3. EMP 테이블에서 업무별 인원수를 구하여 출력하는 SELECT 문장을 작성하여라.

--

select 

  job,

  count(empno)

from emp

group by job;

--4. EMP 테이블에서 최고 급여와 최소 급여의 차이는 얼마인가 출력하는 SELECT 문장을 작성하여라.

--

select

  max(sal)-min(sal)

from emp;

--5. EMP 테이블에서 아래의 결과를 출력하는 SELECT 문장을 작성하여라.

--H_YEAR  COUNT(*)  MIN(SAL)  MAX(SAL)  AVG(SAL)  SUM(SAL)

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

--80             1       800       800       800       800

--81            10       950      5000    2282.5     22825

--82             2      1300      3000      2150      4300

--83             1      1100      1100      1100      1100

--

select 

  to_char(Hiredate,'yy'),

  count(sal),

  MIN(SAL),

  MAX(SAL),

  AVG(SAL),

  SUM(SAL)

from emp

group by to_char(hiredate,'yy');

  


--6. EMP 테이블에서 아래의 결과를 출력하는 SELECT 문장을 작성하여라.

--    TOTAL      1980      1981      1982      1983

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

--       14         1        10         2         1

--

select 

  count(hiredate) "total",

  sum(decode(to_char(hiredate,'yyyy'),1980,1)) "1980",

  sum(decode(to_char(hiredate,'yyyy'),1981,1)) "1981",

  sum(decode(to_char(hiredate,'yyyy'),1982,1)) "1982",

  sum(decode(to_char(hiredate,'yyyy'),1987,1)) "1987"

from emp;


--7. EMP 테이블에서 아래의 결과를 출력하는 SELECT 문장을 작성하여라.

--JOB       Deptno 10 Deptno 20 Deptno 30     Total

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

--ANALYST                  6000                6000

--CLERK          1300      1900       950      4150

--MANAGER        2450      2975      2850      8275

--PRESIDENT      5000                          5000

--SALESMAN                           5600      5600

--

select

  job,

  sum(decode(deptno,10,sal,0)) "Deptno 10",

  sum(decode(deptno,20,sal,0)) "Deptno 20",

  sum(decode(deptno,30,sal,0)) "Deptno 30",

  sum(sal) "Total"

from emp

group by job;



--6장◈ 연 습 문 제 ◈

--

--1. EMP 테이블에서 모든 사원에 대한 이름,부서번호,부서명을 출력하는 SELECT 문장을 작성하여라.

--

select

  e.ename,

  e.deptno,

  d.dname

from emp e,dept d

where e.deptno=d.deptno;


--2. EMP 테이블에서 NEW YORK에서 근무하고 있는 사원에 대하여 이름,업무,급여,부서명을 출력하는 SELECT 문장을 작성하여라.

--

select

  e.ename,

  e.job,

  e.sal,

  d.dname

from emp e,dept d

where e.deptno=d.deptno

and d.loc = 'NEW YORK';


--3. EMP 테이블에서 보너스를 받는 사원에 대하여 이름,부서명,위치를 출력하는 SELECT 문장을 작성하여라.

--

select

  e.ename,

  d.dname,

  d.loc

from emp e,dept d

where e.deptno=d.deptno

and comm is not null;

--4. EMP 테이블에서 이름 중 L자가 있는 사원에 대하여 이름,업무,부서명,위치를 출력하는 SELECT 문장을 작성하여라.

--

select

  e.ename,

  e.job,

  d.dname,

  d.loc  

from emp e,dept d

where e.deptno=d.deptno

and e.ename like '%K%';


--5. 아래의 결과를 출력하는 SELECT 문장을 작성하여라.(관리자가 없는 King을 포함하여 모든 사원을 출력)

--Employee        Emp# Manager         Mgr#

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

--KING            7839

--BLAKE           7698 KING            7839

--CLARK           7782 KING            7839

--. . . . . . . . . .

--14 rows selected.

--

select

  e.ename Employee,

  e.empno Emp#,

  m.ename,

  e.mgr Mgr#

from emp e , emp m

where e.mgr = m.empno(+);

--6. EMP 테이블에서 그들의 관리자 보다 먼저 입사한 사원에 대하여 이름,입사일,관리자 이름, 관리자 입사일을 출력하는 SELECT 문장을 작성하여라.

--

select

  e.ename,

  e.hiredate,

  e.mgr,

  hiredate

from emp e,dept d

where e.deptno=d.deptno

and loc = 'NEW YORK';

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

--Employee and their salary

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

--KING      **************************************************

--BLAKE     ****************************

--CLARK     ************************

--JONES     *****************************

--MARTIN    ************

--ALLEN     ****************

--TURNER    ***************

--. . . . . . . . . .

--14 rows selected.

--


select 

  rpad(ename,10,' ')||lpad(' ',sal/100,'*') as "Employee and their salary"

from emp;


--7장◈ 연 습 문 제 ◈

--

--1. EMP 테이블에서 Blake와 같은 부서에 있는 모든 사원의 이름과 입사일자를 출력하는 SELECT문을 작성하시오.

--


select

  e.ename,

  e.hiredate

from emp e , emp m

where e.deptno = m.deptno

and m.ename = 'BLAKE';


--

--2. EMP 테이블에서 평균 급여 이상을 받는 모든 종업원에 대해서 종업원 번호와 이름을 출력하는 SELECT문을 작성하시오. 단 급여가 많은 순으로 출력하여라.

--

select

  empno,

  ename,

  sal

from emp

where sal> (

            select avg(sal)

            from emp

            )

order by sal DESC;

--

--3. EMP 테이블에서 이름에 “T”가 있는 사원이 근무하는 부서에서 근무하는 모든 종업원에 대해 사원 번호,이름,급여를 출력하는 SELECT문을 작성하시오. 단 사원번호 순으로 출력하여라.

--

select

  deptno,

  empno,

  ename,

  sal

from emp

where deptno in ( 

                  select 

                    deptno

                   from emp

                   where ename like '%T%');

--

--4. EMP 테이블에서 부서 위치가 Dallas인 모든 종업원에 대해 이름,업무,급여를 출력하는 SELECT문을 작성하시오.

--

select

  ename,

  job,

  sal

from emp

where deptno in

                (

                  select

                     deptno

                   from dept

                   where loc='DALLAS');

--

--5. EMP 테이블에서 King에게 보고하는 모든 사원의 이름과 급여를 출력하는 SELECT문을 작성하시오.

--

select 

  ename,

  sal

from emp

where ename in (

                select

                  e.ename

                from emp e , emp m

                where e.mgr = m.empno

                and m.ename='KING'

                );

--

--6. EMP 테이블에서 SALES부서 사원의 이름,업무를 출력하는 SELECT문을 작성하시오.

--

select

  ename,

  job

from emp

where deptno in (

                  select 

                    deptno

                  from dept

                  where dname = 'SALES'

                  );

--

--7. EMP 테이블에서 월급이 부서 30의 최저 월급보다 높은 사원을 출력하는 SELECT문을 작성하시오.

--

select 

  ename

  sal

from emp

where sal > (

              select

                min(sal)

              from emp

              where deptno = 30

              );

--

--8. EMP 테이블에서 부서 10에서 부서 30의 사원과 같은 업무를 맡고 있는 사원의 이름과 업무를 출력하는 SELECT문을 작성하시오.

--


select

  ename,

  job

from emp

where job in (

              select 

                job

              from emp

              where deptno = 30

              )

and deptno = 10;

             

--

--9. EMP 테이블에서 FORD와 업무도 월급도 같은 사원의 모든 정보를 출력하는 SELECT문을 작성하시오.


select *

from emp

where job in (

                select 

                  job

                from emp

                where ename = 'FORD'

                )

and sal in (

              select 

                sal

              from emp

              where ename = 'FORD'

              );


--10. EMP 테이블에서 업무가 JONES와 같거나 월급이 FORD이상인 사원의 정보를 이름,업무,부서번호,급여를 출력하는 SELECT문을 작성하시오. 단 업무별, 월급이 많은 순으로 출력하여라.

--


select 

  ename,

  job,

  deptno,

  sal

from emp

where job in (

                select 

                  job

                from emp

                where ename = 'JONES'

                )

or sal >= (

            select 

              sal

            from emp

            where ename = 'FORD'

            );


--

--11. EMP 테이블에서 SCOTT 또는 WARD와 월급이 같은 사원의 정보를 이름,업무,급여를 출력하는 SELECT문을 작성하시오.

--

select 

  ename,

  job,

  sal

from emp

where sal = (

                select 

                  sal

                from emp

                where ename = 'SCOTT'

                )

or sal = (

            select 

              sal

            from emp

            where ename = 'WARD'

            );

            

--

--12. EMP 테이블에서 CHICAGO에서 근무하는 사원과 같은 업무를 하는 사원의 이름,업무를 출력하는 SELECT문을 작성하시오.

--

select

  ename,

  job

from emp

where deptno in (

                  select 

                    deptno

                  from dept

                  where loc = 'CHICAGO'

                  );

--

--13. EMP 테이블에서 부서별로 월급이 평균 월급보다 높은 사원을 부서번호,이름,급여를 출력하는 SELECT문을 작성하시오.

--


select

  empno,

  ename,

  sal,

  d.avgsal

from emp e, (

            select 

              deptno,

              avg(sal) avgsal

            from emp

            group by deptno

            ) d

where e.deptno = d.deptno 

and e.sal > d.avgsal;              


--

--14. EMP 테이블에서 업무별로 월급이 평균 월급보다 낮은 사원을 부서번호,이름,급여를 출력하는 SELECT문을 작성하시오.

--

select 

  e.deptno,

  e.ename,

  e.sal

from emp e, (

              select 

                job,

                avg(sal) avgsal

              from emp

              group by job

              ) d

where e.job = d.job

and e.sal < d.avgsal;


--

--15. EMP 테이블에서 적어도 한명 이상으로부터 보고를 받을 수 있는 사원을 업무,이름,사원번호,부서번호를 출력하는 SELECT문을 작성하시오.

--=mgr에 자기사원번호가 하나이상 있는 직원찾기

select 

  job,

  ename,

  empno,

  deptno

from emp

where empno in (

                select

                  mgr

                from emp);


--

--16. EMP 테이블에서 말단 사원의 사원번호,이름,업무,부서번호를 출력하는 SELECT문을 작성하시오.

--

select 

  empno,

  ename,

  job,

  deptno

from emp

where hiredate = (

                  select 

                    min(hiredate)

                  from emp);

'Dev. > Back-end' 카테고리의 다른 글

정규화(Normalization)  (0) 2012.10.23
Ubuntu 10.10 에 Sql Developer 설치하기  (0) 2012.10.16
Oracle 연습문제 2~7장  (1) 2012.10.14
Ubuntu 12.04(x86) 에 Oracle11g Tomcat7 JDK1.7 Eclipse 깔기.  (0) 2012.10.04
SQL Table space 생성 (OEMC에서)  (0) 2012.10.04
20120925 Oracle  (0) 2012.09.25