본문 바로가기

Study/OracleDB

24강 오라클 SQL 서브 쿼리(3)

728x90

-- 1. 다중 행 서브 쿼리
-- 2. ALL, ANY 연산자

-- 4.1 ALL 연산자
-- ALL 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참입니다.

-- 찾아진 값에 대해서 AND 연산을 해서 모두 참이면 참이 되는 셈이 됩니다. > ALL 은 "모든 비교값 보다 크냐"
-- 고 묻는 것이 되므로 최대값보다 더 크면 참이 됩니다.

-- 30번 소속 사원들 중에서 급여를 가장 많이 받는 사원보다 더 많은 급여를 받는 사람의 이름, 급여를
-- 출력하는 쿼리문을 작성해 봅시다.
select sal from emp where deptno=30;
-- 30번 소속 사원들 중에서(sub)

select ename, sal from emp
where sal > all(select sal from emp where deptno=30);
-- (부서가 30인 사람들의 급여를 조회한다)
-- 그리고 all 연산자를 붙이면 "모든 비교값 보다 크냐"고 묻는다.
-- 즉 30번의 제일 큰 값인 2850보다 큰 것을 조회하여 출력한다.

-- 아래의 쿼리문과 같다.
select ename, sal from emp
where sal > (select max(sal) from emp where deptno = 30);

--<탄탄히 다지기>
-- 9. 영업 사원(SALESMAN)들 보다 급여를 많이 받는 사원들의 이름과 급여와 직급(담당업무)를 출력하되 영업 사원은 출력하지 않습니다.
select * from emp;
select * from dept;
select ename, sal, job
from emp
where sal > all(select sal from emp where job = 'SALESMAN');
-- where sal > (select max(sal) from emp where job = 'SALESMAN');

-- 4.2 ANY 연산자
-- 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참입니다.
-- ANY는 찾아진 값에 대해서 하나라도 크면 참이 되는 셈이 됩니다.
-- 그러므로 찾아진 값 중에서 가장 작은 값 즉, 최소값 보다 크면 참이됩니다.

-- 다음은 부서번호가 30번인 사원들의 급여 중 가장 작은 값(950)보다
-- 많은 급여를 받는 사원의 이름, 급여를 출력하는 예제를 작성해 봅시다.
select ename, sal
from emp
where sal > ANY(select sal from emp where deptno = 30);
-- where sal > (select min(sal) from emp where deptno = 30);

-- <탄탄히 다지기>
-- 10. 영업 사원들의 최소 급여를 많이 받는 사원들의 이름과 급여와 직급(담당업무)를 출력하되 영업 사원은 출력하지 않습니다.
select ename, sal, job
from emp
where sal > any(select sal from emp where job = 'SALESMAN')
and job <> 'SALESMAN';
-- where sal > (select min(sal) from emp where job = 'SALESMAN');

반응형

'Study > OracleDB' 카테고리의 다른 글

26강 오라클 SQL set연산자(2)  (1) 2022.09.10
25강 오라클 SQL set 연산자(1)  (1) 2022.09.10
23강 오라클 SQL 서브 쿼리(2)  (1) 2022.09.10
22강 오라클 SQL 서브 쿼리(1)  (1) 2022.09.10
21강 오라클 SQL Outer Join  (1) 2022.09.10