이 게시물은 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);
'개발 지식 > [DBMS] Oracle' 카테고리의 다른 글
[Oracle] DML(1) - 들어가기 전에 (0) | 2022.06.06 |
---|---|
[Oracle] 서브쿼리(4) - 다중열 서브쿼리를 통한 WHERE절 비교 (0) | 2022.06.05 |
[Oracle] 서브쿼리(2) - 단일행 서브쿼리 (0) | 2022.06.03 |
[Oracle] 서브쿼리(1) - 서브쿼리의 개념과 특징 (0) | 2022.06.02 |
[Oracle] JOIN(5) - SQL-99 표준 JOIN (0) | 2022.06.01 |