UNION
과 UNION ALL
의 차이점은 무엇입니까?
질문자 :Brian G
UNION
은 중복 레코드(결과의 모든 열이 동일한 경우)를 제거하지만 UNION ALL
은 그렇지 않습니다.
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)
Community Wiki
UNION과 UNION ALL은 모두 두 개의 다른 SQL 결과를 연결합니다. 중복을 처리하는 방식이 다릅니다.
UNION은 결과 집합에 대해 DISTINCT를 수행하여 중복 행을 제거합니다.
UNION ALL은 중복을 제거하지 않으므로 UNION보다 빠릅니다.
참고: 이 명령을 사용하는 동안 선택한 모든 열은 데이터 유형이 같아야 합니다.
예: 1) Employee 및 2) Customer라는 두 개의 테이블이 있는 경우
- 직원 테이블 데이터:
- 고객 테이블 데이터:
- UNION 예(중복된 모든 레코드를 제거함):
- UNION ALL 예 (중복을 제거하지 않고 레코드를 연결하므로 UNION보다 빠름):
Bhaumik Patel
UNION
은 중복을 제거하지만 UNION ALL
은 제거하지 않습니다.
중복을 제거하려면 결과 집합을 정렬해야 하며 이는 정렬되는 데이터의 양과 다양한 RDBMS 매개변수의 설정에 따라 UNION의 성능에 영향을 미칠 수 WORKAREA_SIZE_POLICY=AUTO
PGA_AGGREGATE_TARGET
또는 WORKAREA_SIZE_POLICY=MANUAL
경우 SORT_AREA_SIZE
및 SOR_AREA_RETAINED_SIZE
).
기본적으로 정렬은 메모리에서 수행할 수 있으면 더 빠르지만 데이터 볼륨에 대한 동일한 주의 사항이 적용됩니다.
물론 중복 없이 반환된 데이터가 필요한 경우 데이터 소스에 따라 UNION 을 사용해야 합니다.
첫 번째 게시물에 대해 "성능이 훨씬 떨어짐" 댓글에 대해 댓글을 달았지만 그렇게 하기에는 평판(포인트)이 부족합니다.
mathewbutler
ORACLE: UNION은 BLOB(또는 CLOB) 열 유형을 지원하지 않지만 UNION ALL은 지원합니다.
Michiel Overeem
UNION과 UNION ALL의 기본적인 차이점은 Union 연산은 결과 집합에서 중복된 행을 제거하지만 Union all은 조인 후 모든 행을 반환한다는 것입니다.
http://zengin.wordpress.com/2007/07/31/union-vs-union-all/에서
George Mauer
다음과 같은 쿼리를 실행하여 중복을 방지하고 UNION DISTINCT(실제로 UNION과 동일)보다 훨씬 빠르게 실행할 수 있습니다.
SELECT * FROM mytable WHERE a=X UNION ALL SELECT * FROM mytable WHERE b=Y AND a!=X
AND a!=X
부분에 주목하십시오. 이것은 UNION보다 훨씬 빠릅니다.
Ihor Vorotnov
노동 조합
UNION
JOIN
명령과 마찬가지로 두 테이블에서 관련 정보를 선택하는 데 사용됩니다. UNION
명령을 사용할 때 선택한 모든 열은 동일한 데이터 유형이어야 합니다. UNION
사용하면 고유한 값만 선택됩니다.
유니온 올
UNION ALL
명령은 UNION ALL
모든 값을 선택한다는 점을 제외하고 UNION
차이 Union
및 Union all
것입니다 Union all
아니라 그냥 테이블에 쿼리 특성 및 콤바인을 맞는 모든 테이블에서 모든 행을 끌어 중복 행을 제거하지 않습니다.
UNION
문은 결과 집합에서 SELECT DISTINCT
를 효과적으로 수행합니다. 반환된 모든 레코드가 유니온에서 고유한 경우 UNION ALL
대신 사용하면 더 빠른 결과를 얻을 수 있습니다.
DotNetGuy
여기 토론에 두 센트를 추가하기만 하면 UNION
연산자를 순수한 SET 지향 UNION으로 이해할 수 있습니다. 예를 들어 set A={2,4,6,8}, set B={1,2,3, 4}, 유니온 B = {1,2,3,4,6,8}
집합을 다룰 때 숫자 2와 4가 두 번 나타나는 것을 원하지 않을 것입니다. 요소 가 집합에 있든 없든 상관없기 때문입니다.
그러나 SQL의 세계에서는 두 집합의 모든 요소를 하나의 "가방" {2,4,6,8,1,2,3,4}에서 함께 보고 싶을 수 있습니다. 그리고 이를 위해 T-SQL은 UNION ALL
연산자를 제공합니다.
Peter Perháč
UNION - 고유한 레코드 생성
동안
UNION ALL - 중복을 포함한 모든 레코드를 생성합니다.
둘 다 차단 연산자이므로 개인적으로 차단 연산자(UNION, INTERSECT, 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을 사용 하면 실행 계획에서 고유한 정렬 작업이 수행됩니다. 이 진술을 증명하는 증거는 다음과 같습니다.
DBA
어떤 데이터베이스가 중요한지 확실하지 않음
UNION
및 UNION ALL
은 모든 SQL Server에서 작동해야 합니다.
불필요한 UNION
은 엄청난 성능 누수를 피해야 합니다. 어떤 것을 사용해야 할지 잘 모르겠다면 일반적으로 UNION ALL
Jakub Šturc
Union은 두 테이블에서 고유한 값을 선택하는 데 사용되며, Union all은 테이블에서 중복을 포함한 모든 값을 선택하는 데 사용됩니다.
vishal
(Microsoft SQL Server 온라인 설명서에서)
유니온 [전체]
여러 결과 집합이 결합되어 단일 결과 집합으로 반환되도록 지정합니다.
모두
모든 행을 결과에 통합합니다. 여기에는 중복이 포함됩니다. 지정하지 않으면 중복 행이 제거됩니다.
DISTINCT
와 같은 중복 행 찾기가 결과에 적용되면 UNION
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)
으로 표시됩니다. 중복 행이 없을 때 이 부작용을 볼 수 있습니다.
shA.t
michael-mammut
나는 예를 추가,
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;
Do Nhu Vy
UNION
은 구조적으로 호환되는 두 테이블의 내용을 결합된 단일 테이블로 병합합니다.
- 차이점:
UNION
과 UNION ALL
의 차이점은 UNION은 UNION will
생략하는 반면 UNION ALL
은 중복 레코드를 포함한다는 것입니다.
Union
결과 집합은 오름차순으로 정렬되지만 UNION ALL
결과 집합은 정렬되지 않습니다.
UNION
DISTINCT
를 수행하여 중복 행을 제거합니다. UNION ALL
은 중복을 제거하지 않으므로 UNION
보다 빠릅니다.*
참고 : UNION
은 서버가 중복을 제거하는 추가 작업을 수행해야 하므로 UNION ALL
의 성능은 일반적으로 UNION
따라서 중복이 없을 것이 확실하거나 중복이 문제가 되지 않는 경우 성능상의 이유로 UNION ALL
pedram
두 개의 테이블 Teacher & Student 가 있다고 가정합니다.
둘 다 이와 같이 다른 이름을 가진 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을 적용할 수 있습니다. 그러나 이름이나 데이터 유형이 다릅니다.
UNION
연산을 적용하면 모든 중복 항목을 무시합니다(테이블에 있는 행의 모든 열 값은 다른 테이블과 동일함). 이와 같이
SELECT * FROM Student UNION SELECT * FROM Teacher
결과는
UNION ALL
연산을 적용하면 중복된 모든 항목을 반환합니다(2개의 테이블에 있는 행의 열 값에 차이가 있는 경우). 이와 같이
SELECT * FROM Student UNION ALL SELECT * FROM Teacher
성능:
분명히 UNION ALL 성능은 중복 값을 제거하기 위해 추가 작업을 수행 하므로 UNION 보다 낫습니다. MSSQL 에서 ctrl+L 을 눌러 Execution Estimated Time 에서 확인할 수 있습니다.
reza.cse08
한 가지 더 덧붙이고 싶은 것은-
Union : 결과 집합이 오름차순으로 정렬됩니다.
Union All :- 결과 집합이 정렬되지 않습니다. 두 개의 쿼리 출력이 추가됩니다.
Rahul Sawant
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개 이상의 행을 제공합니다.
우선 순위 관점에서 둘 다 동일한 우선 순위를 갖습니다.
Pawan Kumar
ORDER BY
가 없으면 UNION ALL
은 행을 다시 가져올 수 있지만 UNION
은 전체 결과 집합을 한 번에 제공하기 전에 쿼리가 끝날 때까지 기다리게 만듭니다. 이것은 시간 초과 상황에서 차이를 만들 수 있습니다. UNION ALL
은 연결을 그대로 유지합니다.
따라서 시간 초과 문제가 있고 정렬이 없고 중복이 문제가 아닌 경우 UNION ALL
이 오히려 도움이 될 수 있습니다.
AjV Jsy
UNION 및 UNION ALL은 둘 이상의 쿼리 결과를 결합하는 데 사용됩니다.
UNION 명령은 중복 행을 제거하는 두 테이블에서 고유한 관련 정보를 선택합니다.
반면 UNION ALL 명령은 모든 행을 표시하는 두 테이블의 모든 값을 선택합니다.
Sona Rijesh
중요한! 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 에서 UNION은 t1과 t2 사이에 중복 값이 없기 때문에 두 테이블의 모든 행을 가져옵니다. 반면에 MySQL 에서는 테이블 t1과 테이블 t2 내에 중복 행이 있기 때문에 결과 집합의 행이 더 적습니다!
Aris Mist
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
은 그렇지 않을 것입니다.
Dowlers
출처 : http:www.stackoverflow.com/questions/49925/what-is-the-difference-between-union-and-union-all
'etc. > StackOverFlow' 카테고리의 다른 글
varchar와 nvarchar의 차이점은 무엇입니까? (0) | 2022.02.24 |
---|---|
다른 스레드에서 GUI를 어떻게 업데이트합니까? (0) | 2022.02.24 |
문자열이 유효한 숫자인지 확인하는 JavaScript의 (내장) 방법 (0) | 2022.02.19 |
매개변수를 사용하는 Bash 별칭을 만드시겠습니까? (0) | 2022.02.19 |
Memcached 대 Redis? [닫은] (0) | 2022.02.19 |