programing

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

codeshow 2023. 4. 17. 22:12
반응형

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

UNION ★★★★★★★★★★★★★★★★★」UNION ALL

UNION의 모든 ).「」 「 」 ( 「 」 ) 。UNION ALL지지않않않않

사용 시 퍼포먼스 히트가 발생하다UNIONUNION ALL데이터베이스 서버는 중복된 행을 제거하기 위해 추가 작업을 수행해야 하지만 일반적으로 중복된 행을 제거하지 않습니다(특히 보고서 작성 시).

중복을 식별하려면 레코드는 호환되는 유형뿐만 아니라 비교 가능한 유형이어야 합니다.이는 SQL 시스템에 따라 달라집니다.예를 들어, 시스템은 비교를 위해 짧은 텍스트 필드를 만들기 위해 긴 텍스트 필드를 모두 잘라내거나(MS Jet), 이진 필드(ORACLE) 비교를 거부할 수 있습니다.

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은 모두 서로 다른2개의 SQL의 결과를 연결합니다.중복 처리 방법이 다릅니다.

  • UNION은 결과 세트에 대해 DISTINT를 실행하여 중복되는 행을 제거합니다.

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

참고: 이 명령을 사용할 때는 선택한 모든 열이 동일한 데이터 유형이어야 합니다.

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

  1. 직원 테이블 데이터:

여기에 이미지 설명 입력

  1. 고객 테이블 데이터:

여기에 이미지 설명 입력

  1. UNION 예(복제된 레코드가 모두 삭제됩니다)

여기에 이미지 설명 입력

  1. UNION ALL 예(중복 제거가 아니라 레코드를 연결하기만 하면 되므로 UNION보다 빠릅니다).

여기에 이미지 설명 입력

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

중복을 제거하려면 결과 세트를 정렬해야 합니다.이러한 세트는 정렬되는 데이터의 양과 다양한 RDBMS 파라미터 설정에 따라 UNION의 퍼포먼스에 영향을 줄 수 있습니다(Oracle의 경우).PGA_AGGREGATE_TARGETWORKAREA_SIZE_POLICY=AUTO ★★★★★★★★★★★★★★★★★」SORT_AREA_SIZE ★★★★★★★★★★★★★★★★★」SOR_AREA_RETAINED_SIZEWORKAREA_SIZE_POLICY=MANUAL를 참조해 주세요.

기본적으로 메모리 내에서 실행할 수 있는 경우 정렬 속도가 더 빠르지만 데이터 볼륨에 대한 동일한 주의 사항이 적용됩니다.

물론 중복 없이 데이터를 반환해야 하는 경우 데이터 소스에 따라 UNION을 사용해야 합니다.

첫 번째 투고에서는 퍼포먼스가 훨씬 떨어지는 코멘트를 평가하려고 코멘트를 남겼지만, 그렇게 하기에는 평판(포인트)이 불충분명성(포인트)이 불충분합니다.

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

UNION ALL과 UNION ALL의 기본적인 차이점은 결과 집합에서 중복된 행을 제거하지만 결합 후에는 모든 행을 반환한다는 것입니다.

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


UNION의 테이블에서 사용합니다.를 들어, 2개의 테이블에서 관련 정보를 선택합니다.JOIN명령어를 입력합니다., 을 ,UNION명령은 선택한 모든 열의 데이터 유형이 동일해야 합니다.★★★★★★★★★★★★★★★★ UNION고유한 값만 선택됩니다.

UNION AILUNION 체체
UNION ALL명령어는 다음과 같습니다.UNION,UNION ALL모든 값을 선택합니다.

「 」의 Union ★★★★★★★★★★★★★★★★★」Union all라는 것이다.Union all중복된 행은 삭제되지 않고 쿼리 세부 사항에 맞는 모든 테이블에서 모든 행을 가져와 테이블로 결합할 뿐입니다.

A UNION으로 SELECT DISTINCT결과 세트에 표시됩니다.되는 모든 이 조합에서, 을 하십시오.UNION ALL하다

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

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

