DB/oracle

[oracle 예제 ] scott 계정 -(2) 8~20번

힘히힘 2021. 2. 16. 16:06
반응형

--8. 10번 부서의 사람들중에서 20번 부서의 사원과 같은 업무를 하는 사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라. --

 

 

 

SELECT a.empno 사원번호, a.ename 사원명, b.deptno 부서명, TO_CHAR(a.hiredate, 'yyyy-MM-dd') 입사일, b.loc 지역
FROM emp a
JOIN dept b
ON a.deptno=b.deptno
WHERE a.deptno =10
AND a.job IN (SELECT job FROM emp WHERE deptno=20);

 

 

 

--9. 10번 부서 중에서 30번 부서에는 없는 임무를 하는 사원의 사원번호, 이름, 부서명, 입사일, 지역을 출력하라.
SELECT e.empno 사원번호, e.ename 이름, d.dname 부서명, TO_char(e.hiredate, 'yyyy-mm-dd') 입사일, d.loc 지역
FROM emp e
JOIN dept d
ON e.deptno =d.deptno
WHERE e.deptno=10
AND e.job IN (SELECT job FROM emp WHERE deptno!=30);

 

 

 

 

 

 

❕❕--10. 10번 부서와 같은 일을 하는 사원의 사원번호, 이름, 부서명, 지역, 급여를 급여가 많은 순으로 출력하라.
SELECT e.empno 사원번호, e.ename 이름, d.dname 부서명, d.loc 지역, e.sal 급여
FROM emp e
JOIN dept d
WHERE e.deptno=10
ORDER BY e.sal asc;

 

??? 실행 안됨...

 

 

 

 

--11. 'MARTIN'이나 'SCOTT'의 급여와 같은 사원의 사원번호, 이름, 급여를 출력하라
SELECT e.empno 사원번호, e.ename 이름, e.sal 급여
FROM emp e
WHERE e.sal = (SELECT sal FROM emp WHERE ename in('MARTIN'))
or e.sal = (SELECT sal FROM emp WHERE ename in('SCOTT'));

 

 

 

여기부분을 보면, e.sal 하고 ename in ('MARTIN','SCOTT') ; 같이 사용해서 오류.

 

 

--12. 급여가 30번 부서의 최고 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.
SELECT e.empno 사원번호, e.ename 이름, e.sal 급여
FROM emp e
where e.sal> (SELECT max(sal) FROM emp WHERE deptno=30);

SELECT empno 사원번호, ename 이름, sal 급여
FROM emp
WHERE sal> (select max(sal) FROM emp WHERE deptno = 30);


--13. 급여가 30번 부서의 최저 급여보다 높은 사원의 사원번호, 이름, 급여를 출력하라.
SELECT empno 사원번호, ename 이름, sal 급여
FROM emp
WHERE sal > (SELECT min(sal) FROM emp WHERE deptno =30)
ORDER BY sal;

 

--14. 10번 부서에 대해 급여의 평균 값,최대 값,최소 값,인원 수를 구하여 출력하여라.
SELECT AVG(sal) "급여의 평균", max(sal) "최대 값" , min(sal) "최소 값"
FROM emp
WHERE deptno = 10;

--#별명 부여시 '' 이 아닌, "" 으로 해야지 사용가능--

 

--15. 각 부서별 같은 직무를 갖는 사원의 인원수를 구하여 부서 번호, 직무, 인원수를 출력하시오
-- 다시해보기!!
SELECT * FROM emp;
SELECT * FROM dept;


SELECT deptno "부서번호", job "직무", count(*) "인원수"
FROM emp
GROUP BY deptno, job
ORDER BY deptno, job;


--16. 사원들의 직무별 평균 급여와 최고급여,최저급여를 평균급여에 대해 오름차순으로 정렬하여라.

SELECT job "직무별", avg(sal) "평균급여", max(sal) "최고급여", min(sal) "최저급여"
FROM emp
GROUP BY job
ORDER BY avg(sal) asc;


--17. EMP와 DEPT테이블을 조인하여 모든 사원에 대해 부서 번호, 부서이름, 사원이름, 급여를 출력하여라.
SELECT deptno, dname, ename, sal
FROM emp INNER JOIN dept ON (dept.deptno = emp.deptno);

SELECT d.deptno, d.dname, e.ename, e.sal
FROM emp e INNER JOIN dept d ON (d.deptno=e.deptno);

 

--18. 이름이 'ALLEN'인 사원의 부서 이름을 출력하여라.
SELECT ename "사원", dname "부서이름"
FROM emp JOIN dept ON (emp.deptno=dept.deptno)
WHERE ename ='ALLEN';


--19.'ALLEN'과 직무가 같은 사원의 이름,부서 이름, 급여, 부서위치를 출력하여라.
SELECT ename "사원", dname "부서 이름", sal "급여", loc "부서위치"
FROM emp JOIN dept ON (emp.deptno=dept.deptno)
WHERE job = (SELECT job FROM emp WHERE ename = 'ALLEN');


--20. 전체사원의 평균 급여보다 급여가 많은 사람의 사원 번호,이름, 부서이름,입사일,부서위치,급여를 출력하여라
SELECT empno "사원 번호", ename "이름", dname "부서이름", hiredate "입사일", loc "부서위치", sal "급여"
FROM emp JOIN dept ON (emp.deptno=dept.deptno)
WHERE sal > (SELECT AVG(sal) FROM emp);