본문 바로가기
코딩수업/AWS 클라우드환경 네이티브

9/2 데이터베이스(DB) 서브쿼리(SubQuery), 연관성 있는 서브쿼리(Correlated Subquery)와 없는 서브쿼리(Noncorrelated Subquery)

by 인생즐겜러 2022. 9. 2.
728x90
반응형

AWS 클라우드환경 네이티브 수업 75일차

 

 

 

진행

1. Self Join (9/1 글 참고)

2. 동등/ 비동등 Join (9/1 글 참고)

3. Outer Join (9/1 글 참고)

4. 서브쿼리(SubQuery)

 

 

 

 

 

요약

1. 서브쿼리(SubQuery)

2. 연관성 있는 서브쿼리(Correlated Subquery)와 없는 서브쿼리(Noncorrelated Subquery)

 

 

 

 

 


 

 

 

 

 

서브쿼리(SubQuery)

 

하나의 SQL 문장(Main Query) 내부에 존재하는

() 괄호로 둘러쌓인 또 다른 Select 문장을 말한다.

Order by절은 사용할 수 없으며 메인 쿼리보다 먼저 수행된다.

메인쿼리 내부에서 추가정보제공을 목적으로 사용되며

특히 DML(Data Manipulation Language, 데이터 조작어)에 속하는

select, insert, update, delete 등의 모든 문장에서 서브쿼리를 사용할 수 있다.

 

 

 

 

 

서브쿼리의 위치에 따라 분류하는데

 

Select

: Scalar SubQuery라 하며, 하나의 열처럼 사용한다. 양이 많아지면 속도가 느려지기 때문에 잘 사용하지 않는다.

 

From

: Inline View라 하며, 하나의 테이블처럼 사용한다. 테이블이기 때문에 늘 Alias가 병행되어야한다.

  

Where

: nested query라고 한다. 가장 대표적인 형태이다. 

 

그 외의 위치에서도 사용이 가능하다. (having, order by 등)

 

 

 

아래의 where에 사용한 서브 쿼리의 예를 보며 이해해보자.

 

 

 

 

 

 


 

 

 

 

 

연관성 있는 서브쿼리(Correlated Subquery)와 없는 서브쿼리(Noncorrelated Subquery)

 

다른 예를 보자.

해당 설명 위에 있는 쿼리와 아래의 select문은 모두 같은 테이블(employees)에서 정보를 추출하지만

두 쿼리 사이에는 데이터의 연관성이 없이 각각 독립적으로 수행된다.

 

select round(avg(salary))
from employees;

 

 

 

 

 

Noncorrelated Subquery

: 메인쿼리와 서브쿼리 사이에 데이터 연관성이 없는 서브쿼리

 

Correlated Subquery

: 메인쿼리와 서브쿼리 사이에 연관성이 있다

  즉, 서로 데이터의 참조,공유가 발생 => Join이 사용된다.

  (예 : Exists 연산자를 사용)

 

 

 

 

 

연관성 없는 쿼리와 있는 쿼리의 차이를 보기 위해 아래의 예를 보자.

employees 와 departments에서 department_id가 같은 값의 갯수를 알아보고자 한다.

두 쿼리의 결과 값은 같다.

연관 있는 쿼리의 경우, Join으로 인해 Alias가 사용되고 있는 것을 볼 수 있다.

 

 

 

연관성 없는 쿼리

select count(*)
from employees
where department_id In(	select	department_id
			from	departments
			where	manager_id IS NOT NULL);

 

연관성 있는 쿼리

select count(*)
from employees e
where Exists(	select	1
			from	departments d
			where	d.manager_id IS NOT NULL
			and	e.department_id = d.department_id);

 

 

728x90
반응형

댓글