점에 주의:AND a!=X UNION보다 요. 유니온

에 제 , 은 그 말을 할 수 있을 입니다.UNIONSET UNION으로 - A,3,4}, A B{13,6 SET = {1,2,38} UNION - = A2,

세트를 다룰 때는 숫자 2와 4가 두 번 나타나는 것을 원하지 않습니다. 요소가 세트에 포함되거나 포함되지 않기 때문입니다.

그러나 SQL 환경에서는 두 세트의 모든 요소를 하나의 "백" {2,4,6,8,1,2,3,4}에 함께 표시할 수 있습니다. "T-SQL"을 합니다.UNION ALL.

UNION - 명확한 기록 생성

동시에

UNION ALL - union union union union union union union union union union union union union union union union 。

둘 다 차단 연산자이므로 개인적으로 차단 연산자(UNION, CRESST, UNION ALL 등)보다 JOINS를 사용하는 것이 좋습니다.

Union All에 비해 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'

여기에 이미지 설명 입력

다음은 UNION ALL 및 UNION 작업 결과입니다.

여기에 이미지 설명 입력

UNION 스테이트먼트는 결과 세트에 대해 SELECT DISTINCT를 효과적으로 수행합니다.반환된 모든 레코드가 유니언에서 고유하다는 것을 알고 있는 경우 대신 UNION ALL을 사용하면 더 빠른 결과를 얻을 수 있습니다.

UNION을 사용하면 실행 계획에서 고유 정렬 작업이 수행됩니다.이 진술을 증명하는 증거는 다음과 같습니다.

여기에 이미지 설명 입력

어떤 데이터베이스가 중요한지 확실하지 않습니다.

UNION ★★★★★★★★★★★★★★★★★」UNION ALLSQL Server를 선택합니다.

한 것은 UNION퍼포먼스의 큰 유출입니다.으로는 험험을 사용한다.UNION ALL떤떤면면면면면면면면면면면면면면면면

(Microsoft SQL Server Book Online에서)

UNION [모두]

여러 결과 세트를 결합하여 단일 결과 세트로 반환하도록 지정합니다.

모든.

결과에 모든 행을 포함합니다.여기에는 중복도 포함됩니다.지정하지 않으면 중복된 행이 제거됩니다.

UNION 오래 걸립니다.DISTINCT을 사용하다

SELECT * FROM Table1
UNION
SELECT * FROM Table2

는 다음과 같습니다.

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

★★★★★★★★★★★★★★★★의 부작용DISTINCTover results는 결과에 대한 정렬 작업입니다.

UNION ALL결과는 결과에 임의 순서로 표시됩니다.UNION결과는 다음과 같이 표시됩니다.ORDER BY 1, 2, 3, ..., n (n = column number of Tables)결과에 적용됩니다.중복된 행이 없는 경우 이러한 부작용을 볼 수 있습니다.

예를 하나 들자면

UNION은 비교가 필요하기 때문에 다른 --> 와의 결합이 느립니다(Oracle SQL 개발자의 경우 쿼리를 선택하고 F10 키를 눌러 비용 분석을 표시합니다).

UNION ALL, 명확한 --> 없이 빠르게 병합되고 있습니다.

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는 구조적으로 호환되는2개의 테이블의 내용을 1개의 조합된 테이블로 Marge 합니다.

  • 차이점:

「 」의 UNION ★★★★★★★★★★★★★★★★★」UNION ALL라는 것이다.UNION will된 레코드는 하고, 반면 중복된 레코드는 생략한다.UNION ALL이치노

Union됩니다.UNION ALL 되지 않았습니다.

UNION합니다.DISTINCT을 사용법 반에 whereas whereas.UNION ALL되지 않기 이 제거되지 않기 때문에 더 .UNION.*

주의: ★★★의 UNION ALL으로는 상보다보다 낫다UNION부터, syslogUNION그럼 서버가 중복을 삭제하는 추가 작업을 수행해야 합니다. 않을 에는 을 합니다.UNION ALL퍼포먼스상의 이유로 추천합니다.

의 테이블이 있다고 가정해 봅시다.선생님과 학생

둘 다 이렇게 이름이 다른 4개의 열이 있습니다.

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

여기에 이미지 설명 입력

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

여기에 이미지 설명 입력

열 수가 같은 두 표에 UNION 또는 UNION ALL을 적용할 수 있습니다.하지만 이름이나 데이터 유형이 다릅니다.

청시를 했을 때UNION2개의 테이블에서 동작하면 중복되는 엔트리가 모두 무시됩니다(테이블 내의 행의 모든 열 값은 다른 테이블과 동일)..

SELECT * FROM Student
UNION
SELECT * FROM Teacher

결과는 다음과 같습니다

여기에 이미지 설명 입력

청시를 했을 때UNION ALL2개의 테이블에서 동작하면 중복되는 엔트리가 모두 반환됩니다(2개의 테이블에서 행의 열 값 간에 차이가 있는 경우)..

SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher

산출량 여기에 이미지 설명 입력

퍼포먼스:

UNION ALL 퍼포먼스는 중복된 값을 제거하기 위한 추가 작업을 수행하므로 UNION보다 확실히 우수합니다.[ Execution Estimated Time ](실행 예상 시간)에서 MSQL에서 Ctrl+L 키를 눌러 확인할 수 있습니다.

UNION은 중복된 레코드를 삭제하지만 UNION ALL은 삭제하지 않습니다.그러나 처리할 데이터의 부피를 확인해야 하며 열과 데이터 유형이 동일해야 합니다.

union은 내부적으로 행을 선택하기 위해 "변형" 동작을 사용하기 때문에 시간과 성능 측면에서 비용이 더 많이 듭니다.맘에 들다

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개 이상의 행이 표시됩니다.

precedence 관점에서는 둘 다 같은 precedence를 가집니다.

「 」가 없는 ORDER BY ,a ,aUNION ALL 경우가 만, 「」는 「행」으로 되돌리는 경우가 있습니다.UNION전체 결과 세트를 한 번에 제공하기 전에 쿼리가 끝날 때까지 기다려야 합니다.상황에서 수 . 즉, 타임아웃이 될 경우입니다.UNION ALL연결 상태를 유지합니다.

문제가정렬이되지 않는 , ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★UNION ALL도움이 될 수도 있어요.

한 가지 더 덧붙이고 싶은 게 있는데

Union:- 결과 집합은 오름차순으로 정렬됩니다.

Union All:- 결과 집합이 정렬되지 않았습니다.2개의 쿼리 출력이 추가됩니다.

중요한!Oracle과 Mysql의 차이: t1 t2 사이에 중복된 행이 없고 개별적으로 중복된 행이 있다고 가정합니다.예: t1은 2017년, t2는 2018년 매출

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION ALL

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE UNION에서는 ALL이 양쪽 테이블에서 모든 행을 가져옵니다.MySQL에서도 같은 현상이 발생합니다.

단,

SELECT T1.YEAR, T1.PRODUCT FROM T1

UNION

SELECT T2.YEAR, T2.PRODUCT FROM T2

ORACLE에서는 t1과 t2 사이에 중복되는 값이 없기 때문에 UNION은 양쪽 테이블에서 모든 행을 가져옵니다.반면 MySQL에서는 테이블 t1과 테이블 t2에 중복된 행이 있기 때문에 결과 집합의 행 수는 줄어듭니다.

UNION ALL또한 더 많은 데이터 유형에서도 작동합니다.예를 들어 공간 데이터 유형을 결합하려고 할 때 등입니다.를 들면, '먹다'와 같이요.

select a.SHAPE from tableA a
union
select b.SHAPE from tableB b

던지다

The data type geometry cannot be used as an operand to the UNION, INTERSECT or EXCEPT operators because it is not comparable.

, <고객명>님union all하지 않을 것이다.

언급URL : https://stackoverflow.com/questions/49925/what-is-the-difference-between-union-and-union-all

반응형