728x90
반응형
SMALL
110번 사원의 급여보다 더 많이 급여를 받는 사원을 출력해주세요
SELECT *
FROM hr.employees
WHERE salary > 110번 사원의 급여;
방법1)
SELECT salary
FROM hr.employees
WHERE employee_id = 110 ;
방법2) 110번 사원의 급여 = 8200
SELECT *
FROM hr.employees
WHERE salary > 8200;
방법 1 과 방법 2 를 합치면 질문의 답이 나온다.
SELECT *
FROM hr.employees
WHERE salary > ( -- 서브쿼리문
SELECT salary
FROM hr.employees
WHERE employee_id = 110
);
■ SUBQUERY(서브쿼리)
a. SQL 문 안에 SELECT 문을 서브쿼리라고 한다.
b. SELECT 문의 서브쿼리는 비교연산자 오른쪽에 괄호로() 묶어야 한다.
■ 중첩서브쿼리(NESTED SUBQUERY)
a. SUBQUERY(INNER QUERY) 먼저 수행
b. 서브쿼리 수행한 값을 가지고 main query(outer query) 수행
/* MAIN QUERY(=OUTER QUERY ) */
SELECT *
FROM hr.employees
WHERE salary >
/* SUBQUEBY(=INNER QUERY) */
( SELECT salary
FROM hr.employees
WHERE employee_id = 110 );
■ 단일행 서브쿼리
a. 서브쿼리의 결과가 단일값이 나오는 서브쿼리
b. 단일행 비교연산자(=, >, >=, <, <=, !=, <>, ^=)
SELECT *
FROM hr.employees
WHERE salary >= ( SELECT max(salary)
FROM hr.employees
WHERE last_name = 'King' );
SELECT *
FROM hr.employees
WHERE job_id >= ( SELECT job_id
FROM hr.employees
WHERE employee_id = 110 )
AND salary > ( SELECT job_id
FROM hr.employees
WHERE employee_id = 110 );
[문제1] 최고 급여를 받는 사원들의 정보를 출력해주세요
SELECT *
FROM hr.employees
WHERE salary = ( SELECT max(salary)
FROM hr.employees);
[문제2] 최소 급여를 받는 사원들의 정보를 출력해주세요
SELECT *
FROM hr.employees
WHERE salary = ( SELECT min(salary)
FROM hr.employees);
c. having 절의 비교연산자 오른쪽에 괄호() 묶어서 서브쿼리 사용한다.
SELECT department_id, sum(salary)
FROM hr.employees
GROUP BY department_id
HAVING sum(salary) > ( SELECT max(salary)
FROM hr.employees
WHERE department_id = 50);
SELECT
department_id,
MAX(SUM(salary)) -- 오류발생
FROM hr.employees
GROUP BY department_id;
☆ 해결 방법
a. 오류발생, 그룹함수를 두번 중첩할 경우 개별 컬럼을 사용할 수 없다.
b. 서브쿼리를 사용해야 한다.
부서별 합계급여 중 최대급여인 부서를 출력해주세요
SELECT department_id, sum(salary)
FROM hr.employees
GROUP BY department_id
HAVING sum(salary) = (
SELECT max(sum(salary))
FROM hr.employees
GROUP BY department_id
);
SELECT *
FROM hr.employees
WHERE salary = (
SELECT min(salary)
FROM hr.employees
GROUP BY department_id
);
오류발생: 서브쿼리 결과 값이 여러개가 나왔기 떄문에 단일행 비교연산자를 사용할 수 없다.
728x90
반응형
LIST
'Data Base > Oracle SQL' 카테고리의 다른 글
23.10.16. Oracle SQL PIVOT, UNPIVOT, 다중열 서브쿼리(비쌍비교 VS 쌍비교), SCALAR SUBQUERY(스칼라 서브쿼리) (1) | 2023.10.16 |
---|---|
23.10.13. Oracle SQL IN, ANY, ALL (0) | 2023.10.13 |
23.10.12. Oracle SQL JOIN ② (0) | 2023.10.12 |
23.10.12. Oracle SQL JOIN ① (0) | 2023.10.12 |
23.10.11. Oracle SQL 그룹 함수 (0) | 2023.10.11 |