본문 바로가기

Programming/SQL

8. 연습(2)

Edit

8. 연습(2)

1. 부서별 부서장 정보를 출력하시오.

SELECT DEPT_NAME, FIRST_NAME, LAST_NAME, SALARY
FROM DEPT_MANAGER DM
INNER JOIN DEPARTMENTS DEP ON DEP.DEPT_NO=DM.DEPT_NO
INNER JOIN EMPLOYEES EMP ON EMP.EMP_NO=DM.EMP_NO
INNER JOIN SALARIES SAL ON SAL.EMP_NO=DM.EMP_NO
WHERE DM.TO_DATE='9999-01-01' AND SAL.TO_DATE='9999-01-01'
ORDER BY DEPT_NAME;


2. 부서별 정보(부서장, 부서별 급여 평균)을 출력하시오.

SELECT DEPT_NAME, FIRST_NAME, LAST_NAME, AVG_SALARY 
FROM DEPT_MANAGER DM
INNER JOIN DEPARTMENTS DEP ON DEP.DEPT_NO=DM.DEPT_NO
INNER JOIN EMPLOYEES EMP ON EMP.EMP_NO=DM.EMP_NO
INNER JOIN (
SELECT DEPT_NO, AVG(SALARY) AVG_SALARY
FROM DEPT_EMP DE
INNER JOIN SALARIES SAL ON SAL.EMP_NO=DE.EMP_NO
WHERE DE.TO_DATE='9999-01-01' AND SAL.TO_DATE='9999-01-01'
GROUP BY DEPT_NO
) DS ON DS.DEPT_NO=DM.DEPT_NO
WHERE DM.TO_DATE='9999-01-01'
ORDER BY DEPT_NAME


3. 부서별 직원 리스트를 출력하되 부서장이면 표시를 하고, 각 부서에서 가장 먼저 나오게 출력하시오..

SELECT DEPT_NAME
, FIRST_NAME
, LAST_NAME
, IF(DM.EMP_NO IS NULL, NULL, 'MANAGER') POSITION
FROM DEPT_EMP DE
INNER JOIN DEPARTMENTS DEP ON DEP.DEPT_NO=DE.DEPT_NO
INNER JOIN EMPLOYEES EMP ON EMP.EMP_NO=DE.EMP_NO
LEFT OUTER JOIN DEPT_MANAGER DM ON DM.EMP_NO=DE.EMP_NO
AND DM.TO_DATE='9999-01-01'
WHERE DE.TO_DATE='9999-01-01'
ORDER BY DEPT_NAME, DM.EMP_NO DESC, FIRST_NAME, LAST_NAME


4. 부서별 직원 리스트와 급여를 출력하되, 부서장이면 표시를 하고 직원들의 급여 평균을 표시하시오.

  • 이 문제는 실적 계산에 많이 사용하는 SQL문으로
  • 급여가 아닌 실적으로 하는 것이 적절하지만 데이터가 없어서 급여를 실적처럼 사용해서 문제를 풀어본다.
  • 즉, 개인은 개인의 실적, 팀장은 팀원 실적의 평균으로 계산.
SELECT DEPT_NAME
, FIRST_NAME
, LAST_NAME
, IF(DM.EMP_NO IS NULL, SAL.SALARY, DS.AVG_SALARY) AVG_SALARY
, IF(DM.EMP_NO IS NULL, NULL, 'MANAGER') POSITION
FROM DEPT_EMP DE
INNER JOIN DEPARTMENTS DEP ON DEP.DEPT_NO=DE.DEPT_NO
INNER JOIN EMPLOYEES EMP ON EMP.EMP_NO=DE.EMP_NO
INNER JOIN SALARIES SAL ON SAL.EMP_NO=DE.EMP_NO
LEFT OUTER JOIN DEPT_MANAGER DM ON DM.EMP_NO=DE.EMP_NO
AND DM.TO_DATE='9999-01-01'
LEFT OUTER JOIN (
SELECT DEPT_NO, AVG(SALARY) AVG_SALARY
FROM DEPT_EMP DE
INNER JOIN SALARIES SAL ON SAL.EMP_NO=DE.EMP_NO
WHERE DE.TO_DATE='9999-01-01' AND SAL.TO_DATE='9999-01-01'
GROUP BY DEPT_NO
) DS ON DS.DEPT_NO=DE.DEPT_NO
WHERE DE.TO_DATE='9999-01-01' AND SAL.TO_DATE='9999-01-01'
ORDER BY DEPT_NAME, DM.EMP_NO DESC, FIRST_NAME, LAST_NAME


출처 : SW 개발이 좋은 사람

