본문 바로가기
[파이썬]/데이터베이스

[MariaDB] 가상 테이블(Inline View)

by sung min_Kim 2023. 11. 26.
가상 테이블 (Inline View)


중간 저장소

 


·  가상 테이블이란


 가상 테이블이란 이 테이블이 데이터베이스에 실제로 존재하는 테이블이 아니라, 쿼리 실행 과정에서 일시적으로 생성되어 사용되고, 쿼리가 종료되면 사라지는 테이블을 의미한다.

 즉, 실제 데이터베이스에 저장되어 영구적으로 존재하는 테이블이 아니라, 쿼리를 실행하는 동안만 임시로 존재하며, 그 쿼리 내에서만 사용할 수 있는 테이블이므로 "가상"이라는 용어가 붙는다.

임시로 존재하는 테이블

 


· 가상 테이블을 사용하는 이유는 ?

 

 

  • 복잡한 쿼리의 단순화 : 가상 테이블을 사용하면 복잡한 쿼리를 여러 개의 간단한 쿼리로 분리할 수 있다.


  • 중간 결과 재사용 : 가상 테이블은 쿼리의 중간 결과를 저장하고 재사용하는 데 사용될 수 있다.


  • 복잡한 조건 적용 : 가상 테이블을 사용하면 Where, Having 등의 절에 복잡한 조건을 적용하는 것이 더 쉬워진다. 가상 테이블 내에서 필요한 데이터를 먼저 추출하고, 그 결과에 대해 추가적인 조건을 적용할 수 있다.


  • 데이터 분석 용이 : 가상 테이블을 활용하면, 여러 테이블의 데이터를 결합하거나 요약하여 효과적으로 데이터 분석을 수행할 수 있다.


 따라서, 가상 테이블은 SQL 쿼리를 작성하고 이해하는 데 있어 매우 유용하다. 이는 복잡한 쿼리를 더 간결하고 이해하기 쉽게 만들어주며, 중간 결과의 재사용과 복잡한 조건의 적용을 가능하게 하기 때문이다.

 


· 가상 테이블과 서브쿼리의 차이점


 가상 테이블과 서브쿼리의 가장 큰 차이점은, 서브쿼리는 쿼리 안의 쿼리로서 다양한 형태로 사용될 수 있지만, 가상 테이블은 주로 From절에서 사용된다는 것이다.

 

  • 서브쿼리 : Select, From, Where, Havin 등 쿼리의 여러 부분에서 사용될 수 있다. 


  • 가상 테이블 : From 절에서 생성되는 서브쿼리를 특별히 가리킨다. 이는 쿼리 내에서 임시 테이블처럼 사용되며, 쿼리가 끝나면 사라진다.

 따라서, 가상 테이블은 서브쿼리의 특정 형태로 이해하면 된다. 

 


· 가상 테이블의 기본 형태

 

기본 형태


 가상 테이블은 From 절 뒤에 서브쿼리를 사용하여 생성된다. 즉, 가상 테이블은 사실상 특정 형태의 서브쿼리이다.

Select A.컬럼
From (Select 컬럼
      From 테이블
      Where 제한 조건) A;


 여기서 'A'는 가상 테이블의 이름이다. 이 이름은 쿼리 내에서만 사용되며, 쿼리가 끝나면 사라진다.
 가상 테이블을 사용할 때에는 뒤에 별칭을 붙여 사용하며, 컬럼을 조회할 때에는 가상 테이블의 별칭을 컬럼명 앞에 붙여 사용해야 한다.

 아래의 예시를 살펴보자.

 "주문내역이 있는 회원별로 지금까지 지출한 총액"에 대한 데이터이다. 이 데이터를 가지고 지출한 총액이 가장 높은 회원을 조회하려 한다.

가상 테이블로 사용할 쿼리

 

