난 항상에 대해 알고 UNION
SQL 연산자하지만 최근이 다른 세트 사업자 있었다 것을 발견 INTERSECT
하고 EXCEPT
. 네 번째 큰 집합 연산자 인 대칭 차이 (예 :의 반대 INTERSECT
) 를 수행하는 연산자를 찾을 수 없습니다 .
다음과 같은 것을 사용하여 원하는 출력을 얻을 수있는 것처럼 보입니다.
SELECT Field FROM A UNION SELECT Field FROM B
EXCEPT
SELECT Field FROM A INTERSECT SELECT Field FROM B
(우선 순위가 있다고 가정) 또는 완전 조인 방지를 수행하여 :
SELECT A.Field, B.Field
FROM A
FULL JOIN B ON B.Id = A.Id
WHERE B.Id IS NULL OR A.Id IS NULL
그러나이 두 가지 모두 특히 다른 세 가지 기본 집합 작업에 비해 집중적 인 쿼리처럼 보입니다. SQL에 대칭적인 차이 연산이 있고 설명서에서 찾을 수 없습니까? 아니면 T-SQL로 구현할 수있는 "정식적인"방법이 있습니까?
3 개의 조인 또는 조인 유사 작업을 수행하는 @ypercube 이것이 전체 조인보다 더 효율적인 이유는 생각할 수 없습니다.
—
usr
@usr 실제로는 3이 아닌 2 개의 조인과 유사한 작업입니다. Union All은 훨씬 적은 비용이 드는 작업입니다.
—
ypercubeᵀᴹ
FULL JOIN
더 효율적일 수 있다는 데 동의합니다 . 테스트하면 어느 것이 가장 좋은지 알 수 있습니다. 물론 각 테이블에서 더 많은 / 다른 열이 필요한 경우 솔루션을 쉽게 확장 할 수 없습니다.
(a EXCEPT b) UNION ALL (b EXCEPT a);
더 효율적일 수 있습니다.