Rubberduck-Debugging

oracle query 문제 모음 본문

개발자/20181127 교육과정

oracle query 문제 모음

P缶 2018. 12. 14. 15:54


--3> EMP테이블에서 직업을 출력하되, 각 항목(ROW)가 중복되지 않게 출력하라.

  select job from emp group by job;


--7> 1981년 2월 20일 ~ 1981년 5월 1일에 입사한 사원의 이름,직업 및 

--입사일을 출력하라. 입사일을 기준으로 해서 오름차순으로 정렬하라.

   select ename, job, hiredate from emp where (hiredate between '80/02/20' and '81/05/01') order by hiredate;

 

--9> 10번 및 30번 부서에 속하는 모든 사원 중 급여가 1500을 넘는 사원의 이름 및 급여를 출력하라.

--(단 컬럼명을 각각 employee 및 Monthly Salary로 지정하시오)

    select ename as employee, sal as MonthlySalary from emp where (sal > 1500) and (deptno between 10 and 30);


--11> 커미션을 받는 모든 사원의 이름, 급여 및 커미션을 출력하되, 

-- 급여를 기준으로 내림차순으로 정렬하여 출력하라.

 select ename, sal, comm from emp where comm is not null order by comm desc;

 

--13> 이름에 L이 두 번 들어가며 부서 30에 속해있는 사원의 이름을 출력하라.

select ename from emp where ename like '%L%L%' and deptno=30;

 

--15> 사원번호, 이름, 급여 그리고 15% 인상된 급여를 정수로 표시하되 컬럼명을 New Salary로 지정하여 출력하라.

 select empno, ename, round(sal*1.15) newSalary from emp;


--19> 사원의 이름과 커미션을 출력하되, 커미션이 책정되지 않은 사원의 커미션은 'no commission'으로 출력하라. 

TO_CHAR(숫자, 날짜 컬럼) -> 숫자나 날짜를 문자로 변환 

 select ename, NVL(TO_CHAR(comm), 'no commision') comm from emp;


--27> 모든 사원의 이름,직업,부서이름,급여 및 등급을 출력하라.

 select e.ename, e.job, e.deptno, e.sal, s.grade from emp e join salgrade s

    on e.sal between s.losal and s.hisal;


--28> Smith보다 늦게 입사한 사원의 이름 및 입사일을 출력하라.
SELECT ENAME, HIREDATE
FROM EMP
WHERE HIREDATE>(SELECT HIREDATE
   FROM EMP
   WHERE ENAME='SMITH')

 
--29> 자신의 관리자보다 먼저 입사한 모든 사원의 이름, 입사일, 관리자의 이름, 관리자의 입사일을 출력하되
 각각 컬럼명을 Employee,EmpHiredate, Manager,MgrHiredate로 표시하여 출력하라.    (emp self Join)

SELECT E.ENAME AS "Employee", E.HIREDATE AS "EmpHIredate",
M.ENAME AS "Manager",
 M.HIREDATE AS "MgrHiredate"
FROM EMP E, EMP M
WHERE E.MGR=M.EMPNO AND E.HIREDATE<M.HIREDATE
 
--30> 모든 사원의 급여 최고액,최저액,총액 및 평균액을 출력하되 각 컬럼명을 Maximum, Minimum, Sum, Average로 지정하여 출력하라(직계함수)
SELECT MAX(SAL) AS "Maximum"MIN(SAL) AS "Minimum",
 SUM(SAL) AS "Sum", AVG(SAL) AS "Average"
FROM EMP
 
--31> 각 직업별로 급여 최저액.최고액,총액 및 평균액을 출력하라.
SELECT JOB, MAX(SAL), MIN(SAL), SUM(SAL), AVG(SAL)
FROM EMP
GROUP BY JOB
 
--32> 직업이 동일한 사람 를 직업과 같이 출력하라.
SELECT JOB, COUNT(JOB)
FROM EMP
GROUP BY JOB    (group by 필요한 이유 : 직업이 clerk으로 동일한 사람 묶음, 직업이 salesMan으로 동일한 사람 묶음...)
 
--33> 관리자의 수를 출력하되, 관리자 번호가 중복되지 않게하라. 그리고, 컬럼명을 Number of Manager로 지정하여 출력하라.
SELECT COUNT(DISTINCT(MGR)) AS "Number of Manager"
FROM EMP
 
--34> 최고 급여와 최저 급여의 차액을 출력하라.
SELECT MAX(SAL)-MIN(SAL) FROM EMP
 
--35> 관리자 번호 및 해당 관리자에 속한 사원들의 최저 급여를 출력하라. 
단, 관리자가 없는 사원 및 최저 급여가 1000 미만인 그룹은 제외시키고 급여를 기준으로 출력 결과를 내림차순으로 정렬하라.
SELECT MGR, MIN(SAL)
FROM EMP
WHERE MGR IS NOT NULL
GROUP BY MGR
HAVING MIN(SAL)>=1000
ORDER BY MIN(SAL)        (쿼리 순서 1.FROM 2.WHERE 3.GROUP BY 4.HAVING 5.SELECT 6.ORDER BY)
 
