본문 바로가기
개념정복💫/오라클 ORACLE 정복

[ORACLE] 서브쿼리(스칼라, 인라인, 중첩 서브쿼리)

by 옹쑥이 2023. 9. 11.

서브쿼리는 SQL을 실행하는 데 필요한 데이터를 추가 조회를 하기 위해 SQL문 내부에서 사용하는 SELECT문을 의미.

단, 서브쿼리는 데이터 처리 속도에 영향을 주므로 서브쿼리를 사용하는 것보다는 join을 사용하는 게 일반적으로 성능이 더 좋다.

 

서브쿼리는 SELECT(스칼라), FROM(인라인), WHERE, HAVING에 사용가능하다. 

 

  • 스칼라 서브쿼리(Scalar Subquery) : SELECT 절에 사용
  • 인라인 뷰(Inline View) : FROM 절에 사용
  • (중첩)서브쿼리 : WHERE 절에 사용

스칼라 서브쿼리(Scalar Subquery)

  • SELECT 절에 사용
  • 결과 값이 1개의 행이여야 되며, 2개 이상의 행이나 NULL값을 사용할 수 없음

 

[직원명, 부서코드, 부서명 출력]

SELECT ename, d.deptno, dname
FROM emp e JOIN dept d
ON e.deptno = d.deptno;

> 스칼라 서브쿼리

SELECT ename, deptno,
(SELECT dname FROM dept WHERE deptno=emp.deptno) dname
FROM emp;

 

인라인 뷰(Inline View)

  • FROM 절에 사용
  • 인라인 뷰는 하나의 임시 테이블

 

[직원명, 급여, 직급별 평균 급여 출력]

SELECT ename, e.deptno, e.salary, v.salary
FROM emp e JOIN
(SELECT deptno, AVG(salary) salary FROM emp GROUP BY deptno) v
ON e.deptno = v.deptno;

 

(중첩)서브쿼리

  • WHERE 절에 사용
  • 결과가 단일행이면 단일행 서브쿼리, 복수행이면 복수행 서브쿼리
구분 종류
단일행  =, !=, >, >=, <, <=
다중행 IN, NOT IN, ANY, ALL