데이터 & AI/MySQL

[MySQL] UNION 보충 , UNION ALL

뭉실뭉실뜬구름 2023. 4. 25. 17:05
728x90

1. 서로 다른 종류의 테이블도, 조회하는 컬럼을 일치시키면 집합 연산이 가능하다.

 

만약 두 테이블을 UNION 연산하면 컬럼 구조가 다르기 때문에 오류가 난다.

SELECT * FROM Summer_Olympic_Medal
UNION
SELECT * FROM Winter_Olympic_Medal;

하지만 만약 SELECT 절 뒤의 *부분을 두 테이블이 공통적으로 갖고 있는 컬럼 이름들로 바꿔주면 에러가 발생하지 않는다.

SELECT id,nation,count FROM Summer_Olympic_Medal
UNION
SELECT id,nation,count FROM Winter_Olympic_Medal;

2. UNION ALL:

Q. UNION은 근데 만약 두 테이블이 다른 값을 의미하는 ROW를 단순히 일치한다는 이유로 하나를 삭제할 수도 있는건가요?

A. 맞다. 그게 UNION의 문제점이다. 위에 두 테이블에서 id가 6번인 테이블을 보면 분명 두 테이블은 다른 기간의 정보를 보여주지만 단순히 정보가 일치하여서 하나가 생략되어 나타났다.  이러한 문제점을 해결해주는게 바로 UNION ALL 함수이다.

 

UNION ALL은 두 테이블의 합집합을 보여주지만 겹치는 것을 중복 제거하지 않고 모두 보여줍니다.

SELECT id,nation,count FROM Summer_Olympic_Medal
UNION ALL
SELECT id,nation,count FROM Winter_Olympic_Medal;

728x90