ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • SQL_Sub Query 개요 & 단일 행 Sub Query
    Data Base_Oracle/SQL 2020. 1. 7. 22:27

    Sub Query

    Select문 내부에 존재하는 또 다른 Select구문

    ※ Main Query
    서브 쿼리의 결과를 받아서 최종적으로 실행하는 Select문

    • 서브 쿼리가 먼저 실행되고 메인 쿼리가 실행됨
      서브 쿼리는 메인 쿼리가 실행되기 전에 한 번만 실행
    • 서브 쿼리는 반드시 ( ) 안에 작성
    • 비교 연산자의 오른쪽에 작성
    • ( )안의 서브 쿼리 문장 마지막에는 ;(세미콜론)을 달지 않음

    Sub Query 종류

    종류 설명
    단일 행 Sub Query 실행결과 값이 하나의 행인 경우
    다중 행 Sub Query 실행결과 값이 두 개 이상의 행인 경우

    ※ 메인 쿼리 최종 결과값 행의 수가 아니라
    서브 쿼리 실행 결과값 행의 수로 종류를 나눔


    단일 행 Sub Query

    단일 행(Single Row) Sub Query는 내부 Select 문장으로부터
    오직 하나의 로우(행, row)만을 반환 받으며,
    단일 행 비교 연산자(=, >, >=, <, <=, <>)를 사용함

    # 예제

    { 문제 }
    ▷ emp테이블에서 scott사원보다 급여를 많이 받는 사원을 찾아서
    해당 사원의 사번, 이름, 업무, 급여 출력
    ※ scott이 받는 급여를 모르기 때문에 scott의 급여를 먼저 구해야 함
    → 서브쿼리 활용

     

    ▶ [ SQL> select empno, ename, job, sal from emp
    where sal > (select sal from emp where ename='SCOTT'); ]
    § 강조 부분 : Sub Query, 이전 부분 : Main Query

    EMPNO ENAME JOB SAL
    7839 KING PRESIDENT 5000

    ※ 서브 쿼리를 활용하지 않으면 select로 scott의 급여를 먼저 조회하고
    그 급여 이상 받는 사원을 다시 조회해야 함

     

    { 문제 }
    ▷ emp테이블에서 가장 입사일이 오래된 사원의 이름, 입사일 출력

    ▶ [ SQL> select ename, hiredate from emp
    where hiredate=(select min(hiredate) from emp); ]

    ENAME HIREDATE
    SMITH 80/12/17

    { 문제 }
    ▷ emp테이블에서 사원번호가 7521번인 사원과 업무가 같고
    사원번호 7934인 사원보다 급여가 큰 사원을 찾아서
    그 사원의 사번, 이름, 업무, 급여 출력

     

    ▶ [ SQL> select empno, ename, job, sal from emp
    where job=(select job from emp where empno=7521)
    and sal>(select sal from emp where empno=7934); ]

    EMPNO ENAME JOB SAL
    7499 ALLEN SALESMAN 1600
    7844 TURNER SALESMAN 1500

    ※ 하나의 메인쿼리 안에 두 개의 서브쿼리가 사용될 수 있음

    § 서브 쿼리는 주로 문제에 정확한 값이 주어지지 않았을 때 작성


    Sub Query를 사용하면 정확한 값이 주어지지 않은 문제에서
    조회하고자 하는 데이터를 더욱 편리하게 검색할 수 있습니다.

    'Data Base_Oracle > SQL' 카테고리의 다른 글

    SQL 다중 행 Sub Query 개요_IN & ALL 연산자  (0) 2020.01.07
    SQL_Sub Query에서 그룹함수 사용  (0) 2020.01.07
    SQL_Ansi Join  (0) 2020.01.06
    SQL_Non-Equi Join & Outer Join  (0) 2020.01.06
    SQL_Equi Join & Self Join  (0) 2020.01.06

    댓글

Designed by Tistory.