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;

 

반응형