sql-join(조인) 이용 0 2 1,267

by 청포도레몬 [SQL Query] join 조인 [2021.07.01 21:35:13]


dbdata.sql (21,152Bytes)

안녕하세요 sql 시작한지 5일차된 비전공자입니다.

문제를 풀면서 풀어도 정답인지를 몰라서..

제가 최대한 풀어본 후 작성한 쿼리와 함께 질문올립니다.
첨부된 dbdata.sql을 바탕으로 작성해보았는데 
수정이 필요할 경우 도움 주시면 너무감사하겠습니다.

1. “EMP” 테이블에서 SAL이 1000 이상인 사원들에 대해 JOB을 기준으로 그룹 짓고 각 그룹 별 사원수가 2명 이상인 그룹의 JOB과 각 그룹의 사원수를 출력하라. 
|

select JOB, count(*)
from EMP
where SAL >= 1000
group by JOB
having count(*) >= 2


2. 조인을 이용하여 커미션(COMM)이 NULL인 사원의 사원번호(EMPNO), 이름(ENAME), 부서명(DNAME)을 출력하라. 



SELECT EMP.EMPNO, EMP.ENAME, DEPT.DNAME 
FROM EMP 
JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE EMP.COMM IS NULL;



3. 조인을 이용하여 회사의 평균 급여보다 많이 받는 사원의 상관인 사람의 사원번호 (EMPNO), 상관의 이름(ENAME), 상관의 부서명(DNAME)을 출력하라.(단, 상관이 없는 최고 직급은 출력하지 않는다.) 



SELECT DISTINCT EMP.EMPNO, EMP.ENAME, DEPT.DNAME 
FROM EMP 
JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
JOIN EMP AS SUB ON EMP.EMPNO = SUB.MGR
WHERE SUB.SAL > (SELECT AVG(SAL) FROM EMP);



4. 2번으로 만들어진 테이블 데이터와 3번으로 만들어진 테이블 데이터를 묶어 하나의 테이블 결과로 출력하라.(단, 결합된 테이블 데이터가 중복될 경우 중복을 허용하지 않는다.)




SELECT EMP.EMPNO, EMP.ENAME, DEPT.DNAME 
FROM EMP JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE EMP.COMM IS NULL
UNION
SELECT EMP.EMPNO, EMP.ENAME, DEPT.DNAME 
FROM EMP 
JOIN DEPT ON EMP.DEPTNO = DEPT.DEPTNO
WHERE EMP.EMPNO IN (
SELECT MGR FROM EMP
WHERE EMP.SAL >= (SELECT AVG(SAL) FROM EMP)
);

by 마농 [2021.07.02 11:16:15]

간결한 별칭을 이용해 쿼리를 보기 좋게 해 주세요.
FROM 절의 AS 사용은 MSSQL 이나 MySQL 에서만 됩니다.
Oracle 이라면 AS 사용 못합니다.
3번 문제 풀이에서는 제약조건 하나를 적용하지 않았네요.
(단, 상관이 없는 최고 직급은 출력하지 않는다.)
 

SELECT e.empno
     , e.ename
     , d.dname
  FROM emp e
  JOIN dept d
    ON e.deptno = d.deptno
 WHERE e.comm IS NULL
    OR ( e.empno IN (SELECT mgr FROM emp WHERE sal >= (SELECT AVG(sal) FROM emp))
       AND e.mgr IS NOT NULL    -- (단, 상관이 없는 최고 직급은 출력하지 않는다.) 
       )
;

 


by 청포도레몬 [2021.07.07 12:45:02]

조언과 답변 감사드립니다 마농님

참고하겠습니다. 

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