--36> 부서별로 부서이름, 부서위치, 사원 수 및 평균 급여를 출력하라. 그리고 각각의 컬럼명을 부서명,위치,사원의 수,평균급여로 표시하라.
SELECT E.DEPTNO AS "부서명", D.DNAME AS "부서이름", D.LOC AS "위치",
 COUNT(E.EMPNO) AS "사원의 수", AVG(E.SAL) AS "평균급여"
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
GROUP BY E.DEPTNO, D.DNAME, D.LOC    (DEPTNO로 묶고 >> 그안에서 DNAME으로 묶고 >> 그안에서 D.LOC로 묶기)
 
--37> Smith와 동일한 부서에 속한 모든 사원의 이름 및 입사일을 출력하라. 단, Smith는 제외하고 출력하시오
SELECT ENAME, TO_CHAR(HIREDATE,'YYYY-MM-DD')
FROM EMP
WHERE DEPTNO IN(SELECT DEPTNO
   FROM EMP
   WHERE ENAME='SMITH')
AND ENAME!='SMITH'
 
--38> 자신의 급여가 평균 급여보다 많은 모든 사원의 사원 번호, 이름, 급여를 표시하는 질의를 작성하고 급여를 기준으로 결과를 내림차순으로 정렬하라.
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL>(SELECT AVG(SAL)
  FROM EMP)
ORDER BY SAL DESC
 
--39> 이름에 T가 들어가는 사원의 속한 부서에서 근무하는 모든 사원의 사원번호 및 이름을 출력하라.
SELECT EMPNO, ENAME
FROM EMP
WHERE DEPTNO IN(SELECT DEPTNO
   FROM EMP
   WHERE ENAME LIKE '%T%')
 
--41> KING에게 보고하는 모든 사원의 이름과 급여를 출력하라.
SELECT ENAME, SAL
FROM EMP
WHERE MGR=(SELECT EMPNO
  FROM EMP
  WHERE ENAME='KING')
 

--44> 커미션을 받는 사원과 급여가 일치하는 사원의 이름,부서번호,급여를 출력하라.
SELECT ENAME, DEPTNO, SAL
FROM EMP
WHERE SAL IN(SELECT SAL
  FROM EMP
  WHERE COMM IS NOT NULL)    (서브쿼리 연산자가 여러개면, ANY, OR, NOT IN)
 

--46> Scott과 동일한 급여 및 커미션을 받는 모든 사원의 이름, 입사일 및 급여를 출력하시오
SELECT ENAME, HIREDATE, SAL
FROM EMP
WHERE SAL=(SELECT SAL
  FROM EMP
  WHERE ENAME='SCOTT')
AND NVL(COMM,0)=(SELECT NVL(COMM,0)
  FROM EMP
  WHERE ENAME='SCOTT')
  
--47> 직업이 Clerk 인 사원들보다 더 많은 급여를 받는 사원의 사원번호, 이름, 급여를 출력하되, 결과를 급여가 높은 순으로 정렬하라.
SELECT EMPNO, ENAME, SAL
FROM EMP
WHERE SAL>ALL(SELECT SAL
  FROM EMP
  WHERE JOB='CLERK'--결국 최대값과 비교 any 최소값과 비교
ORDER BY SAL DESC
 
--48> 이름에 A가 들어가는 사원과 같은 직업을 가진 사원의 이름과 월급, 부서번호를 출력하라.
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE JOB IN(SELECT JOB
  FROM EMP
  WHERE ENAME LIKE '%A%')
 
--49> New  York 에서 근무하는 사원과 급여 및 커미션이 같은 사원의 사원이름과 부서명을 출력하라.
select * from emp join dept 
on emp.deptno = dept.deptno
and dept.loc='NEW YORK';
 
SELECT E.ENAME, D.DNAME
FROM EMP E, DEPT D
WHERE
e.deptno= d.deptno
AND E.SAL IN(
          SELECT E.SAL
                FROM EMP E, DEPT D
                WHERE E.DEPTNO=D.DEPTNO AND LOC='NEW YORK'
                  )
AND NVL(COMM,0) IN(
               SELECT NVL(COMM,0)
               FROM EMP E, DEPT D
               WHERE E.DEPTNO=D.DEPTNO
                              AND LOC='NEW YORK');
 
--50> Dallas에서 근무하는 사원과 직업 및 관리자가 같은 사원의 사원번호,사원이름, 직업,월급,부서명,커미션을 출력하되 
커미션이 책정되지 않은 사원은 NoCommission으로 표시하고, 커미션의 컬럼명은 Comm으로 나오게 출력하시오. (단, 최고월급부터 출력되게 하시오)

SELECT E.EMPNO, E.ENAME, E.JOB, E.SAL, D.DNAME,
NVL((TO_CHAR(E.COMM)),'NoCommision') AS "COMM"
FROM EMP E, DEPT D
WHERE E.DEPTNO=D.DEPTNO
AND JOB IN(SELECT JOB
  FROM EMP E, DEPT D
  WHERE E.DEPTNO=D.DEPTNO AND LOC='DALLAS')
AND MGR IN(SELECT MGR
  FROM EMP E, DEPT D
  WHERE E.DEPTNO=D.DEPTNO AND LOC='DALLAS')



 * view


'개발자 > 20181127 교육과정' 카테고리의 다른 글

[알고리즘] 완전수 구하기  (0) 2018.12.17
--PL-SQL  (0) 2018.12.17
배열 선언과 초기화  (0) 2018.12.12
삼항연산자  (0) 2018.12.12
eXERD 포워드 엔지니어링 연결설정  (0) 2018.12.11