ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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

    댓글

Designed by Tistory.