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)