[sql] UNION과 UNION ALL의 차이점은 무엇입니까?

차이점은 무엇이며 UNION그리고 UNION ALL?



답변

UNION중복 레코드를 제거하고 (결과의 모든 열이 동일한 경우) UNION ALL그렇지 않습니다.

데이터베이스 서버는 중복 행을 제거하기 위해 추가 작업을 수행해야하지만 일반적으로 중복 보고서 (특히 보고서 개발)를 원하지 않으므로을 UNION대신 사용하면 성능이 저하됩니다 UNION ALL.

UNION 예 :

SELECT 'foo' AS bar UNION SELECT 'foo' AS bar

결과:

+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)

UNION ALL 예 :

SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar

결과:

+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)


답변

UNION과 UNION ALL은 서로 다른 두 개의 SQL 결과를 연결합니다. 중복을 처리하는 방식이 다릅니다.

  • UNION은 결과 집합에서 DISTINCT를 수행하여 중복 된 행을 제거합니다.

  • UNION ALL은 중복을 제거하지 않으므로 UNION보다 빠릅니다.

노트 : 이 명령을 사용하는 동안 선택한 모든 열의 데이터 형식이 같아야합니다.

예 : 1) 직원과 2) 고객이있는 두 개의 테이블이있는 경우

  1. 직원 테이블 데이터 :

여기에 이미지 설명을 입력하십시오

  1. 고객 테이블 데이터 :

여기에 이미지 설명을 입력하십시오

  1. UNION 예 (모든 중복 레코드를 제거함) :

여기에 이미지 설명을 입력하십시오

  1. UNION ALL 예제 (레코드를 연결하지 않고 중복을 제거하지 않으므로 UNION보다 빠릅니다) :

여기에 이미지 설명을 입력하십시오


답변

UNION중복은 제거하지만 UNION ALL그렇지는 않습니다.

제거하기 위해 결과 집합을 정렬해야 복제, 이것은에서 연합의 성능에 영향을, 데이터의 양에 따라 분류되고, 및 (Oracle의 다양한 RDBMS 매개 변수의 설정 PGA_AGGREGATE_TARGETWORKAREA_SIZE_POLICY=AUTOSORT_AREA_SIZESOR_AREA_RETAINED_SIZE있는 경우 WORKAREA_SIZE_POLICY=MANUAL).

기본적으로 메모리에서 수행 할 수 있으면 정렬이 더 빠르지 만 데이터 볼륨에 대한 동일한 경고가 적용됩니다.

물론 중복없이 반환 된 데이터가 필요한 경우 데이터 소스에 따라 UNION 을 사용해야합니다 .

나는 “매우 성능이 덜한”의견을 인정하기 위해 첫 번째 게시물에 댓글을 달았지만 그렇게하기에는 명성 (점)이 충분하지 않습니다.


답변

ORACLE에서 : UNION은 BLOB (또는 CLOB) 열 유형을 지원하지 않으며 UNION ALL은 지원합니다.


답변

UNION과 UNION ALL의 기본 차이점은 공용체 연산으로 결과 집합에서 중복 된 행이 제거되지만 공용체는 결합 후 모든 행을 반환합니다.

에서 http://zengin.wordpress.com/2007/07/31/union-vs-union-all/


답변

다음과 같이 쿼리를 실행하여 중복을 피하고 UNION DISTINCT (실제로는 UNION과 동일)보다 훨씬 빠르게 실행할 수 있습니다.

SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X

AND a!=X부분을 주목하십시오 . 이것은 UNION보다 훨씬 빠릅니다.


답변

여기에 토론에 2 센트를 추가하기 만하면됩니다. UNION연산자를 순수한 SET 지향 UNION으로 이해할 수 있습니다. 예 : set A = {2,4,6,8}, set B = {1,2,3,4 }, A UNION B = {1,2,3,4,6,8}

세트를 처리 할 때, 숫자 2와 4는 요소 중 하나로서, 두 번 나타나는 원하지 않을 것 입니다 또는 아닙니다 세트로.

그러나 SQL 세계에서는 두 세트의 모든 요소를 ​​하나의 “bag”{2,4,6,8,1,2,3,4}로 함께보고자 할 수 있습니다. 이를 위해 T-SQL은 연산자를 제공합니다 UNION ALL.