%23%23%23%208.%20%uC5F0%uC2B5%282%29%0A%0A@%28SQL%29%5Btistory%2C%20SQL%5D%0A%0A-%20%5B**%uC0D8%uD50C%20%uB370%uC774%uD130%20%uBCA0%uC774%uC2A4%20%uAC1C%uC694**%5D%28http%3A//youssol.tistory.com/26%29%0A%3Cbr%3E%0A%0A**1.%20%uBD80%uC11C%uBCC4%20%uBD80%uC11C%uC7A5%20%uC815%uBCF4%uB97C%20%uCD9C%uB825%uD558%uC2DC%uC624.**%0A%21%5BAlt%20text%5D%28./1.png%29%0A%60%60%60sql%0ASELECT%20DEPT_NAME%2C%20FIRST_NAME%2C%20LAST_NAME%2C%20SALARY%0A%20%20FROM%20DEPT_MANAGER%20DM%0A%20INNER%20JOIN%20DEPARTMENTS%20DEP%20ON%20DEP.DEPT_NO%3DDM.DEPT_NO%0A%20INNER%20JOIN%20EMPLOYEES%20EMP%20ON%20EMP.EMP_NO%3DDM.EMP_NO%0A%20INNER%20JOIN%20SALARIES%20SAL%20ON%20SAL.EMP_NO%3DDM.EMP_NO%0A%20WHERE%20DM.TO_DATE%3D%279999-01-01%27%20AND%20SAL.TO_DATE%3D%279999-01-01%27%20%0A%20ORDER%20BY%20DEPT_NAME%3B%0A%60%60%60%0A%0A%3Cbr%3E%0A%0A**2.%20%uBD80%uC11C%uBCC4%20%uC815%uBCF4%28%uBD80%uC11C%uC7A5%2C%20%uBD80%uC11C%uBCC4%20%uAE09%uC5EC%20%uD3C9%uADE0%29%uC744%20%uCD9C%uB825%uD558%uC2DC%uC624.**%0A%21%5BAlt%20text%5D%28./2.png%29%0A%60%60%60sql%0ASELECT%20DEPT_NAME%2C%20FIRST_NAME%2C%20LAST_NAME%2C%20AVG_SALARY%20%0A%20%20FROM%20DEPT_MANAGER%20DM%0A%20INNER%20JOIN%20DEPARTMENTS%20DEP%20ON%20DEP.DEPT_NO%3DDM.DEPT_NO%0A%20INNER%20JOIN%20EMPLOYEES%20EMP%20ON%20EMP.EMP_NO%3DDM.EMP_NO%0A%20INNER%20JOIN%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20SELECT%20DEPT_NO%2C%20AVG%28SALARY%29%20AVG_SALARY%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20FROM%20DEPT_EMP%20DE%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20INNER%20JOIN%20SALARIES%20SAL%20ON%20SAL.EMP_NO%3DDE.EMP_NO%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20WHERE%20DE.TO_DATE%3D%279999-01-01%27%20AND%20SAL.TO_DATE%3D%279999-01-01%27%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20GROUP%20BY%20DEPT_NO%0A%09%09%09%29%20DS%20ON%20DS.DEPT_NO%3DDM.DEPT_NO%0A%20WHERE%20DM.TO_DATE%3D%279999-01-01%27%20%20%0A%20ORDER%20BY%20DEPT_NAME%0A%60%60%60%0A%0A%3Cbr%3E%0A%0A%0A**3.%20%uBD80%uC11C%uBCC4%20%uC9C1%uC6D0%20%uB9AC%uC2A4%uD2B8%uB97C%20%uCD9C%uB825%uD558%uB418%20%uBD80%uC11C%uC7A5%uC774%uBA74%20%uD45C%uC2DC%uB97C%20%uD558%uACE0%2C%20%uAC01%20%uBD80%uC11C%uC5D0%uC11C%20%uAC00%uC7A5%20%uBA3C%uC800%20%uB098%uC624%uAC8C%20%uCD9C%uB825%uD558%uC2DC%uC624..**%0A%21%5BAlt%20text%5D%28./3.png%29%0A%60%60%60sql%0ASELECT%20DEPT_NAME%0A%09%20%2C%20FIRST_NAME%0A%09%20%2C%20LAST_NAME%0A%09%20%2C%20IF%28DM.EMP_NO%20IS%20NULL%2C%20NULL%2C%20%27MANAGER%27%29%20POSITION%0A%20%20FROM%20DEPT_EMP%20DE%0A%20INNER%20JOIN%20DEPARTMENTS%20DEP%20ON%20DEP.DEPT_NO%3DDE.DEPT_NO%0A%20INNER%20JOIN%20EMPLOYEES%20EMP%20ON%20EMP.EMP_NO%3DDE.EMP_NO%0A%20LEFT%20OUTER%20JOIN%20DEPT_MANAGER%20DM%20ON%20DM.EMP_NO%3DDE.EMP_NO%20%0A%09%09%09%20AND%20DM.TO_DATE%3D%279999-01-01%27%0A%20WHERE%20DE.TO_DATE%3D%279999-01-01%27%20%20%0A%20ORDER%20BY%20DEPT_NAME%2C%20DM.EMP_NO%20DESC%2C%20FIRST_NAME%2C%20LAST_NAME%0A%60%60%60%0A%0A%3Cbr%3E%0A%0A**4.%20%uBD80%uC11C%uBCC4%20%uC9C1%uC6D0%20%uB9AC%uC2A4%uD2B8%uC640%20%uAE09%uC5EC%uB97C%20%uCD9C%uB825%uD558%uB418%2C%20%uBD80%uC11C%uC7A5%uC774%uBA74%20%uD45C%uC2DC%uB97C%20%uD558%uACE0%20%uC9C1%uC6D0%uB4E4%uC758%20%uAE09%uC5EC%20%uD3C9%uADE0%uC744%20%uD45C%uC2DC%uD558%uC2DC%uC624.**%0A%21%5BAlt%20text%5D%28./4.png%29%0A%3E%20-%20%uC774%20%uBB38%uC81C%uB294%20%uC2E4%uC801%20%uACC4%uC0B0%uC5D0%20%uB9CE%uC774%20%uC0AC%uC6A9%uD558%uB294%20SQL%uBB38%uC73C%uB85C%0A%3E%20-%20%uAE09%uC5EC%uAC00%20%uC544%uB2CC%20%uC2E4%uC801%uC73C%uB85C%20%uD558%uB294%20%uAC83%uC774%20%uC801%uC808%uD558%uC9C0%uB9CC%20%uB370%uC774%uD130%uAC00%20%uC5C6%uC5B4%uC11C%20%uAE09%uC5EC%uB97C%20%uC2E4%uC801%uCC98%uB7FC%20%uC0AC%uC6A9%uD574%uC11C%20%uBB38%uC81C%uB97C%20%uD480%uC5B4%uBCF8%uB2E4.%0A%3E%20-%20%uC989%2C%20%uAC1C%uC778%uC740%20%uAC1C%uC778%uC758%20%uC2E4%uC801%2C%20%uD300%uC7A5%uC740%20%uD300%uC6D0%20%uC2E4%uC801%uC758%20%uD3C9%uADE0%uC73C%uB85C%20%uACC4%uC0B0.%0A%60%60%60sql%0ASELECT%20DEPT_NAME%0A%09%20%2C%20FIRST_NAME%0A%09%20%2C%20LAST_NAME%0A%20%20%20%20%20%2C%20IF%28DM.EMP_NO%20IS%20NULL%2C%20SAL.SALARY%2C%20DS.AVG_SALARY%29%20AVG_SALARY%0A%20%20%20%20%20%2C%20IF%28DM.EMP_NO%20IS%20NULL%2C%20NULL%2C%20%27MANAGER%27%29%20POSITION%0A%20%20FROM%20DEPT_EMP%20DE%0A%20INNER%20JOIN%20DEPARTMENTS%20DEP%20ON%20DEP.DEPT_NO%3DDE.DEPT_NO%0A%20INNER%20JOIN%20EMPLOYEES%20EMP%20ON%20EMP.EMP_NO%3DDE.EMP_NO%0A%20INNER%20JOIN%20SALARIES%20SAL%20ON%20SAL.EMP_NO%3DDE.EMP_NO%0A%20%20LEFT%20OUTER%20JOIN%20DEPT_MANAGER%20DM%20ON%20DM.EMP_NO%3DDE.EMP_NO%20%0A%09%09%09%20%20AND%20DM.TO_DATE%3D%279999-01-01%27%0A%20%20LEFT%20OUTER%20JOIN%20%28%0A%09%09%09%20%20%20%20%20%20%20SELECT%20DEPT_NO%2C%20AVG%28SALARY%29%20AVG_SALARY%0A%09%09%20%20%20%20%20%20%20%20%20%20%20%20%20FROM%20DEPT_EMP%20DE%0A%09%09%20%20%20%20%20%20%20%20%20%20%20%20INNER%20JOIN%20SALARIES%20SAL%20ON%20SAL.EMP_NO%3DDE.EMP_NO%0A%09%09%09%20%20%20%20%20%20%20%20WHERE%20DE.TO_DATE%3D%279999-01-01%27%20AND%20SAL.TO_DATE%3D%279999-01-01%27%20%0A%09%09%20%20%20%20%20%20%20%20%20%20%20%20GROUP%20BY%20DEPT_NO%0A%09%09%09%09%20%20%29%20DS%20ON%20DS.DEPT_NO%3DDE.DEPT_NO%0A%20WHERE%20DE.TO_DATE%3D%279999-01-01%27%20AND%20SAL.TO_DATE%3D%279999-01-01%27%0A%20ORDER%20BY%20DEPT_NAME%2C%20DM.EMP_NO%20DESC%2C%20FIRST_NAME%2C%20LAST_NAME%0A%60%60%60%0A%0A%3Cbr%3E%0A%0A**%uCD9C%uCC98%20%3A%20**%20%5BSW%20%uAC1C%uBC1C%uC774%20%uC88B%uC740%20%uC0AC%uB78C%5D%28http%3A//forest71.tistory.com/%29

'Programming > SQL' 카테고리의 다른 글

대용량 테이블 삭제 방법  (0) 2017.05.02
9. 연습(3)  (0) 2017.03.11
7. 연습(1)  (0) 2017.03.11
6. 실습(4) - SubQuery  (0) 2017.02.28
5. 실습(3) - Join  (0) 2017.02.28