[Oracle SQL] join, subquery 예제 풀이

yoonheekim·2022년 11월 7일
0

Oracle SQL

목록 보기
13/15

📚 join

1. 자신의 매니저 보다 연봉을 높게 받는 직원의 FIRST_NAME과 SALARY를 출력하세요

처음 푼 코드:
select main.first_name as FRIST_NAME, main.salary as SALARY
from employees main, employees e
where main.manager_id=e.employee_id
and main.salary > (select salary from employees where ... 
다시 푼 코드(정답):
select e.first_name as FIRST_NAME, e.salary AS SALARY
from employees e,employees m
where e.manager_id=m.employee_id
and e.salary > m.salary;

✏️ 테이블 분석을 제대로 못해서 못 푼 것 같다. 서브쿼리로 풀려고 해도 안풀렸음.

📚subquery

2. 부서 이름(department_name) 별 직원들의 평균연봉(salary) 을 조회하시오.단,'30번’ 부서의 직원 평균 연봉보다 평균 연봉이 이하인 부서 정보만 출력되어야 합니다.

select d.department_name, avg(e.salary)
from employees e, departments d
where e.department_id=d.department_id
group by d.department_name
having avg(e.salary) <= (select avg(salary) from employees where department_id=30) 

✏️ having절에서 서브쿼리 사용

3.각 부서(department_id)별로 최고 연봉(salary)를 받는 사원의 사번(employee_id), 성(last_name)과 연봉(salary)을 조회하시오. 단 조회결과는 연봉의 내림차순으로 정렬되어 나타나야 합니다.

select employee_id, last_name, salary
from employees 
where (department_id, salary) in
(select department_id, max(salary)
from employees group by department_id) 
order by salary desc;

✏️ 다중열 서브쿼리 사용 / 서브쿼리로 비교할 데이터가 여러개일 경우! / ordey by 절은 서브쿼리에서 사용 XXXX (top-n쿼리 제외)

4. 업무명(job_title)이 ‘Sales Representative’인 직원 중에서 연봉(salary)이 9,000 이상, 10,000 이하인 직원들의 이름(first_name), 성(last_name)과 연봉(salary)을 출력하시오

select first_name as FIRST_NAME, last_name as LAST_NAME, salary as SALARY 
from employees e,jobs j
where j.job_id=e.job_id
and j.job_title = 'Sales Representative'
and e.salary between 9000 and 10000;
profile
개발 걸음마 떼기 👩🏻‍💻

0개의 댓글