MariaDB SQL

MariaDB Subqueries

ssamhago 2023. 6. 16. 19:20
728x90
320x100

MariaDB Subqueries

 

 

보다 복잡한 쿼리를 형성하기 위해 MariaDB Subqueries(하위 쿼리)에 대해 알아봅니다.

 

 

 

Subquery(하위 쿼리) 란 무엇인가?

 

Subqueries 는 다른 쿼리에 중첩된 쿼리입니다.

샘플 데이터베이스에서 다음 countries 테이블을 참조하십시오.

countries

 

면적이 5,000,000km2보다 큰 국가를 찾고 싶다고 가정합니다. 
이를 달성하기 위해 다음 단계를 수행할 수 있습니다.

먼저 area 이 5,000,000보다 큰 countries 의 식별 정보를 찾습니다.

select country_id
from countries
where area > 5000000;

countries

 

그런 다음 다음 쿼리에서 이 ID를 사용하여 countries 정보를 가져옵니다.

select
    name,
    area
from countries
where country_id in (12,15,31,38,42,182,224)
order by area, name;

countries

 

이 접근 방식에는 몇 가지 문제가 있습니다.

  • 먼저 국가의 지역이 업데이트되면 두 번째 쿼리를 업데이트해야 합니다.
  • 둘째, 데이터베이스 서버에 두 개의 쿼리를 실행하고 결과를 얻기 위해 두 번째 쿼리의 ID를 수동으로 업데이트해야 합니다.

Subqueries 는 이러한 문제를 해결하는 데 도움이 될 수 있습니다.
서로 다른 시간에 두 개의 쿼리를 실행하는 대신 다음과 같이 첫 번째 쿼리를 두 번째 쿼리에 중첩합니다.

select
    name,
    area
from countries
where country_id in (
    select country_id
    from countries
    where area > 5000000
)
order by area, name;

다음 쿼리를 subquery(하위 쿼리)라고 합니다.

select country_id
from countries
where area > 5000000

그리고 subquery(하위 쿼리)를 포함하는 쿼리를 outer query(외부 쿼리)라고 합니다.

outer query, subquery

 

 

아래의 내용은 Scalar subquery(하위 쿼리), 행 subquery(하위 쿼리) 및 select 문의 from 절에 나타나는 subquery(하위 쿼리)의 세 가지 유형의 하위 쿼리에 중점을 둡니다.

 

 

Scalar queries

 

 

Scalar subquery(하위 쿼리)는 단일 값을 반환합니다.
리터럴 또는 단일 열 값이 사용되는 SQL 문에서 스칼라 하위 쿼리를 사용할 수 있습니다.


다음 쿼리는 모든 countries 중 가장 큰 area 을 반환합니다.

select max(area)
from countries;

쿼리는 단일 값을 반환하므로 하위 쿼리로 사용하여 area이 가장 큰 country 를 찾을 수 있습니다.

select *
from countries
where area = (
    select max(area)
    from countries
);

 

 

Row subqueries

 

 

Row subquery 는  단일 행(row)을 반환합니다.

다음 countries 및 country_stats 표를 참조하십시오.

sample DB

 

다음 문은 2018년 모든 국가의 평균 인구 및 GDP를 반환합니다.

select
    avg(population),
    avg(gdp)
from country_stats
where year = 2018;

이 쿼리는 두 개의 열로 구성된 행을 반환합니다.
이 쿼리를 하위 쿼리로 사용하여 인구와 GDP가 2018년 모든 국가의 평균 인구와 GDP보다 큰 국가를 찾을 수 있습니다.

select
    name
from country_stats
inner join countries using (country_id)
where
    year = 2018
    and (population, gdp) > (
        select
            avg(population),
            avg(gdp)
        from country_stats
        where year = 2018
    )
order by name;

 

 

from 절의 subqueries

 

 

일반적으로 select 문의 from 절에 테이블을 배치합니다.

쿼리도 가상 테이블과 동일한 결과 집합을 반환하므로 from 절에 subqueries 를 배치할 수 있습니다.

select select_list
from (subquery) as table_alias
...;

from 절에 나타나는 하위 쿼리를 일반적으로 파생 테이블이라고 합니다.
파생 테이블에는 별칭이 있어야 합니다.
그렇지 않으면 구문 오류가 발생합니다.


예를 들어 다음 문은 모든 지역의 평균 면적을 반환합니다.

select avg(region_area)
from (
    select
        sum(area) region_area
    from countries
    group by region_id
) t;


이 예에서:

  • 먼저 하위 쿼리는 각 지역의 총 면적을 반환합니다.
  • 그런 다음 외부 쿼리는 모든 지역의 평균 면적을 계산합니다.

 

 

이상으로 보다 복잡한 쿼리를 구성하기 위한 MariaDB 하위 쿼리에 대해 알아봤습니다.

 

 

※ 원문출처 : https://www.mariadbtutorial.com/mariadb-basics/mariadb-subqueries/

728x90
반응형

'MariaDB SQL' 카테고리의 다른 글

MariaDB CTE  (0) 2023.06.21
이벤트 스케줄러 목록조회  (0) 2023.06.20
MariaDB Having  (0) 2023.06.15
MariaDB Group By  (0) 2023.06.14
MariaDB Left Join  (0) 2023.06.13