Database/Oracle
[SQL-Oracle]JOIN함수 실습 예제👩💻
sukii
2023. 11. 30. 14:43
반응형
⬛SQL JOIN 함수 실습 예제 👩💻
문제 8번이 어려웠다. OUTER JOIN을 사용한 문제를 좀 더 풀어봐야 할 것 같다!
--SQL [JOIN] 실습예제
--문제1) 부서테이블과 사원테이블에서 사번, 사원명, 부서코드, 부서명을 검색하시오.
--(사원명 오름차순 정렬할 것)
SELECT EMPNO, ENAME, EMP.DEPTNO, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
ORDER BY ENAME;
--문제2) 부서테이블과 사원테이블에서 사번, 사원명, 급여, 부서명을 검색하시오.
--단, 급여가 2000 이상인 사원에 대하여 급여기준으로 내림차순 정렬할 것.
SELECT EMPNO, ENAME, SAL, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
WHERE SAL>=2000
ORDER BY SAL DESC;
--문제3)부서 테이블과 사원 테이블에서 사번, 사원명, 업무, 급여, 부서명을 검색하시오.
--단, 업무가 Manager이며 급여가 2500이상인 사원에 대하여 사번을 기준으로 오름차순 정렬할 것.
SELECT EMPNO, ENAME, JOB, SAL, DNAME
FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
WHERE JOB='MANAGER' AND SAL>=2500
ORDER BY EMPNO;
--문제4)사원 테이블과 급여 등급 테이블에서 사번, 사원명, 급여, 등급을 검색하시오.
--단, 등급은 급여가 하한값과 상한값 범위에 포함되고 등급이 4이며 급여를 기준으로 내림차순 정렬할 것.
SELECT EMPNO, ENAME, SAL, GRADE
FROM EMP JOIN SALGRADE ON SAL BETWEEN LOSAL AND HISAL
WHERE GRADE=4
ORDER BY SAL DESC;
--문제5)부서 테이블, 사원 테이블, 급여등급 테이블에서 사번, 사원명, 부서명, 급여, 등급을 검색하시오.
--단, 등급은 급여가 하한값과 상한값 범위에 포함되며 등급을 기준으로 내림차순 정렬할 것.
SELECT EMPNO,ENAME,SAL,DNAME,LOC,GRADE
FROM EMP JOIN DEPT ON EMP.DEPTNO=DEPT.DEPTNO
JOIN SALGRADE ON SAL BETWEEN LOSAL AND HISAL
ORDER BY GRADE DESC;
--문제6)사원 테이블에서 사원명과 해당 사원의 관리자명을 검색하시오.
SELECT WORKER.ENAME 사원명,
MANAGER.ENAME 관리자명
FROM EMP WORKER, EMP MANAGER
WHERE WORKER.MGR=MANAGER.EMPNO(+);
--문제7)사원 테이블에서 사원명, 해당 사원의 관리자명, 해당 사원의 관리자의 관리자명을 검색하시오.
SELECT W.ENAME 사원명, M.ENAME 관리자명,
MM.ENAME "관리자의 관리자명"
FROM EMP W JOIN EMP M ON W.MGR=M.EMPNO
JOIN EMP MM ON M.MGR = MM.EMPNO;
--문제8) 7번 결과에서 상위 관리자가 없는 모든 사원의 이름도 사원명에 출력되도록 수정하시오.
--아래는 내가 푼 답)
--틀렸음. KING의 경우 관리자명과 관리자의 관리자명 모두 NULL로 출력되게끔 했어야 함.
SELECT WORKER.ENAME 사원명, MANAGER.ENAME 관리자명,
SUPERVISOR.ENAME "관리자의 관리자명"
FROM EMP WORKER, EMP MANAGER, EMP SUPERVISOR
WHERE WORKER.MGR=MANAGER.EMPNO
AND MANAGER.MGR=SUPERVISOR.EMPNO(+);
--정답)
--LEFT JOIN을 사용해야함.
SELECT W.ENAME 사원명,M.ENAME 관리자명,MM.ENAME "관리자의 관리자명"
FROM EMP W
LEFT JOIN EMP M ON W.MGR=M.EMPNO
LEFT JOIN EMP MM ON M.MGR=MM.EMPNO;
반응형