Udostępnij za pośrednictwem


Performing Semi-Joins with EXCEPT and INTERSECT

A semi-łączyć zwracająca wiersze z pierwszej dane wejściowe, jeżeli istnieje co najmniej jeden zgodny wiersz w drugim danych wejściowych.An anti-łączyć zwracająca wiersze z pierwszej dane wejściowe, jeśli nie ma żadnych zgodnych wierszy w drugim dane wejściowe.Za pomocą EXCEPT i przecinają się operatorów do wykonywania semi-joins i anti-joins.Te operatory pozwalają porównać wyniki dwóch lub więcej instrukcji SELECT i zwraca różne wartości.EXCEPT operator zwraca różne wartości z kwerendy po lewej stronie operatora EXCEPT, które nie są również zwracane przez kwerendy po prawej stronie.PRZETNIJ zwraca różne wartości zwracanych przez kwerendę zarówno po lewej stronie i po prawej stronie operator PRZETNIJ.Zestaw wyników, które są porównywane za pomocą z wyjątkiem lub przecinają się muszą mieć taką samą strukturę.Muszą mieć taką samą liczbę kolumn, a odpowiadające im kolumn zestaw wyników musi mieć typ danych zgodny.Aby uzyskać więcej informacji zobaczEXCEPT and INTERSECT (Transact-SQL).

Należy wziąć pod uwagę tabel TableA, TableB, and TableC z następującymi danymi w ich odpowiednich int columns Col1.

TableA (col1 int)

TableB (col1 int)

TableC (col1 int)

WARTOŚCI NULL

WARTOŚCI NULL

2

WARTOŚCI NULL

1

2

WARTOŚCI NULL

3

2

1

4

4

2

4

4

2

2

3

4

4

Z korzystanie z wyjątkiem, poniższa kwerenda zwraca różne wartości z kwerendy po lewej stronie operatora EXCEPT, które nie są także znaleźć w prawej kwerendy.

SELECT * FROM TableA EXCEPT SELECT * FROM TableB

Here is the result set.

Col1       
----------- 
2

(1 row(s) affected)

Za pomocą PRZETNIJ, ta kwerenda zwraca różne wartości zwracanych przez kwerendę zarówno po lewej stronie i po prawej stronie operator PRZETNIJ.

SELECT * FROM TableA INTERSECT SELECT * FROM TableB

Here is the result set.

Col1       
----------- 
NULL
1
3
4

(4 row(s) affected)

Operator PRZETNIJ ma pierwszeństwo przed EXCEPT.Na przykład poniższa kwerenda używa zarówno operatorów:

SELECT * FROM TableA EXCEPT SELECT * FROM TableB INTERSECT SELECT * FROM TableC

Here is the result set.

Col1       
----------- 
NULL
1
2
3

(4 row(s) affected)