📚 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;