문제

의 차이는 무엇입 UNIONUNION ALL?

도움이 되었습니까?

해결책

UNION 중복 제거 기록(어디에 있는 모든 열 결과는 같), UNION ALL 하지 않습니다.

성능이 칠 때 사용하는 UNIONUNION ALL, 기 때문에,데이터베이스 서버이 해야 할 추가적인 작업을 제거하는 행을 복제하지만,일반적으로 당신을 원하지 않 복제(특히 개발할 경우 보고서).

UNION 를 들어:

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

결과:

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

UNION 모든 예제:

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

결과:

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

다른 팁

모두 동맹 및 동맹의 연결하는 모든 결과 두 개의 서로 다른 sql 을.그들은 다른 방법으로 처리할 수 있습니다.

  • UNION 수행에 뚜렷한 결과를 설정 없이 복제 행이 있습니다.

  • 연합하지 않는 모든 중복을 제거하고,따라서보다 더 빨리합니다.

참고: 하는 동안 사용하여 이 명령은 모든 선택된 열이 될 필요가 동일한 데이터의 유형입니다.

예제:면 우리는 두 가지 테이블,1)직원과 2)고객

  1. 직원 테이블에 데이터:

enter image description here

  1. 고객 테이블에 데이터:

enter image description here

  1. UNION 예(그것은 모두 제거합 복제 records):

enter image description here

  1. UNION 모든 예(그냥 연결하여 레코드 제거하지 중복하므로,보다 빠른 연합):

enter image description here

UNION 고 중복을 제거합하는 반면, UNION ALL 하지 않습니다.

을 제거하기 위해서는 중복한 결과를 설정 정렬되어야 합니다,그리고 이 가의 성능에 미치는 영향을 조합에 따라,볼륨 데이터의 정렬하고,설정이 다양한 RDBMS 매개 변수(예 Oracle PGA_AGGREGATE_TARGETWORKAREA_SIZE_POLICY=AUTOSORT_AREA_SIZESOR_AREA_RETAINED_SIZE 는 경우 WORKAREA_SIZE_POLICY=MANUAL ).

기본적으로,정렬은 더 빠른 경우에 수행될 수 있는 메모리에,하지만 같은 경고에 대한 양의 데이터 적용됩니다.

물론,필요할 경우 반환되는 데이터 중복되지 않음은 당신 사용 조합에 따라 원하는 데이터입니다.

가 첫 번째에 댓글을 게시하는 자격을"다 훨씬 적은 성능이"코멘트,하지만 부족한 명성을(점)니다.

에서 오라클:UNION 지원하지 않 BLOB(또는 CLOB)열의 유형은,연합의 모든 않습니다.

기본적인 차이를 동맹 및 동맹의 모든 조합을 제거 작업 중복된 행 결과에서 설정되어 있지만 동맹의 모든 반품의 모든 행한 후에 연결되기도 합니다.

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

당신은 피할 수 있는 복고 아직도 실행보다 훨씬 빠르게 조합유(는 실제와 같은 연합)실행하여 다음과 같이 쿼:

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

AND a!=X 부분입니다.이것은 훨씬 더 빠르게 다음합니다.

그냥을 추가하는 내 두 개의 센트 토론 여기:중 하나 이해할 수 있다 UNION 운전자으로 순수한 설정 지향 UNION-예를 들어,설정={2,4,6,8},B={1,2,3,4},UNION B={1,2,3,4,6,8}

을 처리할 때 설정지 않을 것이다,당신은 원하는 숫자 2 및 4 개의 나오는 두 번 요소 중 하나 에서 설정합니다.

의 세계에서 SQL,하지만,당신은 참조 할 수 있습니다 모든 요소에서 두 개의 설정 하나에 함께"가방을"{2,4,6,8,1,2,3,4}.이 목적을 위해 T-SQL 제공자 UNION ALL.

UNION
UNION 명령을 사용하여 관련된 정보를 선택에서 두 테이블처럼 JOIN 명령입니다.그러나 사용하는 경우 UNION 명령을 선택한 모든 열을 할 필요가 동일한 데이터의 유형입니다.가 UNION, 만,고유한 값을 선택합니다.

모든 동맹
UNION ALL 명령과 동일 UNION 명령을 제외하고는 UNION ALL 모두 선택값입니다.

의 차이 UnionUnion allUnion all 지 않을 것이 중복을 방지할 수 있습니다 행는 대신 그것을 끌어 모두의 행한 모든 테이블을 쿼리를 구체적으로 그들을 결합합니다.

