개발 지식/[DBMS] Oracle

[Oracle] 서브쿼리(3) - 다중행 서브쿼리

devGSP 2022. 6. 4. 08:00
반응형
이 게시물은 Database GUI Oracle SQL Developer의 아래 버전 정보를 기준으로 작성되었습니다.

Java(TM) 플랫폼 : 1.8.0_321
Oracle IDE : 4.1.5.21.78

 

다중행 서브쿼리

 

설명

 

출력되는 레코드가 두 개 이상인 다중행 서브쿼리는 레코드가 여러 개이므로, '=', '>=', '<=', '<', '>'과 같은 단일행 연산자를 사용할 수 없다. 다중행 서브쿼리를 연산자와 사용하기 위해서는 다중행 연산자를 사용해야 메인이 되는 쿼리와 비교가 가능하다.

 

 

다중행 연산자의 종류

 

1. IN : 메인쿼리의 데이터가 서브쿼리의 결과 중 하나라도 일치하는 데이터가 있으면 true
2. ANY, SOME : 메인쿼리의 조건식을 만족하는 서브쿼리의 결과가 하나 이상이면 true
3. ALL : 메인쿼리의 조건식을 서브쿼리의 결과 모두가 만족하면 true
4. EXISTS : 서브쿼리의 결과가 존재하면(즉, 행이 1개 이상일 경우) true

 

 

사용 예시

-- IN query
SELECT *
  FROM EMP
 WHERE SAL IN (  SELECT MAX(SAL)
                   FROM EMP
               GROUP BY DEPTNO);

-- ANY query
SELECT *
  FROM EMP
 WHERE SAL = ANY (  SELECT MAX(SAL)
                      FROM EMP
                  GROUP BY DEPTNO);

-- SOME query
SELECT *
  FROM EMP
 WHERE SAL = SOME (  SELECT MAX(SAL)
                       FROM EMP
                   GROUP BY DEPTNO);
             
-- ALL query
SELECT *
  FROM EMP
 WHERE SAL > ALL (SELECT SAL
                    FROM EMP
                   WHERE DEPTNO = 30);
                
-- EXISTS query
SELECT *
  FROM EMP
 WHERE EXISTS (SELECT DNAME
                 FROM DEPT
                WHERE DEPTNO = 10);

 

결과

 

-- IN query

 

SELECT *
  FROM EMP
 WHERE SAL IN (  SELECT MAX(SAL)
                   FROM EMP
               GROUP BY DEPTNO);

sq3_q1



-- ANY query

 

SELECT *
  FROM EMP
 WHERE SAL = ANY (  SELECT MAX(SAL)
                      FROM EMP
                  GROUP BY DEPTNO);

sq3_q2



-- SOME query

 

SELECT *
  FROM EMP
 WHERE SAL = SOME (  SELECT MAX(SAL)
                       FROM EMP
                   GROUP BY DEPTNO);

sq3_q3


             
-- ALL query

 

SELECT *
  FROM EMP
 WHERE SAL > ALL (SELECT SAL
                    FROM EMP
                   WHERE DEPTNO = 30);

sq3_q4


                
-- EXISTS query

 

SELECT *
  FROM EMP
 WHERE EXISTS (SELECT DNAME
                 FROM DEPT
                WHERE DEPTNO = 10);

sq3_q5

반응형