안녕하세요.. 오라클 db 쿼리 질문을 드립니다.. 4

by 달빛그림자 [SQL Query] [2022.03.15 16:01:44]


안녕하세요.. 오라클 DB SQL 쿼리 질문을 드립니다. 

그림1번과(EMP)  그림2번(DEPT) 처럼 현재 테이블 2개로  구성 되어 있습니다. 

아래와 같이 SQL 문장을 작성하여..  그림 3번 처럼 결과가 나오는데요..  

3번 그림의 사각형 박스 표시를 보면.. 

현재 상사부서명을 직업의 부서명으로 똑 같이 갖고 오고 있는 상태입니다..  (잘못됨)

제가 원하는건  상사사번, 상사직업의 상사부서명을 갖고 와야 합니다..

질의결과 5번행 결과값을 보면..  PRESIDENT 부서명이 ACCOUNTING 이므로..  상사부서명은 모두 ACCOUNTING 부서명을 갖고 와야 하는데.. 다른값을 가지고 옵니다.

아래 그림  박스표시에서  7839 PRESIDNT 의  상사부서명에는 ACCOUNTIG 을 가지고 와야 합니다.  (RESEARCH, SALES 가 아닌)

제가 SUB 쿼리로 이것저것 해보았는데..  잘 안되어 자문을 구합니다.

Please~~~~   감사합니다..   

----------------

select  a.empno 사번, a.ename 이름, a.job 직업, c.dname 부서명, a.sal 연봉,

        b.ename 상사이름, b.empno 상사사번, b.job 상사직업, c.dname 상사부서명, b.sal 상사연봉 

from emp a, emp b, dept c

where a.mgr = b.empno (+) 

              and a.deptno = c.deptno 

              and a.sal > (select median(sal) from emp )

order by a.empno asc;

by 마농 [2022.03.15 18:37:00]
-- Self Join --
SELECT a.empno 사번
     , a.ename 이름
     , a.job   직업
     , c.dname 부서명
     , a.sal   연봉
     , b.ename 상사이름
     , b.empno 상사사번
     , b.job   상사직업
     , d.dname 상사부서명  --
     , b.sal   상사연봉 
  FROM emp  a  -- 사원
     , emp  b  -- 상사
     , dept c  -- 사원부서
     , dept d  -- 상사부서
 WHERE a.mgr = b.empno(+)
   AND a.deptno = c.deptno
   AND b.deptno = d.deptno(+)  --
   AND a.sal > (SELECT MEDIAN(sal) FROM emp)
 ORDER BY a.empno
;
-- 계층 쿼리 --
SELECT a.empno 사번
     , a.ename 이름
     , a.job   직업
     , c.dname 부서명
     , a.sal   연봉
     , PRIOR a.ename 상사이름
     , PRIOR a.empno 상사사번
     , PRIOR a.job   상사직업
     , PRIOR c.dname 상사부서명
     , PRIOR a.sal   상사연봉 
  FROM emp  a
     , dept c
 WHERE a.deptno = c.deptno
   AND a.sal > (SELECT MEDIAN(sal) FROM emp)
 START WITH a.mgr IS NULL
 CONNECT BY PRIOR a.empno = a.mgr
 ORDER BY a.empno
;

 


by 달빛그림자 [2022.03.15 22:27:02]

와~~~ 마농님~~~ 정말 대단하십니다~~~  2~3일 고민 했었는데.. 바로 해결되었네요~~~

오라클 sql 지존이신듯~~~  존경합니다~~  고맙습니다..  ^^

p.s  :  self join 은 제가 원하는데로 결과값이 잘 나오는데.. 계층쿼리는 실행하여도 결과값이 없네요.. (오류는 없음)

계층쿼리 문장이 무엇을 의미하는지 잘 모르겠지만..  암튼 문제가 해결되어 넘 감사합니다..   계층 쿼리는 제가 공부해 보도록 할께요~~~  ^^

        

 


by 마농 [2022.03.16 00:00:23]

scott.emp 테이블의 최상위 KING 의 mgr 값은 원래 NULL 인데요.
올려주신 이미지를 보니 NULL 이 아닌 0 값을 가지고 있네요.
START WITH a.mgr = 0 으로 조건을 바꾸면 나올 겁니다.


by 달빛그림자 [2022.03.16 00:20:20]

예.. 수정했더니 말씀해주신데로 결과값이 동일하게 잘 나옵니다..  와~~ 자세한 설명까지 정말 고맙습니다~~~ 
좋은 밤 되세요~~~ ^^


 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입