School/Database

[SQL]SQL Review

0lynny 2021. 9. 16. 00:24

scott 계정의 emp, dept, salgrade 테이블을 이용하여 SQL 질의를 작성하고 실행하시오.

 

1. 20번 부서나 30번 부서에 속하고 이름에 ‘AR’이 포함된 사원들의 이름과 부서번호, 업무(job)를 구하시오. (where절, OR 또는 IN, LIKE 연산자 이용)

2. RESEARCH 부서에서 일하는 사원들 중 급여가 2,000이하인 사원들의 수를 구하기 위해, (a) join 을 이용하는 질의와, (b) subquery를 이용하는 질의를 각각 작성하시오.

3. 사원들 중 급여등급이 5에 속하면서 수당(comm)이 500미만인 사원들의 이름과 급여, 수당을 구하고 “연봉”을 계산하시오. 단, 수당을 모를 경우 0으로 간주함 (non-equi-join, NVL 이용)

4. 모든 사원들의 이름, 입사일, 재직년수(만으로 계산), “퇴사예정일”(재직한지 30년 되는 날)을 구 하시오. 입사일은 “OOOO년 OO월 OO일” 형식으로 출력하고, 입사일이 빠른 사원부터 순서대 로 출력할 것 (SYSDATE, date 타입 연산/함수, 타입변환 함수, 버림 함수 이용)

5. 각 부서에서 같은 업무를 수행하는 사원들을 분류하여 부서번호, 업무명, 인원수, 평균 급여를 출력하시오. (group by절, 집계 함수 이용)

6. 사원이 2명 이상 있는 부서들에 대해 부서명과 평균 급여를 각각 구하시오. (having절 이용) (선택) 위 질의를 having절을 사용하지 않고 derived relation(subquery)을 사용하여 작성하시오.

7. 모든 부서에 대해 부서명과 사원수, 최대급여를 각각 구하시오. 단, 사원이 한 명도 없는 부서 도 결과에 포함되어야 함 (outer-join 이용)

8. 각 사원에 대해 같은 부서에 근무하는 동료 사원들의 이름을 구하시오. (self-join 이용) (참고: 위 질의의 결과는 두 사원의 이름 쌍들의 집합임. Oracle에서 제공하는 LISTAGG 함수를 사용하면 각 사원에 대해 모든 동료 사원들의 이름 리스트를 하나의 행에 출력할 수 있음)

9. 각 사원의 이름, 급여, “공제액”을 출력하되 급여가 가장 많은 사원부터 순서대로 출력하시오. 단, 공제액은 급여가 1000미만인 경우 급여의 1%, 급여가 1000이상 2000미만인 경우 1.5%, 급 여가 2000이상인 경우는 2%에 해당하는 금액으로 계산함 (CASE WHEN, 정렬 이용)