코딩 연습장/데이터베이스(DB)

데이터베이스 8장 연습문제

Do아 2021. 3. 17. 00:51
728x90

2021/03/16(화)

 

 

 

 

 

문제1) 급여(SAL)가 2000초과인 사원들의 부서 정보, 사원 정보를 오른쪽과 같이 출력해 보세요

(단 SQL-99 이전 방식과 SQL-99 방식을 각각 사용하여 작성하세요).

 

 

 

문제2) 오른쪽과 같이 각 부서별 평균 급여, 최대 급여, 최소 급여, 사원수를 출력해 보세요(단 SQL-99 이전 방식과 SQL-99 방식을 각각 사용하여 작성하세요).

 

 

 

문제3) 모든 부서 정보와 사원 정보를 오른쪽과 같이 부서 번호, 사원 이름순으로 정렬하여 출력해 보세요(단 SQL-99 이전 방식과 SQL-99 방식을 각각 사용하여 작성하세요).

 

 

 

문제4)다음과 같이 모든 부서정보, 사원 정보, 급여 등급 정보, 각 사원의 직속 상관의 정보를 부서 번호, 사원번호 순서로 정렬하여 출력해보세요(단 SQL-99 이전 방식과 SQL-99 방식을 각각 사용하여 작성하세요).

 

 

 

 

 

 

 

 

 

 

내 풀이

 

문제1)

WHERE문을 이용한 방식

SELECT E.DEPTNO, DNAME, EMPNO, ENAME, SAL
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
AND SAL>2000
ORDER BY DEPTNO, SAL;

JOIN문을 사용한 방식

SELECT DEPTNO, DNAME, EMPNO, ENAME, SAL
FROM EMP NATURAL JOIN DEPT
WHERE SAL>2000
ORDER BY DEPTNO, SAL;

 

 

문제2)

WHERE문을 이용한 방식

SELECT E.DEPTNO, DNAME, TRUNC(AVG(SAL)) AS AVG_SAL, 
MAX(SAL) AS MAX_SAL, MIN(SAL) AS MIN_SAL, COUNT(*) AS CNT
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO
GROUP BY E.DEPTNO, DNAME;

JOIN문을 사용한 방식

SELECT DEPTNO, DNAME, TRUNC(AVG(SAL)) AS AVG_SAL, 
MAX(SAL) AS MAX_SAL, MIN(SAL) AS MIN_SAL, COUNT(*) AS CNT
FROM EMP NATURAL JOIN DEPT 
GROUP BY DEPTNO, DNAME;

 

 

문제3)

WHERE문을 이용한 방식

SELECT D.DEPTNO, DNAME, EMPNO, ENAME, JOB, SAL
FROM EMP E, DEPT D
WHERE D.DEPTNO = E.DEPTNO(+)
ORDER BY E.DEPTNO, ENAME;

JOIN문을 사용한 방식

SELECT DEPTNO, DNAME, EMPNO, ENAME, JOB, SAL
FROM EMP NATURAL RIGHT OUTER JOIN DEPT
ORDER BY DEPTNO, ENAME;

 

 

문제4)

WHERE문을 이용한 방식

SELECT D.DEPTNO, D.DNAME,E1.EMPNO, E1.ENAME, E1.MGR, E1.SAL, E1.DEPTNO AS DEPTNO_1, 
LOSAL, HISAL, GRADE,E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME
FROM EMP E1, EMP E2, DEPT D, SALGRADE S
WHERE D.DEPTNO = E1.DEPTNO(+) AND
E1.MGR = E2.EMPNO(+) AND 
E1.SAL BETWEEN S.LOSAL(+) AND S.HISAL(+)
ORDER BY D.DEPTNO, EMPNO;

JOIN문을 사용한 방식

SELECT D.DEPTNO, D.DNAME, E1.EMPNO, E1.ENAME, E1.MGR, E1.SAL, E1.DEPTNO AS DEPTNO_1, 
LOSAL, HISAL, GRADE, E2.EMPNO AS MGR_EMPNO, E2.ENAME AS MGR_ENAME
FROM EMP E1 FULL OUTER JOIN EMP E2 ON(E2.EMPNO = E1.MGR) 
RIGHT OUTER JOIN DEPT D ON(D.DEPTNO = E1.DEPTNO)
FULL OUTER JOIN SALGRADE S ON(E1.SAL BETWEEN S.LOSAL AND S.HISAL)
ORDER BY D.DEPTNO, E1.EMPNO;
728x90