<목차>
(다중 행 서브쿼리)
ㅇ ANY
ㅇ ALL
ㅇ 다중 행 서브 쿼리에서의 NULL 값
(다중 행 서브쿼리)
SELECT employee_id, last_name FROM employees WHERE salary = (SELECT MIN(salary) FROM employees GROUP BY department_id
서브쿼리의 결과가 다수의 값이 나오니까 '=' 연산자 사용하면 안 돼 => IN 사용
ㅇ 실습) 4가지 모두로 실습해보기
: IT_PROG라는 업무를 하는 사원들의 급여보다 급여가 ㅇㅇ한 사원을 구하여라.
SALARY |
---|
9000 |
6000 |
4800 |
4800 |
4200 |
IT_PROG 최소급여보다 작은 사람들
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ALL ( SELECT salary FROM employees WHERE job_id = 'IT_PROG' )
- 실수한 부분) IT PROG라고 언더바 안 썼더니 107개 다 나와
(아마 서브쿼리가 NULL이 나와서 WHERE절이 의미 없어졌나 봐) Q.왜 노로우셀렉티드가 아니라?
다중 행 서브쿼리에서는 널이 있어도 되나 봐 ---여기는 나중에 실험 다시 해서 수정하자
IT_PROG 최대급여보다 큰 사람들
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary > ALL ( SELECT salary FROM employees WHERE job_id = 'IT_PROG' )
IT_PROG 최대급여보다 작은 사람들
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary < ANY ( SELECT salary FROM employees WHERE job_id = 'IT PROG' )
- ANY 안 쓰고 그룹함수 MAX 사용해도 되지만 ANY가 더 성능 좋아
- MAX는 그룹함수라서 계산 수행하는 작업 늘어나
IT_PROG 최소급여보다 큰 사람들
SELECT employee_id, last_name, job_id, salary FROM employees WHERE salary > ANY ( SELECT salary FROM employees WHERE job_id = 'IT PROG' )
ㅇ 실험) (논란 있을 문제이긴 해;;)
SELECT e.last_name FROM employees e WHERE e.employee_id NOT IN (SELECT m.manager_id FROM employees m)
no rows selected