본문 바로가기
스터디/Oracle

[Oracle] 오라클 스칼라 서브쿼리, 상호연관 서브쿼리, EXISTS

by 홍장 2021. 4. 21.
스칼라 서브쿼리 - 반환값이 단일 값이 되는 서브쿼리

SELECT, ORDER BY 위치에는 스칼라 서브쿼리만 사용이 가능함 

 

SELECT 절에서 서브 SELECT로 조회 할경우

컬럼 1개, 로우1개 만 나와야 한다 

상호 연관 서브쿼리

- 메인(바깥쪽) 쿼리의 한 ROW에 대해ㅓ 서브쿼리가 한번씩 실행

- 테이블에서 행을 먼저 읽고 각 행의 값을 서브쿼리 실행 시용

- 서브쿼리에서 메인 쿼리의 컬럼명을 사용할 수 있으나, 메인쿼리에서는 서브쿼리의 컬럼명을 사용할 수 없음 

 

 

1) DEPTNO에 맞는 DNAME A1으로 조회 하고자 하는 경우

SELECT ENAME, SAL, DEPTNO, (SELECT DNAME FROM DEPT WHERE DEPTNO=A.DEPTNO) A1
FROM EMP A;

2) 부서별 직원 합계구하기 

SELECT DEPTNO, DNAME, 
(SELECT COUNT(*) FROM EMP WHERE DEPTNO=T2.DEPTNO) TOTAL 
FROM DEPT T2;   

3) 부서인원이 3명 이상인 부서만 조회

SELECT deptno, dname, 
(SELECT COUNT(*) FROM emp WHERE deptno=T2.deptno) total FROM dept T2
WHERE 3 < (SELECT COUNT(*) FROM emp WHERE deptno=T2.deptno);   

EXISTS 

서브쿼리 SELECT 와 같이 사용 

조회 결과가 하나의 행 이상 반환하면 True, 없으면 False 반환 

서브쿼리 행의 값이 발견되는 경우 서브쿼리에서 더 이상 검색하지 않음, 조건 플래그가 TURE가 됨 

SELECT deptno, dname
from dept d
where EXISTS (select 1 from emp where deptno = D.deptno);

서브쿼리 select 절의 1 은 의미없음, 조회결과시 유무 = 참거짓만 판단 하도록 실행함

EMP table
DEPT table