서브 쿼리의 기본 개념
- 서브 쿼리는 하나의 SELECT 문장의 절 안에 포함된 또 하나의 SELECT 문장이다.
- 서브 쿼리를 포함하고 있는 쿼리문을 메인 쿼리, 포함된 또 하나의 쿼리를 서브 쿼리라고 한다.
- 서브 쿼리는 비교 연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러쌓아야 한다.
- 서브 쿼리는 메인 쿼리가 실행되기 이전에 한 번만 실행이 된다.
단일행 서브 쿼리
단일 행 서브 쿼리는 수행 결과가 오직 하나의 로우만을 반환하는 서브 쿼리를 갖는 것을 말한다.
단일 행 서브 쿼리문에서는 이렇게 오직 하나의 로우로 반환되는 서브 쿼리의 결과는 메인 쿼리에 보내게 되는데 메인 쿼리의 WHERE 절에서는 단일 행 비교 연산자인 =, >, >=, <, <=, <> 를 사용해야 한다.
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ( SELECT AVG(SAL)
FROM EMP);
다중행 서브 쿼리
다중행 서브 쿼리는 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 때 사용하는 서브 쿼리이다. 다중 행 서브 쿼리는 반드시 다중 행 연산자와 함께 사용해야 한다.
다중 행 서브 쿼리의 종류에는 IN, ANY, SOME, ALL, EXIST 가 있다.
IN 연산자
IN 연산자는 메인 쿼리의 비교 조건에서 서브 쿼리의 출력 결과와 하나라도 일치하면 메인 쿼리의 WHERE 절이 참이 되는 연산자이다.
SELECT ENAME, SAL, DEPTNO
FROM EMP
WHERE DEPTNO IN ( SELECT DISTINCT DEPTNO
FROM EMP
WHERE SAL>=3000);
ALL 연산자
ALL 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 모든 값이 일치하면 참이다.
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ALL(SELECT SAL
FROM EMP
WHERE DEPTNO =30);
ANY 연산자
ANY 조건은 메인 쿼리의 비교 조건이 서브 쿼리의 검색 결과와 하나 이상만 일치하면 참이다.
SELECT ENAME, SAL
FROM EMP
WHERE SAL > ANY ( SELECT SAL
FROM EMP
WHERE DEPTNO = 30 );
EXISTS 연산자
서브쿼리에 결과 값이 하나 이상 존재하면 조건식이 모두 true, 존재하지 않으면 모두 false 가 되는 연산자이다.
SELECT *
FROM EMP
WHERE EXISTS (SELECT DNAME FROM DEPT WHERE DEPTNO = 10);
SELECT *
FROM EMP
WHERE EXISTS (SELECT DNAME FROM DEPT WHERE DEPTNO = 50);
'교육 | 외부활동 > ORACLE' 카테고리의 다른 글
KH_ORACLE_08_DML (0) | 2022.12.21 |
---|---|
KH_ORACLE_07_DDL (0) | 2022.12.20 |
KH_ORACLE_05_조인 (2) | 2022.12.20 |
KH_ORACLE_04_그룹 쿼리와 집합 연산자 (0) | 2022.12.20 |
KH_ORACLE_03_SQL 주요 함수 (0) | 2022.12.20 |