-
SQL_Sub Query 개요 & 단일 행 Sub QueryData 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 QueryEMPNO 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 - 서브 쿼리가 먼저 실행되고 메인 쿼리가 실행됨