ORACLE DB

▶SUBQUERY◀

chojdsj 2023. 5. 28. 17:19
728x90
SUBQUERY(서브쿼리)

 

- 하나의 SQL문 안에 포함된 또다른 SQL(SELECT)문

 

- 메인쿼리(기존쿼리)를 위해 보조 역할을 하는 쿼리문 

 

- SELECT, FROM, WHERE, HAVING 절에서 사용 가능

 

 

 

 

 

단일행 (+단일열) 서브쿼리 

** 단일행 서브쿼리 앞에는 비교 연산자 사용 **

- 서브쿼리의 조회 결과 값의 개수가 1개일때

 

 

 

다중행 (+단일열) 서브쿼리 

 

- 서브쿼리의 조회 결과 값의 개수가 여러개일때 

** 다중행 서브쿼리 앞에는 일반 비교연산자 사용불가 **

 

- IN / NOT IN : 여러개의 결과값 중에서 한개라도 일치하는 값이 있다면 혹은 없다면이라는 의미

 

- ANY, < ANY : 여러개의 결과값 중에서 한개라도 큰 / 작은 경우, 가장 작은값보다 큰가? / 가장 큰 값보다 작은가?

 

- ALL, < ALL : 여러개의 결과값의 모든 값보다 큰 / 작은 경우, 가장 큰값보다 큰가? / 가장 작은값 보다 작은가?

 

- EXISTS / NOT EXISTS : 값이 존재하는가? / 존재하지 않는가?

 

 

 

다중열 서브쿼리

 

- 서브쿼리의 SELECT절에 나열된 항목수가 여러개일때 (단일행 = 결과값은 한행)

 

- 다중행 다중열 서브쿼리 : 조회 결과 행 수와 열 수가 여러개일때

 

 

 

상관 서브쿼리

 

- 서브쿼리가 만든 결과값을 메인쿼리가 비교연산할때, 메인쿼리 테이블의 값이 변경되면 서브쿼리의 결과값도 바뀌는 서브쿼리

 

- 메인쿼리 1행씩 우선 해석, 서브쿼리 나중에 해석 

 

- 상관쿼리는 먼제 메인쿼리를 한 행을 조회하고 해당 행이 서브쿼리의 조건을 충족하는지 확인하여 SELECT를 진행

 

 

--> 먼저 메인쿼리를 진행하여서 EMPLOYEE E1의 이름과 직급코드 급여를 조회한다.

 

그리고 서브쿼리를 진행하는데 E1의 직급코드 하나를 가져와서 J1의 평균 급여를 나타내고 J1의 평균급여보다 많은 급여를 받는 사원의 정보를 메인쿼리에서 진행한다.

 

이렇게 E1 테이블에서 직업코드를 하나씩 가져와서 WHERE절 조건을 만족시키는 직원의 정보를 출력한다.

 

 

 

 

스칼라 서브쿼리 

 

- 상관쿼리 이면서 결과값이 하나인 서브쿼리 

 

 

 

 

'ORACLE DB' 카테고리의 다른 글

▶DDL(ALTER,DROP)◀  (0) 2023.06.08
▶DDL◀  (0) 2023.05.28
▶TCL◀  (0) 2023.05.25
▶DML◀  (0) 2023.05.25
▶JOIN◀  (0) 2023.05.25