반응형
아래 예제 쿼리는 UNION과 UNION ALL의 차이점에 대해 설명하고, 테이블을 생성해 Group by와 Order by를 활용해 데이터를 병합하고 결과를 출력하는 쿼리입니다.
UNION과 UNION ALL은 두 개의 결과를 결합하는 연산자입니다. 결과를 합치는 방식과 중복 처리 방식에 차이가 있습니다.
UNION
- 중복된 행을 제거하여 결과에는 유니크한 행들만 포함합니다.
- 결과는 정렬되어 반환되며, 중복된 행이 제거된 상태입니다.
UNION ALL
- 중복된 행을 제거하지 않고 모든 행을 포함합니다.
- 결과는 정렬되지 않으며, 그대로 반환됩니다.
예제
SELECT name, grade FROM students1
UNION
SELECT name, grade FROM students2
ORDER BY grade DESC;
SELECT name, grade FROM students1
UNION ALL
SELECT name, grade FROM students2
ORDER BY grade DESC;
위의 UNION, UNION ALL 쿼리 결과는 동일하게 출력됩니다. UNION 연산자는 결과에서 중복된 행을 제거합니다. 중복 제거는 SELECT 구문의 모든 항목이 동일할 때에만 이루어집니다. 즉, name과 grade 모두 동일한 경우에만 중복이 제거됩니다. 만약 두 테이블에서 같은 name을 가진 학생의 grade가 다르다면 중복으로 처리되지 않습니다.
GROUP BY 사용하여 중복된 name 제거하기 (grade 구분없이)
SELECT name, MAX(grade) AS grade
FROM (
SELECT name, grade FROM students1
UNION
SELECT name, grade FROM students2
) AS a
GROUP BY name
order by grade desc;
위의 쿼리는 GROUP BY를 사용하여 중복된 name을 제거하고 MAX 함수를 통해 가장 큰 grade를 출력합니다.
그 밖의 쿼리
SELECT name, FORMAT(AVG(grade), 2) AS avg_grade
FROM (
SELECT name, grade FROM students1
UNION ALL
SELECT name, grade FROM students2
) AS a
GROUP BY name
ORDER BY avg_grade DESC;
SELECT name, grade FROM students1 where grade > 80
UNION ALL
SELECT name, grade FROM students2 where grade > 80
ORDER BY grade DESC;
반응형
'개발이야기 > MySQL' 카테고리의 다른 글
[MySQL] JOIN(조인) 설명과 사용법 예제 (INNER, LEFT, RIGHT) (0) | 2023.09.06 |
---|---|
[MySQL] 위도 경도 값으로 거리 계산하기 (Haversine 공식) (0) | 2023.08.29 |
[MySQL] 문자열 자르기 사용법, 예제 (SUBSTRING, LEFT, RIGHT) (0) | 2023.07.20 |
[MySQL] SELECT 결과로 테이블 만들기 (CREATE TABLE AS SELECT) (0) | 2023.07.07 |
[MySQL] SELECT alias(별칭) 조건문에서 사용하기, 예제 (having) (0) | 2023.06.30 |
댓글