MariaDB union 연산자를 사용하여 두 개 이상의 쿼리 결과 집합을 단일 결과 집합으로 결합하는 방법을 알아봅니다.
MariaDB union 연산자 소개
union 연산자는 둘 이상의 select 문의 결과 집합을 단일 결과 집합으로 결합합니다.
다음은 union 연산자의 구문을 보여줍니다.
select-statement1
union [all | distinct]
select-statement2
union [all | distinct]
...
이 구문에서:
- 먼저 결과 집합을 결합하려는 두 개 이상의 select 문을 지정합니다.
- 둘째, union 연산자를 사용하여 두 개의 선택 문을 연결합니다.
select 문의 select 목록에는 동일한 수의 열이 있어야 합니다.
또한 첫 번째 Select 문의 해당 열은 두 번째 Select 문의 열과 동일한 데이터 유형을 가져야 합니다.
union 연산자는 첫 번째 select 문의 열 이름을 최종 결과 집합의 열 이름으로 사용합니다.
all vs. distinct
위 쿼리를 평가할 때 MariaDB는 각 select 문을 개별적으로 평가하고 각 결과 집합의 행을 결합합니다.
distinct 옵션은 union 연산자에게 최종 결과 집합에서 중복 행을 제거하도록 지시하고 all 옵션은 중복 행을 유지합니다.
다음 그림은 두 집합의 union 과 union all 결과를 보여줍니다.
distinct 또는 all 옵션은 선택 사항입니다. 기본적으로 union 연산자는 all 또는 distinct를 명시적으로 지정하지 않은 경우 all 옵션을 사용합니다.
union and order by
select-statements 에는 order by 절이 있을 수 있습니다.
그러나 이러한 order by 절은 최종 결과 집합의 행 순서에 영향을 주지 않습니다.
union 연산자가 포함된 쿼리에는 문 끝에 표시되는 전역 order by 절이 있을 수 있습니다.
이 order by 절은 최종 결과 집합의 행 순서를 결정합니다.
MariaDB union 예제
데모를 위해 샘플 데이터베이스의 guest 및 vips 테이블을 사용합니다.
1) 간단한 MariaDB union 예시
다음 문은 union 연산자를 사용하여 guest 및 vips 테이블의 결과 집합을 결합합니다.
select
vip_id id name, 'vip' as type
from vips
union
select
guest_id name, 'guest'
from guests;
vips 및 guest 테이블의 ID 및 이름 열 외에도 연락처 유형을 지정하는 type 열도 추가합니다.
2) MariaDB union distinct 예시
다음 예에서는 union 연산자를 사용하여 vips 및 guest 테이블에서 고유한 이름을 반환합니다.
select
name
from guests
union
select
name
from vips
order by name;
위의 쿼리는 distinct 옵션을 명시적으로 사용하는 다음 쿼리와 동일합니다.
select
name
from guests
union distinct
select
name
from vips
order by name;
3) MariaDB union all 예제
이 예에서는 union all 을 사용하여 중복 항목을 포함하여 vips 및 guest 테이블의 모든 이름을 반환합니다.
select name from guests
union all
select name from vips
order by name;
union vs. join
join 은 둘 이상의 테이블 열을 결합하는 반면 union 은 둘 이상의 select 문의 결과 집합 행을 결합합니다.
간단히 말해서 join 은 결과 집합을 가로로 추가하고 union 은 결과 집합을 세로로 추가합니다.
이상으로 MariaDB union 및 union all 연산자를 사용하여 둘 이상의 select 문의 결과 집합을 단일 결과 집합으로 결합하는 방법을 알아봤습니다.
※ 원문출처 : https://www.mariadbtutorial.com/mariadb-basics/mariadb-union/
'MariaDB SQL' 카테고리의 다른 글
MariaDB Except (0) | 2023.06.27 |
---|---|
MariaDB Intersect (0) | 2023.06.26 |
MariaDB CTE (0) | 2023.06.21 |
이벤트 스케줄러 목록조회 (0) | 2023.06.20 |
MariaDB Subqueries (0) | 2023.06.16 |