셀프조인 컬럼 구분 질문드립니다 0 3 748

by 안쓰 [SQL Query] [2019.01.28 10:46:14]


안녕하세요

sql 문제풀다 질문드립니다

 

Q. 자신의 매니저보다 연봉(salary)를 많이 받는 직원들의 성(last_name)과 연봉(salary)를 출 력하시오. 
SELECT
           e.LAST_NAME, e.SALARY
  FROM EMPLOYEES e, EMPLOYEES m
 WHERE e.MANAGER_ID = m.EMPLOYEE_ID 
   AND e.SALARY > m.SALARY;

 

위 셀프조인 쿼리에서 매니저의 급여와 직원들의 급여를 구분하는 기준이있을까요?

제생각엔 같은 employee 테이블이지만

조인조건에서 e.manager_id 를 사용했으니 e 테이블이 매니저 급여를 나타내고

문제에서 요청한대로 e.salary < m.salary 

매니저의 급여가 더낮은 조건을 걸어야하는게 아닌가싶은데요 ㅜㅜ

 

답변주시면 감사하겠습니다~!!

by 우리집아찌 [2019.01.28 11:12:32]
-- 한번에 풀지 마시고 하나씩 조건에 맞춰서 풀어보세요.
-- 데이터를 보시면서 푸시면 더 편합니다.
 
WITH EMPLOYEES ( EMPLOYEE_ID , LAST_NAME , JOB ,MANAGER_ID , SALARY , DEPT_NO ) AS (
SELECT '7369', 'SMITH', 'CLERK', '7902', '800', '20' FROM DUAL UNION ALL
SELECT '7499', 'ALLEN', 'SALESMAN', '7698', '1600', '30' FROM DUAL UNION ALL
SELECT '7566', 'JONES', 'MANAGER', '7839', '2975', '20' FROM DUAL UNION ALL
SELECT '7654', 'MARTIN', 'SALESMAN', '7698', '1250', '30' FROM DUAL UNION ALL
SELECT '7698', 'BLAKE', 'MANAGER', '7839', '2850', '30' FROM DUAL UNION ALL
SELECT '7782', 'CLARK', 'MANAGER', '7839', '2450', '10' FROM DUAL UNION ALL
SELECT '7788', 'SCOTT', 'ANALYST', '7566', '3000', '20' FROM DUAL UNION ALL
SELECT '7839', 'KING', 'PRESIDENT', '', '5000', '10' FROM DUAL UNION ALL
SELECT '7844', 'TURNER', 'SALESMAN', '7698', '1500', '30' FROM DUAL UNION ALL
SELECT '7876', 'ADAMS', 'CLERK', '7788', '1100', '20' FROM DUAL UNION ALL
SELECT '7900', 'JAMES', 'CLERK', '7698', '950', '30' FROM DUAL UNION ALL
SELECT '7902', 'FORD', 'ANALYST', '7566', '3000', '20' FROM DUAL UNION ALL
SELECT '7934', 'MILLER', 'CLERK', '7782', '1300', '10' FROM DUAL 
)
/*
Q. 자신의 매니저보다 연봉(salary)를 많이 받는 직원들의 성(last_name)과 연봉(salary)를 출 력하시오. 
*/
-- 1. 자신의 매니저를  구한다
SELECT e.EMPLOYEE_ID AS EMP 
     , e.LAST_NAME   AS EMP_NM
     , e.SALARY      AS EMP_SALARY
     , m.EMPLOYEE_ID AS MGR 
     , m.LAST_NAME   AS MGR_NM
     , m.SALARY      AS MGR_SALARY
  FROM EMPLOYEES e   -- EMP
     , EMPLOYEES m   -- MGR
 WHERE e.MANAGER_ID = m.EMPLOYEE_ID 

-- 2. 자신의 매니저보다 많이 받는 직원을 구한다.
SELECT e.EMPLOYEE_ID AS EMP 
     , e.LAST_NAME   AS EMP_NM
     , e.SALARY      AS EMP_SALARY
     , m.EMPLOYEE_ID AS MGR 
     , m.LAST_NAME   AS MGR_NM
     , m.SALARY      AS MGR_SALARY
  FROM EMPLOYEES e   -- EMP
     , EMPLOYEES m   -- MGR
 WHERE e.MANAGER_ID = m.EMPLOYEE_ID 
   AND e.SALARY     > m.SALARY      -- 매니저의 연봉보다 많는경우

 

 


by 마농 [2019.01.28 12:37:40]

사원(employee_id)마다 매니저(manager_id)가 지정되어 있는 테이블 구조입니다.
매니저 또한 사원이기 때문에 manager_id 는 employee_id 를 참조합니다.
자기 참조 구조입니다.
1. e.employee_id 가 사원의 사번이고
2. e.manager_id 는 해당 사원의 매니저의 사번이죠.
3. e.manager_id = m.employee_id 조인을 통해 매니저의 사원정보를 가져옵니다. m
4. 따라서 m 은 매니저의 정보, e 는 사원의 정보입니다.


by 안쓰 [2019.01.28 13:56:55]

우리집아찌님, 마농님 너무너무 감사합니다

한단계씩 풀어서보니 확실히 이해가가네요! 감사합니다정말.

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