유니온과
유니온 올`의 차이점은 무엇인가요?
UNION은 중복 레코드(결과의 모든 열이 동일한 경우)를 제거하지만
UNION ALL`은 중복 레코드를 제거하지 않습니다.
중복 행을 제거하기 위해 데이터베이스 서버가 추가 작업을 수행해야 하므로 UNION
대신 UNION ALL
을 사용하면 성능이 저하될 수 있지만, 일반적으로 중복이 필요하지 않은 경우(특히 보고서 개발 시)에는 성능 저하가 없습니다.
SELECT 'foo' AS bar UNION SELECT 'foo' AS bar
결과:
+-----+
| bar |
+-----+
| foo |
+-----+
1 row in set (0.00 sec)
SELECT 'foo' AS bar UNION ALL SELECT 'foo' AS bar
결과:
+-----+
| bar |
+-----+
| foo |
| foo |
+-----+
2 rows in set (0.00 sec)
그 결과, 모든 연결 연합 (eu) 과 모두 두 개의 다른 sql. 그들은 그들이 서로 데이터를 처리할 수 있는 방법을.
연합 결과에 대한 모든 복제본임을 있기 때문에 별도의 향상합니다 설정되었습니다 행뿐만.
연합 (eu) 및 중복 제거, 따라서 모든 언약보다는 보다.
>. Note: 이 명령은 모두 동일한 데이터를 사용하는 동안 선택한 열 필요가 유형:.
예: 만약 우리가 있는 두 개의 테이블뿐 1) 직원 및 2) 고객
반면 'UNION ALL' '노조의 복제물을 절감뿐만 않습니다.
중복을 제거하기 위해, 이 결과 집합을 정렬할지 적지 않은 영향을 받을 수 있어야 합니다 노조 정렬할지 성능 및 설정, 데이터의 양에 따라 다양한 RDBMS 매개변수입니다 (Oracle 'PGA_AGGREGATE_TARGET' 을 (를) 'WORKAREA_SIZE_POLICY = AUTO' 또는 'SORT_AREA_SIZE SOR_AREA_RETAINED_SIZE WORKAREA_SIZE_POLICY 경우' 와 '' = '수동').
Sort 가 더 빠르게 할 수 있는 경우 메모리에 대한 경고 수행되 있지만, 같은 양의 데이터를 qic.
물론 필요한 경우 데이터가 반환됨 중복 없이 그런 소스에 따라 노조 데이터의 사용 합니다.
내가 먼저 확인하는 데 대해 불평했어요 ", 훨씬 적은 performant" 게시물로의 있을 것이라고 말했다. 주석문입니다 있지만 아직 미흡한 명성 (포인트) 를 승인하십시오.
UNION과 UNION ALL의 기본적인 차이점은 유니온 연산은 결과 집합에서 중복된 행을 제거하지만 유니온 ALL은 조인 후 모든 행을 반환한다는 점입니다.
에서 http://zengin.wordpress.com/2007/07/31/union-vs-union-all/
그냥 내 2 센트 토론에 대한 추가할 수 있습니다. 이해할 수 있는 '노조의 작동자 순수, 한 노조 정위되도록 설정되었습니다 세트 b = {}, {}, 즉 설정되었습니다 2.4,6.8 a = b = {} 1.2,3.4 노조를 1.2,3.4,6.8
숫자 2 와 4 세트, 원치 않는 것과 다룰 때, 또는 는 두 번 나타나는 요소로 인컨텍스트 세트의 아니다.
Sql 표시되어도 세계에서 두 세트를 모두 볼 수 있는 것이 좋습니다 중에서 하나에 모두 " bag"; } {2.4,6.8,1.2,3.4. 이 목적을 위해, 그리고 T-SQL 제공사항 연산자에서 'UNION ALL'.
연합 (eu) * 이 '연합' 명령 '에서' 는 선택할 수 있도록 관련 정보를 두 테이블뿐 참가하십시오 함장님이요 비슷합니다 그러나 노조의 '명령을 사용하여 데이터 유형을 선택한 모든 열이 동일해야 합니다. 연합 '을 (를)' 만 뚜렷한 가치 선택됩니다.
모든 * 연합 모든 명령은 명령 '이' 연합 ',' 연합 '같은 노조의 모든 것을 제외하면 모든 값을 선택함.
전국교직원노동조합 (전교조) '와' 연합 '의 차이는 노조의' 가 아닌 '모든 행, 모든 것이 그냥 사라지는 것은 아닙니다) 에서 가장 구체적인 모든 테이블을 꺼내 복제본임을 질의와 피팅이면 테이블 및 모든 결합합니다.
'A' 연합 '선택' 에 명령문을 수행합니까 뚜렷한 결과를 설정되었습니다. 모든 기록은 알잖나 사용할 경우, 이를 통해 모든 '대신' 연합 (eu) 에서 반환되었습니다 고유하도록 빠른 결과를 얻을 수 있습니다.
, 뚜렷한 성적을 기록, < br> br> < 연합 -;; 한편, br> < < br>;; 연합 (eu) 등 모든 - 결과 모든 기록은 중복.
개인적으로 사용하는 두 가지 모두 차단 종합유선방송사업자 (so) 와 업그레이드됨 포지셔닝하십시오 차단 연산자 (연합 (eu), 모든 교차될 등) 를 통해 조인 언제든지.
왜 모든 작업을 설명하기 위해 연합 (eu) 에 비해 다음과 같은 예를 체크아웃합니다 향상합니다 부진을 면치 못했다.
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'
노조 명령문을 수행합니까 대한 서로 다른 선택 결과 설정되었습니다. 모든 기록은 반환되었습니다 연합 (eu) 에서 고유하도록 알잖나 경우, 그 대신 사용할 수 있는 모든 빠른 results.*
(Microsoft SQL Server 에서 책 온라인)
연합 (모두) * >. 여러 개의 결과 셋을 하나로 지정한 결합됨 반환함 결과를 확인할 수 있다.
모든 * >. 모든 행 (dsfs 꽂으십시오 결과를 얻을 수 있습니다. 여기에는 중복. 지정되지 않은 경우 복제본임을 행뿐만 제거됩니다.
'연합' 은 너무 오래 걸릴 것 같다 '는' 에 적용된 비호환성의 복제본임을 행뿐만 발견사항 뚜렷한 결과를 얻을 수 있습니다.
SELECT * FROM Table1
UNION
SELECT * FROM Table2
주소는 다음과 같다.
SELECT DISTINCT * FROM (
SELECT * FROM Table1
UNION ALL
SELECT * FROM Table2) DT
하지만 '과' UNION ALL '결과 적립율은 오더할 arbitrary 결과에 대한 노조의 결과 같이 표시됩니다' ORDER BY 1, 2, 3., n (n = 열 수가 테이블) '에 적용한 결과. 이 때, 어떤 부작용이 없는 don& 볼 수 있습니다 # 39 복제본임을 행일.
예를 들면 내가 추가
, 연합 (eu) 이 각기 다른 병합합니다 > -; 천천히, 비교 할 수 있기 때문이다 (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;
예를 들어, 두 개의 테이블을 가지고 있는지 & 교사 , 수강생용
둘 다 다른 이름을 이렇게 함께 열 4
Teacher - ID(int), Name(varchar(50)), Address(varchar(50)), PositionID(varchar(50))
Student- ID(int), Name(varchar(50)), Email(varchar(50)), PositionID(int)
전국교직원노동조합 (전교조) 이 2 일 '무시' 작업을 테이블뿐 적용할 때 모든 복제본임을 항목 (행 단) 는 동일한 값을 표에서 모든 다른 테이블). 이렇게
SELECT * FROM Student
UNION
SELECT * FROM Teacher
이 2 일 '작업을 모두 적용할 때 노조 테이블뿐 중복되는 항목이 모두 되돌려줍니다 (어떤 차이가 있는지 열의 값을 연속 2 표). 이렇게
SELECT * FROM Student
UNION ALL
SELECT * FROM Teacher
출력입니다 * ! [입력하십시오. 이미지 여기에 설명을] [4]
Performance:*
반면 'UNION ALL' '연합' 결과 집합을 오름차순으로 정렬됨을 결과 집합을 정렬할지 않습니다.
그 결과 집합을 없앨 수 있도록 '는' 연합 '가지' 에 모든 복제본임을 행뿐만. 반면 'UNION ALL' won& t # 39, 중복 제거, 따라서 '노조의 제공합니다.* 보다는 빠르다
Sql 의 연합 무엇입니까?
두 개 이상의 데이터 세트를 결과 집합을 노조 연산자를 사용할 수 있습니다.
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
중요! 차이점은 Oracle, Mysql: # 39 t1, t2 don& # 39 의 let& 할 말이 별로 없는 복제본임을 그들 사이에 행뿐만 들이 복제본임을 행뿐만 개별. 예: 2017년, 2018년 t2 에서 t1 에 영업
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION ALL
SELECT T2.YEAR, T2.PRODUCT FROM T2
모든 모든 행을 패치합니다 ORACLE 의 연합 (eu) 에서 모두 표. Mysql 같은 발생할 것으로.
SELECT T1.YEAR, T1.PRODUCT FROM T1
UNION
SELECT T2.YEAR, T2.PRODUCT FROM T2
, ORACLE 의 연합 (eu) 에서 모두 t1, t2 없기 때문에 모든 행을 패치합니다 테이블 사이의 값을 복제본임을. 반면 in 는 MySQL 이 결과 세트 안에 있을 수도 있기 때문에 더 적은 행뿐만 t1, t2 복제본임을 행뿐만 테이블 내에서 표!