IT Study/Database-Oracle
SubQuery 예제(scott)
도뿌리
2018. 6. 22. 15:04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | -- 60) BLAKE와 같은 부서에 있는 사원들의 이름과 입사일을 구하는데 -- BLAKE는 제외하고 출력하시오.(BLAKE가 여러명일 수 있음) SELECT ENAME, HIREDATE FROM EMP WHERE DEPTNO IN ( SELECT DEPTNO FROM EMP WHERE ENAME = 'BLAKE') AND ENAME <> 'BLAKE'; -- 61) (평균급여보다 많은 급여)를 받는 사원들의 사원번호, 이름, 월급을 출력하는데 (월급이 -- 높은 사람순으로 출력)하시오. SELECT EMPNO,ENAME,SAL FROM EMP WHERE SAL > (SELECT AVG(SAL) FROM EMP) ORDER BY SAL DESC; -- 62) (10번부서에서 급여를 가장 적게 받는 사원)과 동일한 급여를 받는 사원의 이름을 출력하시오. SELECT ENAME FROM EMP WHERE SAL = (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = 10); -- 63) 사원수가 3명이 넘는 부서의 부서명과 사원수를 출력하시오. SELECT DNAME,COUNT(*) FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO GROUP BY DNAME HAVING COUNT(*) > 3; -- 64) 사원번호가 7844인 사원보다 빨리 입사한 사원의 이름과 입사일을 출력하시오. SELECT ENAME,HIREDATE FROM EMP WHERE HIREDATE < ( SELECT HIREDATE FROM EMP WHERE EMPNO = 7844); -- 65) 직속상사(mgr)가 KING인 모든 사원의 이름과 급여를 출력하시오. SELECT ENAME,SAL FROM EMP WHERE MGR = (SELECT EMPNO FROM EMP WHERE ENAME = 'KING'); -- 66) 20번 부서에서 가장 급여를 많이 받는 사원과 동일한 급여를 받는 사원의 이름과 부서명, -- 급여, 급여등급을 출력하시오.(emp, dept, salgrade) SELECT ENAME, DNAME, SAL, GRADE FROM EMP E, DEPT D, SALGRADE S WHERE E.DEPTNO = D.DEPTNO AND SAL BETWEEN S.LOSAL AND HISAL AND SAL = (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = 20 GROUP BY DEPTNO); -- 67) 총급여(sal+comm)가 평균 급여보다 많은 급여를 받는 사람의 부서번호, 이름, 총급여, -- 커미션을 출력하시오.(커미션은 유(O),무(X)로 표시하고 컬럼명은 "comm유무" 출력) SELECT DEPTNO, ENAME, SAL+NVL(COMM,0), NVL2(COMM,'유','무') AS "comm유무" FROM EMP WHERE SAL+NVL(COMM,0) > (SELECT AVG(SAL) FROM EMP); -- 68) CHICAGO 지역에서 근무하는 사원의 평균 급여보다 높은 급여를 받는 사원의 이름과 급여, -- 지역명을 출력하시오. SELECT ENAME, SAL, LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND SAL > (SELECT AVG(SAL) FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND LOC = 'CHICAGO' GROUP BY LOC); SELECT ENAME, SAL, LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND SAL > (SELECT AVG(SAL) FROM EMP E WHERE DEPTNO = (SELECT DEPTNO FROM DEPT WHERE LOC = 'CHICAGO') GROUP BY LOC); -- 69) 업무가 SALESMAN인 직원이 2명 이상인 부서의 이름, 근무하는 사원의 이름, 업무를 출력 -- 하시오.(컬럼명은 부서명, 사원명, 업무로 출력) SELECT DNAME "부서명",ENAME "사원명",JOB "업무" FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO AND DNAME IN (SELECT DNAME FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND JOB = 'SALESMAN' GROUP BY DNAME HAVING COUNT(*) > 2); SELECT DNAME "부서명",ENAME "사원명",JOB "업무" FROM EMP E,DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO IN (SELECT DEPTNO FROM EMP WHERE JOB = 'SALESMAN' GROUP BY DEPTNO HAVING COUNT(JOB) >= 2); -- 70) 커미션이 없는 사원들 중 월급이 가장 높은 사원의 이름과 급여등급을 출력하시오. SELECT ENAME,GRADE FROM EMP,SALGRADE WHERE SAL BETWEEN LOSAL AND HISAL AND SAL = ( SELECT MAX(SAL) FROM EMP WHERE COMM IS NULL); -- 71) SMITH의 관리자(mgr)의 이름과 부서명, 근무지역을 출력하시오. SELECT ENAME,DNAME,LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND EMPNO = (SELECT MGR FROM EMP WHERE ENAME ='SMITH'); | cs |