-
SQL 다중 행 Sub Query 개요_IN & ALL 연산자Data Base_Oracle/SQL 2020. 1. 7. 22:38
다중 행 Sub Query
다중 행 서브 쿼리는 서브 쿼리에서 반환되는 결과가
둘 이상의 행일 때 사용다중 행 Sub Query 연산자 종류
종류 의 미 IN 메인 쿼리의 비교 조건('=' 연산자로 비교할 경우)이 서브 쿼리의 결과 중에서 하나라도 일치하면 참 ANY 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상이 일치하면 참 ALL 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참 EXISTS 메인 쿼리의 비교 조건이 서브 쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참 IN
범위연산자 in과 동일한 연산자
메인 쿼리의 비교 조건과 서브 쿼리 결과들 중 일치하는 값들을 조회#예제
{ 에러 }
▷ 부서별로 최소급여를 받는 사원의 이름, 업무, 급여, 부서번호 출력▶ [ SQL> select ename, job, sal, deptno from emp
where sal = (select min(sal) from emp group by deptno);
2행에 오류:
ORA-01427: 단일 행 하위 질의에 2개 이상의 행이 리턴되었습니다. ]
※ 단일 행이 아닌 다중 행 서브 쿼리를 사용하는 경우
다른 연산자를 사용해야 함 → 다중 행 서브 쿼리 연산자{ 문제 }
▷ 부서별로 최소급여를 받는 사원의 이름, 업무, 급여, 부서번호 출력▶ [ SQL> select ename, job, sal, deptno from emp
where sal in (select min(sal) from emp group by deptno); ]ENAME JOB SAL DEPTNO SMITH CLERK 800 20 JAMES CLERK 950 30 MILLER CLERK 1300 10 ALL
서브쿼리 검색 결과의 모든 값이 메인 쿼리 조건식을 만족해야
참을 반환하는 연산자# 예제
▷ 급여가 30번부서의 최고급여보다 많은 사원의 사번,이름,급여 조회
▶ [ SQL> select empno, ename, sal from emp
where sal > all(select sal from emp where deptno=30); ]EMPNO ENAME SAL 7566 JONES 2975 7788 SCOTT 3000 ... ... ... ※ ~ > (max(sal)) → ~ > all(sal)
서브쿼리의 최대값보다 큰 값을 구하고 오름차순으로 정렬
다중 행 서브 쿼리의 개요와 IN, ALL연산자에 대해 살펴보았습니다.
다중 행 서브 쿼리에서만 사용되는 연산자들에 대해서는 꼭 알아둘 필요가 있겠습니다.
'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL 다중 행 Sub Query_EXISTS 연산자 (0) 2020.01.07 SQL 다중 행 Sub Query_Any 연산자 (0) 2020.01.07 SQL_Sub Query에서 그룹함수 사용 (0) 2020.01.07 SQL_Sub Query 개요 & 단일 행 Sub Query (0) 2020.01.07 SQL_Ansi Join (0) 2020.01.06