보다 복잡한 쿼리를 형성하기 위해 MariaDB Subqueries(하위 쿼리)에 대해 알아봅니다.
Subquery(하위 쿼리) 란 무엇인가?
Subqueries 는 다른 쿼리에 중첩된 쿼리입니다.
샘플 데이터베이스에서 다음 countries 테이블을 참조하십시오.
면적이 5,000,000km2보다 큰 국가를 찾고 싶다고 가정합니다.
이를 달성하기 위해 다음 단계를 수행할 수 있습니다.
먼저 area 이 5,000,000보다 큰 countries 의 식별 정보를 찾습니다.
select country_id
from countries
where area > 5000000;
그런 다음 다음 쿼리에서 이 ID를 사용하여 countries 정보를 가져옵니다.
select
name,
area
from countries
where country_id in (12,15,31,38,42,182,224)
order by area, name;
이 접근 방식에는 몇 가지 문제가 있습니다.
- 먼저 국가의 지역이 업데이트되면 두 번째 쿼리를 업데이트해야 합니다.
- 둘째, 데이터베이스 서버에 두 개의 쿼리를 실행하고 결과를 얻기 위해 두 번째 쿼리의 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(외부 쿼리)라고 합니다.
아래의 내용은 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 표를 참조하십시오.
다음 문은 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/
'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 |