UNION
중복 제거: UNION은 여러 SELECT 문의 결과를 결합할 때 중복된 행을 자동으로 제거한다
성능: 중복 제거 과정 때문에 UNION은 UNION ALL에 비해 느릴 수 있다
사용 예시: 서로 다른 테이블에서 유사한 데이터를 선택할 때 중복 없이 결과를 얻고 싶을 때 사용한다
UNION ALL
중복 포함: UNION ALL은 중복된 행도 모두 포함하여 결과를 반환한다
성능: 중복을 제거하지 않기 때문에 UNION보다 일반적으로 빠르다
사용 예시: 중복된 데이터도 모두 필요할 때 사용한다
사용 예시
MySQL students 테이블과 teachers 테이블에서 이름을 조회하는 예시이다
-- students 테이블
SELECT name FROM students
UNION
-- teachers 테이블
SELECT name FROM teachers;
이 경우, students와 teachers 테이블 양쪽에서 이름을 조회하지만, 중복된 데이터는 제거한다
-- students 테이블
SELECT name FROM students
UNION ALL
-- teachers 테이블
SELECT name FROM teachers;
여기서는 중복된 이름도 결과에 모두 포함한다
주의할 점
열의 수와 타입 일치: 결합되는 모든 SELECT 문에서 열의 수와 데이터 타입이 일치해야 한다
정렬과 제한: UNION이나 UNION ALL을 사용할 때 전체 결과에 대한 정렬(ORDER BY)이나 제한(LIMIT)을 적용할 수 있다 그러나 각각의 SELECT 문에 별도로 적용하려면 서브쿼리를 사용해야 한다
성능 고려: 중복 제거가 필요 없다면 UNION ALL을 사용하는 것이 성능에 더 좋다

'데이터베이스' 카테고리의 다른 글
| [SQL] WITH절 사용하기(재귀쿼리, 중복쿼리) & mysql 예제 (1) | 2023.11.14 |
|---|---|
| 분산환경에서 Spring, Redis를 이용한 Session Clustering(세션 클러스터링) (0) | 2023.02.08 |