📊 EMP TABLE(사원)의 데이터
📊 DEPT TABLE(부서)의 데이터
- EMP, DEPT 테이블의 데이터를 활용
- DB 시험 대비 예제 풀이
ㅤ
ㅤ
- 사원의 사번, 이름, 부서번호, 부서명을 조회하시오. 부서명은 부서번호가 10일 때는 ‘인사부’, 20일 때는 ‘영업부’ 그 외의 값은 ‘생산부’로 조회되어야 합니다.
- 'CASE 함수'를 사용하여 쿼리문을 작성하세요.
SELECT EMPNO , ENAME , DEPTNO AS "부서번호" , CASE WHEN DEPTNO = 10 THEN '인사부' WHEN DEPTNO = 20 THEN '영업부' ELSE '생산부' END AS "부서명" FROM EMP;
ㅤ
- 2007년에 입사한 모든 사원의 사번, 이름, 입사일, 커미션을 입사일 기준 오름차순으로 조회하는 쿼리문을 작성하세요.
SELECT EMPNO , ENAME , HIREDATE , COMM FROM EMP ORDER BY HIREDATE ASC;
ㅤ
- 직급별로 그룹지어서 직급별 급여의 합과 급여의 평균, 커미션의 평균을 조회하는 쿼리문을 작성하세요. 단, 조회는 직급 기준 오름차순으로 정렬하여 나타내세요.
SELECT JOB , SUM(SAL) , AVG(SAL) , AVG(COMM) FROM EMP GROUP BY JOB ORDER BY JOB ASC;
ㅤ
- 서브쿼리를 사용하여 지역이 ‘서울’인 사원의 사번, 이름, 입사일, 급여, 부서번호, 지역명을 조회하는 쿼리문을 작성하세요.
SELECT EMPNO , ENAME , HIREDATE , SAL , DEPTNO , (SELECT LOC FROM DEPT WHERE dept.DEPTNO = emp.DEPTNO) AS LOC FROM emp WHERE DEPTNO IN ( SELECT DEPTNO FROM DEPT WHERE LOC = '서울' );
❌ 오답 풀이
SELECT EMPNO , ENAME , HIREDATE , SAL , DEPTNO , (SELECT LOC FROM DEPT WHERE LOC = '서울') AS LOC FROM emp;
- 위와 같이 작성하여 데이터가 조회되었으나, 조회한 모든 데이터의 LOC 컬럼이 '서울'로 변경되어 잘못 조회가 됨.
- LOC은 EMP 테이블에 없으므로, DEPT 테이블과 조인하여 사원이 속한 위치를 가져와야 함.
➡️ DEPTNO를 조인키로 사용하여 DEPT 테이블의 위치를 가져옴- '서울'에 속한 부서 DEPTNO를 서브쿼리로 가져와 해당 부서 정보를 필터링, 해당 사원들의 부서의 LOC값 가져옴.
ㅤ
- 조인을 사용하여 지역이 ‘서울’인 사원의 사번, 이름, 입사일, 급여, 부서번호, 지역명을 조회하는 쿼리문을 작성하세요.
SELECT EMPNO , ENAME , HIREDATE , SAL , emp.DEPTNO , LOC FROM emp JOIN dept ON emp.DEPTNO = dept.DEPTNO WHERE DEPT.LOC = '서울';