180306 Oracle 서브쿼리 - RYUDONGJIN/Memo_wiki GitHub Wiki

서브쿼리

  • 서브쿼리는 하나의 SELECT 문장의 절 안에 포함된 또 하나의 SELECT문장
  • 서브쿼리를 포함하고 있는 쿼리문을 메인 쿼리, 포함된 또하나의 쿼리를 서브쿼리라 한다.
  • 서브쿼리는 비교연산자의 오른쪽에 기술해야 하고 반드시 괄호로 둘러쌓아야 한다.
  • 서브쿼리는 메인쿼리가 실행되기 전에 한번만 실행 된다.

다중행 서브쿼리

  • 서브 쿼리에서 반환되는 결과가 하나 이상의 행일 떄 사용하는 서브 쿼리. 다중행 서브쿼리는 반드리 다중행 연산자와 함께 사용해야 한다.
  • IN : 메인쿼리의 비교 조건 '=' 연산자로 비교할 경우 서브쿼리의 결과 중에서 하나라도 일치하면 참
SELECT ename, sal, deptno
FROM emp
WHERE deptno IN (SELECT DISTINCT deptno
FROM emp WHERE sal >= 3000);

SELECT deptno, dname, loc FROM dept WHERE deptno in
(SELECT deptno FROM emp WHERE job='MANAGER');
  • ANY, SOME : 메인쿼리의 비교 조건이 서브 쿼리의 검색결과와 하나 이상이 일치하면 참
SELECT ename, sal FROM emp
WHERE sal > ANY(SELECT sal FROM emp WHERE deptno=30);
  • ALL : 메인쿼리의 비교조건이 서브쿼리의 검색 결과와 모든 값이 일치하면 참(최대값보다 큰)
SELECT ename, sal FROM emp 
WHERE sal > all(SELECT sal fROM emp WHERE deptno=30);
  • EXIST : 메인쿼리의 비교조건이 서브쿼리의 결과 중에서 만족하는 값이 하나라도 존재하면 참