C#,Delphi,Oracle,MSSQL 개발자블로그

[Oracle/기본]6. 서브쿼리(Subquery) 본문

Programming/Oracle 공부

[Oracle/기본]6. 서브쿼리(Subquery)

19760323 2017. 5. 23. 09:47

- 서브쿼리를 작성할 수 있는 부분

  1. WHERE

  2. HAVING

  3. FROM

 

서브쿼리 = 중첩SELECT = 부속 SELECT = 내부SELECT

 

- 서브쿼리는 괄호로 둘러싸야 한다.

- 서브쿼리는 비교연산자의 오른쪽에 있어야 한다.

- 서브쿼리에 ORDER BY 절을 포함하면 안된다. (SELECT문장에 대해서는 오직 하나의 ORDER BY를 가질 수 있으며,

   SELECT문장의 제일 마지막에 있어야 한다.)

 

● 서브쿼리의 유형

 

1. 단일 행 서브쿼리 : 내부 SELECT 문장으로부터, 오직 하나의 행만을 리턴하는 질의이다.

                            단일 행 비교연산자(비교대상이 1개의 결과 리턴)를 사용한다.

                            =, >, >=, <, <=, <>   

Ex. SELECT ename, job

                                  FROM emp

                                 WHERE job =  (SELECT job

                                                       FROM emp

                                                      WHERE empno = 7369)

                                     AND sal > (SELECT sal

                                                      FROM emp

                                                     WHERE empno = 7876);    

 

2. 다중 행 서브쿼리 : 내부 SELECT 문장으로부터, 하나 이상의 행을 리턴하는 질의이다.

                            다중 행 비교연산자(비교대상이 1개 이상의 결과 리턴)를 사용한다.

IN, ANY, ALL

Ex. < IN 연산자 사용 >

     SELECT ename, sal, deptno

       FROM emp

      WHERE sal IN (SELECT MIN(sal)

                           FROM emp

                     GROUP BY deptno);  ☞ 부서에 대해서 최소 급여를 받는 종업원들을 찾는다.

 

 Ex. < ANY 연산자 사용 >

      SELECT ename, sal

       FROM emp

      WHERE sal > ANY (SELECT sal

                                FROM emp

                               WHERE deptno = 30) ☞ 30번 부서에서 급여가 가장낮은사람보다       

                                                                은 급여를 받는 사원의 이름, 급여 출력한다.

★ <ANY : 최대값보다 적을 의미

          >ANY : 최소값보다 많음을 의미

          =ANY : IN과 같다. 

 

  Ex. < ALL 연산자 사용 >

       SELECT ename, sal

        FROM emp

       WHERE sal > ALL (SELECT sal

                                FROM emp

                               WHERE deptno = 30) ☞ 30번 부서에서 급여가 가장높은사람

                                                                보다 많은 급여를 받는 사원의 이름, 급여 출력한다.

       ★ <ALL : 최소값보다 적음을 의미

           >ALL : 최대값보다 많음을 의미

       

 

3. 다중 열 서브쿼리 : 내부 SELECT 문장으로부터, 하나 이상의 열을 리턴하는 질의 이다.

                            CLERK    7900

                            MANAER 7698

 

 


 

Comments