개발이야기/MySQL

[MySQL] UNION, UNION ALL 차이점 (Group by, Order by 활용)

후린개발자 2023. 8. 2.
반응형

아래 예제 쿼리는 UNION과 UNION ALL의 차이점에 대해 설명하고, 테이블을 생성해 Group by와 Order by를 활용해 데이터를 병합하고 결과를 출력하는 쿼리입니다.

 

UNION과 UNION ALL은 두 개의 결과를 결합하는 연산자입니다. 결과를 합치는 방식과 중복 처리 방식에 차이가 있습니다.

 

UNION

- 중복된 행을 제거하여 결과에는 유니크한 행들만 포함합니다.

- 결과는 정렬되어 반환되며, 중복된 행이 제거된 상태입니다.

 

UNION ALL

- 중복된 행을 제거하지 않고 모든 행을 포함합니다.
- 결과는 정렬되지 않으며, 그대로 반환됩니다.

 

예제

students1 테이블

 

students2 테이블

 

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 사용하기

위의 쿼리는 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;

 

AVG 사용하여 평균 계산하기

 

SELECT name, grade FROM students1 where grade > 80
UNION ALL
SELECT name, grade FROM students2 where grade > 80
ORDER BY grade DESC;

 

where 조건 주기

 

반응형

댓글

💲 추천 글