-
SQL 다중 행 Sub Query_Any 연산자Data Base_Oracle/SQL 2020. 1. 7. 22:49
Any
'메인쿼리의 비교 조건이 서브 쿼리의 결과들 중 어느 것에라도 ~ 하다면'
이라고 풀어서 설명할 수 있음Any 연산자 설명 ~ > any(Sub Query) 서브쿼리의 가장 적은 값을 구한 뒤
메인 쿼리 조건에 만족하는 값을 하나씩 비교
내림차순으로 자동으로 정렬~ < any(Sub Query) 서브쿼리의 가장 큰 값을 구한 뒤
메인 쿼리 조건에 만족한는 값을 하나씩 비교
오름차순으로 자동 정렬# 예제
{ 문제 }
▷ emp테이블에서 30번 부서의 최소급여를 받는 사원보다
많은 급여를 받는 사원의 이름, 업무, 급여, 부서번호 출력
단, 30번부서는 제외{ 단일 행 연산자 풀이 }
▶ [ SQL> select ename, job, sal, deptno from emp
where sal > (select min(sal) from emp where deptno=30)
and deptno != 30 ; ]ENAME JOB SAL DEPTNO JONES MANAGER 2975 20 CLARK MANAGER 2450 10 ... ... ... ... { Any 풀이 }
▶▶ [ SQL> select ename, job, sal, deptno from emp
where sal > any(select sal from emp where deptno=30)
and deptno != 30 ; ]ENAME JOB SAL DEPTNO KING PRESIDENT 5000 10 SCOTT ANALYST 3000 20 ... ... ... ... ※ any연산자를 사용하는 경우
서브 쿼리(그룹함수)의 결과가 물리적인 행은 하나이지만 논리적으로 다중 행인 경우§ 950 < 1100< .... < 3000 < 5000 순서로 비교하기 때문에 내림차순으로 자동 정렬됨
{ 문제 }
▷ emp테이블에서 30번 부서의 최대급여를 받는 사원보다
적은 급여를 받는 사원의 이름, 업무, 급여, 부서번호 출력
단, 30번부서는 제외{ 단일 행 연산자 풀이 }
▶ [ SQL> select ename, job, sal, deptno from emp
where sal < (select max(sal) from emp where deptno=30)
and deptno != 30 ; ]ENAME JOB SAL DEPTNO SMITH CLERK 800 20 CLARK MANAGER 2450 10 ... ... ... ... { Any 풀이 }
▶▶ [ SQL> select ename, job, sal, deptno from emp
where sal < any(select sal from emp where deptno=30)
and deptno != 30 ; ]ENAME JOB SAL DEPTNO SMITH CLERK 800 20 ADAMS CLERK 1100 20 ... ... ... ... 단일 행 Sub Query를 Any연산자를 통해 다중 행 Sub Query로 만드는 방법에 대해 알아보았습니다.
Any연산자는 서브쿼리와 메인쿼리의 논리적인 구조를 이해해야 하기 때문에 상세히 알아두면 좋겠습니다.'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL_Sub Query Pattern_Inline View (0) 2020.01.07 SQL 다중 행 Sub Query_EXISTS 연산자 (0) 2020.01.07 SQL 다중 행 Sub Query 개요_IN & ALL 연산자 (0) 2020.01.07 SQL_Sub Query에서 그룹함수 사용 (0) 2020.01.07 SQL_Sub Query 개요 & 단일 행 Sub Query (0) 2020.01.07