A UNION 문 효과적으로는 SELECT DISTINCT 에 결과를 설정합니다.당신이 알고 있는 경우는 모든 레코드를 반환되는 고유의 연합,사용 UNION ALL 대신,그것은 더 빠른 결과입니다.

지 않는 문제는 데이터베이스

UNIONUNION ALL 작동해야에서 모든 SQL 서버입니다.

당신의 피해야 하는 불필요 UNIONs 그들은 거대한 성능을 누수가 발생합니다.엄지 손가락의 규칙으로 사용 UNION ALL 는 경우에 당신은 확실하지 않은 사용합니다.

union 를 선택하는 데 사용되는 고유한 값에서 두 테이블 는 곳으로 유니온은 모든 선택하여 사용한 모든 값을 포함한 중복에서 테이블

연합에서 결과 기록



UNION 모든 결과에서 모든 레코드를 포함하여 다룹니다.

모두 차단을 운영하고 따라서 저는 개인적으로 선호를 사용하여 결합을 통해 차단하는 사업자(UNION,교차,노동 조합입니다.)다.

을 설명하는 이유 Union 작업을 수행합에서 가난하게 비교하여 조합 모든 체크아웃은 다음과 같습니다.

CREATE TABLE #T1 (data VARCHAR(10))

INSERT INTO #T1
SELECT 'abc'
UNION ALL
SELECT 'bcd'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'def'
UNION ALL
SELECT 'efg'


CREATE TABLE #T2 (data VARCHAR(10))

INSERT INTO #T2
SELECT 'abc'
UNION ALL
SELECT 'cde'
UNION ALL
SELECT 'efg'

enter image description here

다음과 같은 결과가 연합의 모든 조합 작업입니다.

enter image description here

UNION 문 효과적으로 선택에 뚜렷한 결과를 설정합니다.당신이 알고 있는 경우는 모든 레코드를 반환되는 고유의 연합,사용,동맹의 모든 대신,그것은 더 빠른 결과입니다.

를 사용하여 연합에서 결과 고유한 종류 운영에서 실행 계획을 실행합니다.증거가 이것을 증명하기 위하여 문이 아래에 표시되어 있습니다.

enter image description here

(Microsoft SQL Server 에서 예약 온라인으)

UNION[ALL]

을 지정하는 여러 결과 집합이 결합되고 반환되는 하나의 결과를 설정합니다.

모든

통합한 모든 행으로 결과입니다.이 포함되어 있습니다.지정하지 않은 경우,복제 행 제거됩니다.

UNION 너무 오래 걸으로 행복을 찾는 것 같이 DISTINCT 에 적용됩니다.

SELECT * FROM Table1
UNION
SELECT * FROM Table2

에 해당의:

SELECT DISTINCT * FROM (
    SELECT * FROM Table1
    UNION ALL
    SELECT * FROM Table2) DT

측면의 적용 효과 DISTINCT 이 결과는 정렬 작업 에 결과입니다.

UNION ALL 결과로 표시됩 임의 주문에서 결과 UNION 결과로 표시됩 ORDER BY 1, 2, 3, ..., n (n = column number of Tables) 에 적용되는 결과이다.당신이 볼 수있는 부작용이 없을 때는 어떤 행복.

그것은 좋은 이해와 벤 diagramm.

링크 하는 소스입니다.거기에 좋은 설명이 있습니다.

enter image description here

추가 예제

UNION,그것은 병합된 고유-->느리기 때문에,그것은 필요가 비교(Oracle SQL 개발자,선택한 쿼리,F10 오 비용 분석).

모든 동맹,그것은 병합은 없는 별개-->더 빠르다.

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual
UNION ALL
SELECT to_date(sysdate, 'yyyy-mm-dd') FROM dual;

UNION 병합의 콘텐츠 두 개의 구조적으로 호환이블로 단일 결합이다.

  • 차이:

의 차이 UNIONUNION ALLUNION will 생략 중복된 레코드를 반면 UNION ALL 을 포함 할 것이 중복된 기록합니다.

Union 결과 집 오름차순으로 정렬하는 반면 UNION ALL 결과로 설정하지 않은 정렬

UNION 수행 DISTINCT 그 결과로 설정됩니다 그래서 제거하는 모든 중복의 행이 있습니다.반면 UNION ALL 지 않을 것이 중복을 제거하고 따라서 그것보다 빠르 UNION.*