가상 테이블 사용

 위 SQL 쿼리의 결과를 임시적으로 저장하는 'A'라는 별칭을 가진 하나의 가상 테이블로 사용하였다. 이 가상 테이블은 "주문내역이 있는 회별로 지금까지 지출한 총액"에 대한 정보를 담고 있으며, 총액(total_price)을 가지고 최대값(Max) 연산을 수행한다. 이 결과는 A 가상 테이블에 저장되며, "지출한 총액이 가장 높은 회원"에 대한 정보를 조회할 수 있다.

 이처럼 가상 테이블은 다른 테이블에서 데이터를 가져와서 계산하거나 변환하는 등의 작업을 수행하고, 그 결과를 가상 테이블에 저장한다. 그런 다음, 이 가상 테이블을 조회하여 다른 쿼리에서 사용할 수 있다. (복잡한 쿼리의 단순화, 중간 결과를 저장하고 다음 단계에서 이를 재사용)


 중첩된 형태


 가상 테이블은 From 절 내에서 중첩하여 사용할 수도 있다. 이를 통해 쿼리의 복잡성을 관리하고, 중간 처리 단계의 결과를 다음 단계로 전달하는 등의 작을 수행할 수 있다.

Select AA.컬럼
From (Select A.컬럼
      From (Select 컬럼
            From 테이블
            Where 제한 조건) A) AA;


 'AA' 가상 테이블은 이 전의  'A' 가상 테이블에 저장된 결과를 활용하여 필요한 작업을 처리하고, 그 결과를 다음 단계에서 재사용하는 방식으로 동작한다. 이는 쿼리의 복잡성을 관리하고, 중간 결과를 효율적으로 활용할 수 있다.

 아래의 예시를 살펴보자.

 위 예시의 'A' 가상 테이블에 저장된 정보("주문내역이 있는 회원별로 지금까지 지출한 총액이 가장 높은 회원")를 가지고 "지금까지 지출한 총액이 가장 낮은 회원"에 대한 정보를 찾고자 한다.

가상테이블_중첩_1_최대 총액

 이 전에 생성한 가상 테이블 'A'와, 다음 작업을 처리하기 위해 생성한 가상 테이블 'AA'가 존재한다. AA 가상 테이블은 이 전에 저장된 총액(total_price)을 가지고 최대값(total_price)과 최소값(total_min) 연산을 수행한다. 이 결과는 AA 가상 테이블에 저장된다. (중간 결과 재사용)

 Where 절에서는 A 테이블과 AA 테이블을 비교하여, A 테이블의 총 가격(A.total_price)이 AA 테이블의 최대 혹은 최소 총액(AA.total_max or AA.total_min)과 동일한 회원 정보를 선택하여 출력한다. (복잡한 조건 적용)

 즉, 이 쿼리는 전체 회원 중에서 가장 많은 금액 혹은 적은 금액을 지출한 회원의 정보를 찾는 것이다.

가상테이블_중첩_2_최소 총액

 



가상 테이블은 쿼리의 결과를 임시 저장하는 테이블로,
복잡한 쿼리를 단순화하고 중간 결과를 저장하고 재사용하는 데 유용하다.

가상 테이블은 쿼리의 성능을 향상하고 코드의 가독성을 높이는 역할을 한다.

가상 테이블은 쿼리 내에서만 존재하며, 쿼리가 끝나면 사라진다.
따라서 장기적인 데이터 저장을 위한 용도로는 사용되지 않는다.

가상 테이블은 중첩하여 사용할 수 있으며,
각 단계에서 이전 단계의 저장된 결과를 활용하여 필요한 계산을 수행하고,
그 결과를 다음 단계에서 재사용할 수 있다.


이처럼 가상 테이블은 데이터 처리에 큰 유용성을 가지고 있다.

 

'[파이썬] > 데이터베이스' 카테고리의 다른 글

[MariaDB] Exists 함수  (3) 2023.11.27
[MairaDB] Union(유니온)  (1) 2023.11.27
[MariaDB] Join (Inner Join, Outer Join)  (1) 2023.11.26
[MariaDB] If 함수  (0) 2023.11.25
[MariaDB] Case 문  (1) 2023.11.25