의:그렉 Robidoux|업데이트:2019-10-29|Comments(4)|련: 1 | 2 | 3 | 4 | 5 | 더 많은>가입 테이블
문제
때로는 거기에 필요한 데이터를 결합하에서 여러 테이블이나 보기 intoone 포괄합니다. 이 될 수 있는 테이블과 유사한 데이터에 samedatabase 또는 아마가 결합해야와 유사한 데이터를 데이터베이스에서 또는 evenacross 서버입니다.
이 팁에서는 UNION vs.UNIONALL 명령을 사용하는 방법과 다른 방법을 살펴 보겠습니다.,
Solution
SQL Server 에서는 UNION 또는 UNION ALL 연산자를 사용하여 여러 데이터 세트를 하나의 comprehensivedataset 로 결합하는 기능이 있습니다. 큰 차이가 있 inhow 이러한 작업뿐만 아니라 최종 결과는 세트를 반환되지만,기본적으로 thesecommands 참여 여러 데이터세트가 있는 유사한 구조를 하나로 결합합니다.
UNION
이 작업에 참여 할 수 있습니다 multipledatasets 으로 하나의 데이터 집합을 제거 중복하는 존재합니다. 기본적으로그것은 결과 집합의 모든 열에 걸쳐 별개의 작업을 수행하는 것입니다.,
UNION ALL
이 작업을 다시할 수 있습 joinmultiple 데이터 집합으로 하나의 데이터 집합,그러나 그것을 제거하지 않은 모든 중복의 행이 있습니다.지 않기 때문에 중복을 제거 행이 프로세스가 더 빨리,하지만 당 youdon 하고 중복된 레코드를 사용해야 합 UNION 연산자를 대신 합니다.,서 쿼리를해야합 같은 수의 열
팁:없는 경우 정확한 동일한 열에서 쿼리를 사용하는 기본값 또는 NULL 값이 같다.
SELECT firstName, lastName, company FROM businessContactsUNIONSELECT firstName, lastName, NULL FROM nonBusinessContactsorSELECT firstName, lastName, createDate FROM businessContactsUNION ALLSELECT firstName, lastName, getdate() FROM nonBusinessContacts
유니온 대, 연합 모든 예제
이러한 명령이 어떻게 작동하고 어떻게 다른지에 대한 몇 가지 간단한 예를 살펴 보겠습니다. 당신이 볼 수로 최종 결과 다를 것입니다,하지만 someinteresting 정보는 방법에 SQL 실제로 서버 프로세스를 완료.
UNION ALL
이 첫 번째 예에서는 AdventureWorks 데이터베이스의 Employeetable 에 대해 UNION ALL 연산자를 사용하고 있습니다. 이것은 아마도 당신이 할 일이 아니지만이 두 연산자의 차이점을 설명하는 데 도움이됩니다.
테이블 dbo 에 290 개의 행이 있습니다.직원.,
SELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.EmployeeUNION ALLSELECT * FROM HumanResources.Employee
이 쿼리가 실행하여 결과를 설정하는 870 행이 있습니다. 이것은 반환 된 290 행입니다 3 번. 데이터는 다른 데이터 세트 위에 하나의 데이터 세트 만 함께 넣습니다.이 쿼리의 실행 계획은 다음과 같습니다. 우리는 테이블이 queried3 번이고 SQL Server 가 모든 데이터를 연결하기 위해 연결 단계를 수행했음을 알 수 있습니다.
UNION
이 다음 예제는 우리가 사용하는 연산자에 대한 직원 tableagain 에서 흐 데이터베이스입니다.,
SELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.EmployeeUNIONSELECT * FROM HumanResources.Employee
이 쿼리가 실행하여 결과를 설정하는 290 개의 행이 있습니다. 비록 우리가 결합 thedata 세 번 조합 연산자 중복 레코드를 제거 하 고 thereforereturns 그냥 290 독특한 행.이 쿼리의 실행 계획은 다음과 같습니다. 우리가 볼 수 있는 SQL 서버는 먼저 queried2 의 테이블,그 Merge Join 을 사용하기 위해서 작업을 결합하는 첫번째 두 tablesand 그 때 다른 병합을 함께 참가를 쿼리하는 타이 테이블에서 쿼리를 실행합니다.,그래서 우리가 볼 수 있었다 훨씬 더 많은 일을 수행하는 이 결과와 비교합니다.
유니온 대 UNION 모두 보기종에서 클러스터 인덱스 열
만일 우리가 이것을 한 단계 더 나아가지 종류의 데이터를 사용하 ClusteredIndex 열 우리는 이러한 실행 계획입니다. 이로부터 우리는 것을 볼 수 있습 executionplan 는 SQL 서버가 사용하여 동일한 각각의 이러한 작업도 thoughthe 최종 결정은 여전히 포함 870 행한 모든 290rowsfor 합니다.,
연합의 모든 실행 계획으로 정렬된 인덱스 열
연합의 실행 계획으로 정렬된 인덱스 열
유니온 대 UNION 모두 보기종에서 비인덱스 열
여기에 또 다른 예는 같은 일이지만,이렇게 시간에 대해 정렬하는 곧 인덱스 열이 있습니다. 당신이 볼 수 있듯 실행 계획은 다시 동일한 이 두 절은 다 쿼리,그러나 이번에 사용하는 대신 MERGE JOIN 을 사용하기 위해서는,연결 및 SORToperations 사용됩니다.,
- 살펴 이러한 다른 팁할 수 있는 유용한 사용에 대한 연산자 연합
- 비교해 여러 데이터 집합 INTERSECTand 를 제외하고 운영
- SQL 서버의 네 가지 부분으로 구성된 이름
- 비교 SQL Server 결과를 두 개의 쿼리를 사용하여 조합
최근 업데이트: 2019-10-29
저자에 관하여
내 모든 팁보기
Leave a Reply