참고: 의 성능 UNION ALL 일반적으로 더 나 UNION, 이후 UNION 필요 서버의 추가 작업을 제거하는 모든 중복.그래서,경우에 그것은 특정이 없을 것이 중복 또는 갖추는 것이 중복되지 않는 문제의 사용 UNION ALL 는 것을 추천한 성능을 이유입니다.

이 있다고 가정합니다 두 개의 테이블 교사 & 학생

모두 4 열로 다른 이름 다음과 같이

Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))

enter image description here

Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)

enter image description here

적용할 수 있습니다 연합하거나 유니온 모든 사람들을 위해 두 개의 테이블이있는 같은 수의 열이 있습니다.하지만 그들은 다른 이름 또는 데이터를 입력합니다.

할 때 적용 UNION 가동에서 2,테이블,그것을 무시 모든 중복된 항목(모든 열의 값을 행 테이블에 동의 다른 테이블).다음과 같이

SELECT * FROM Student
UNION
SELECT * FROM Teacher

결과

enter image description here

할 때 적용 UNION ALL 작업에 2 개의 테이블,그것은 모든 항목을 반환합니다 함께 복제(어떤 차이가 있는 사이에 어떤 열 값의 행에는 2 개의 테이블).다음과 같이

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

출력 enter image description here

성능:

분명 모든 동맹 성능이 더 낫다는 UNION 그들은 추가 작업을 제거하는 중복되는 값입니다.는지 확인할 수 있습니다터 실행 예상 시간ctrl+LMSSQL

한 것을 하나 더 추가하고 싶다-

Union:-성과 설정은 오름차순으로 정렬됩니다.

모든 동맹:-성과 설정이 정렬되지 않습니다.두 가지 쿼리 출력 단이 추가됩니다.

에서 매우 간단한 단어 간의 차이를 동맹 및 동맹의 모든 조합이 생략 중복을 기록 하는 반면 연합은 모든 포함할 것이 중복된 기록합니다.

차이 Union 대 Union 모든 Sql

는 무엇입니온에서 SQL?

UNION 연산자를 사용하여 결합하는 결과의 두 개 이상의 데이터를 설정합니다.

Each SELECT statement within UNION must have the same number of columns
The columns must also have similar data types
The columns in each SELECT statement must also be in the same order

Union 대 Union 가진 모든 예

중요합니다!차이 Oracle Mysql:말 t1t2 없 행을 복제 그들 사이의 그러나 그들은 복제 행 개인합니다.예제:t1 판매에서 2017 년과 2018 에서 t2

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE UNION 모든 가져오는 모든 행에서 두 테이블이 있습니다.동일한에서 발생합니다.MySQL.

그러나:

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE, 유니온 가져오는 모든 행에서 두 테이블이 없기 때문에 중복 사이의 값을 t1and t2.다른 한편으로서 MySQL resultset 것입니다 적은 행있을 것이기 때문에 중복된 내에서 행 t1 테이블과 테이블 t2!

유니온을 제거 중복된 레코드에서 다른 손으로 조합의 모든지 않습니다.그러나 하나 확인해야의 대량 데이터가 처리되는 열과 데이터 형식은 동일해야 합니다.

이후 동맹 내부적으로 사용하는"뚜렷한"동작을 선택하는 행 따라서 그것은 더 많은 비용이 많이 드는 시간과 성능.아

select project_id from t_project
union
select project_id from t_project_contact  

이렇게 나를 2020 년 기록

에 다른 손으로

select project_id from t_project
union all
select project_id from t_project_contact

게 나보다 더 행 17402

에 우선한 관점을 모두가 우선 순위가 같습니다.

이 없는 경우 ORDER BY, 이, UNION ALL 가져올 수 있습니다 행 다시 간다면 UNION 는 것을 기다리게 하는 마지막까지의 쿼리를 제공하기 전에 당신은 전체적인 결과를 한 번에 설정.이 차이를 만들 수 있습에서 시간 제한 상황- UNION ALL 지 연결이 살아있는,그것이 있었다.

그래서 만약 당신이 시간 문제는 없을 정렬,그리고 중복되지 않는 문제 UNION ALL 할 수 있는 오히려 도움이 됩니다.

동맹 및 동맹의 모든 사용되는 두 가지를 결합하거나 많은 질의 결과입니다.

UNION 선택 명령을 뚜렷한과 관련된 정보에서 두 테이블이 제거 중복의 행이 있습니다.

반면에,동맹의 모든 명령을 선택한 모든 값에서 두 테이블을 표시하는 모든 행이 있습니다.

유일한 차이점은:

"조합"중복을 제거하의 행이 있습니다.

"UNION"모두 제거하지 않고 행복.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top