[Oracle] 서브쿼리(3) - 다중행 서브쿼리
이 게시물은 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);
-- 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);