Udostępnij za pomocą


Ustawianie operatorów — Z WYJĄTKIEM i INTERSECT (Transact-SQL)

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)Punkt końcowy analizy SQL w usłudze Microsoft FabricHurtownia danych w usłudze Microsoft FabricBaza danych SQL w usłudze Microsoft Fabric

Zwraca odrębne wiersze, porównując wyniki dwóch zapytań.

Funkcja EXCEPT zwraca różne wiersze z lewego zapytania wejściowego, które nie są wyjściowe przez prawe zapytanie wejściowe.

Funkcja INTERSECT zwraca różne wiersze, które są wynikiem zarówno lewego, jak i prawego operatora zapytań wejściowych.

Aby połączyć zestawy wyników dwóch zapytań korzystających z wyjątku lub INTERSECT, podstawowe reguły to:

  • Liczba i kolejność kolumn muszą być takie same we wszystkich zapytaniach.

  • Typy danych muszą być zgodne.

Transact-SQL konwencje składni

Syntax

{ <query_specification> | ( <query_expression> ) }   
{ EXCEPT | INTERSECT }  
{ <query_specification> | ( <query_expression> ) }  

Arguments

< > query_specification | ( <query_expression> )
Jest specyfikacją zapytania lub wyrażeniem zapytania, które zwraca dane do porównania z danymi z innej specyfikacji zapytania lub wyrażenia zapytania. Definicje kolumn, które są częścią operacji Z WYJĄTKIEM lub INTERSECT, nie muszą być takie same. Jednak muszą być porównywalne poprzez niejawną konwersję. Gdy typy danych różnią się, reguły pierwszeństwa typu danych określają typ danych, który jest uruchamiany do porównania.

Wynik jest oparty na tych samych regułach łączenia wyrażeń, gdy typy są takie same, ale różnią się precyzją, skalą lub długością. Aby uzyskać więcej informacji, zobacz Precyzja, Skalowanie i Długość (Transact-SQL).

Specyfikacja kwerendy lub wyrażenie nie mogą zwracać kolumn typu xml, text, ntext, image ani nonbinary CLR zdefiniowanych przez użytkownika, ponieważ te typy danych nie są porównywalne.

EXCEPT
Zwraca wszelkie odrębne wartości z lewej strony zapytania operatora EXCEPT. Te wartości zwracają tak długo, jak długo właściwe zapytanie nie zwraca również tych wartości.

INTERSECT
Zwraca wszelkie odrębne wartości zwracane przez zapytanie po lewej i prawej stronie operatora INTERSECT.

Remarks

Typy danych porównywalnych kolumn są zwracane przez zapytania po lewej i prawej stronie operatorów Z WYJĄTKIEM lub INTERSECT. Te typy danych mogą zawierać typy danych znaków z różnymi sortowaniami. Gdy to zrobią, wymagane porównanie jest uruchamiane zgodnie z regułami pierwszeństwa sortowania. Jeśli nie możesz uruchomić tej konwersji, aparat bazy danych programu SQL Server zwraca błąd.

Podczas porównywania wartości kolumn na potrzeby określania wierszy DISTINCT dwie wartości NULL są traktowane jako równe.

Z WYJĄTKIEM i INTERSECT zwracają nazwy kolumn zestawu wyników, które są takie same jak nazwy kolumn zwracane przez zapytanie po lewej stronie operatora.

Nazwy kolumn lub aliasy w klauzulach ORDER BY muszą odwoływać się do nazw kolumn zwróconych przez zapytanie po lewej stronie.

Dopuszczanie wartości null dowolnej kolumny w zestawie wyników zwracanym przez wyjątek lub INTERSECT jest takie samo jak wartość null odpowiadającej kolumnie zwracanej przez zapytanie po lewej stronie operatora.

Jeśli wyjątek lub INTERSECT jest używany razem z innymi operatorami w wyrażeniu, jest obliczany w kontekście następującego pierwszeństwa:

  1. Wyrażenia w nawiasach

  2. Operator INTERSECT

  3. Z WYJĄTKIEM i UNION obliczone od lewej do prawej na podstawie ich pozycji w wyrażeniu

Możesz użyć funkcji Z WYJĄTKIEM lub INTERSECT, aby porównać więcej niż dwa zestawy zapytań. Po wykonaniu tej czynności konwersja typu danych jest określana przez porównanie dwóch zapytań jednocześnie i zgodnie z wcześniej wymienionymi regułami oceny wyrażeń.

Z WYJĄTKIEM i INTERSECT nie można używać w rozproszonych definicjach widoku partycjonowanego, powiadomieniach o zapytaniach.

Z WYJĄTKIEM i INTERSECT mogą być używane w zapytaniach rozproszonych, ale są wykonywane tylko na serwerze lokalnym i nie są wypychane do połączonego serwera. W związku z tym użycie funkcji EXCEPT i INTERSECT w zapytaniach rozproszonych może mieć wpływ na wydajność.

W zestawie wyników można używać szybkich kursorów tylko do przodu i statycznych, gdy są one używane z operacją Z WYJĄTKIEM lub INTERSECT. Można również użyć kursora dynamicznego lub sterowanego kluczami razem z operacją Z WYJĄTKIEM lub INTERSECT. Gdy to zrobisz, kursor zestawu wyników operacji jest konwertowany na kursor statyczny.

Gdy operacja Z wyjątkiem jest wyświetlana przy użyciu funkcji Graficzne showplan w programie SQL Server Management Studio, operacja jest wyświetlana jako lewe sprzężenia antysemickie, a operacja INTERSECT jest wyświetlana jako lewe sprzężenia częściowe.

Examples

W poniższych przykładach pokazano INTERSECT użycie operatorów i EXCEPT . Pierwsze zapytanie zwraca wszystkie wartości z Production.Product tabeli w celu porównania z wynikami za pomocą INTERSECT wartości i EXCEPT.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.Product ;  
--Result: 504 Rows  

Poniższe zapytanie zwraca wszystkie odrębne wartości zwracane przez zapytanie po lewej i prawej stronie INTERSECT operatora.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.Product  
INTERSECT  
SELECT ProductID   
FROM Production.WorkOrder ;  
--Result: 238 Rows (products that have work orders)  

Poniższe zapytanie zwraca wszystkie odrębne wartości z lewej EXCEPT strony zapytania operatora, które nie zostały również znalezione w prawym zapytaniu.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.Product  
EXCEPT  
SELECT ProductID   
FROM Production.WorkOrder ;  
--Result: 266 Rows (products without work orders)  

Poniższe zapytanie zwraca wszystkie odrębne wartości z lewej EXCEPT strony zapytania operatora, które nie zostały również znalezione w prawym zapytaniu. Tabele są odwracane od poprzedniego przykładu.

-- Uses AdventureWorks  
  
SELECT ProductID   
FROM Production.WorkOrder  
EXCEPT  
SELECT ProductID   
FROM Production.Product ;  
--Result: 0 Rows (work orders without products)  

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

W poniższych przykładach pokazano, jak używać INTERSECT operatorów i EXCEPT . Pierwsze zapytanie zwraca wszystkie wartości z FactInternetSales tabeli w celu porównania z wynikami za pomocą INTERSECT wartości i EXCEPT.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales;  
--Result: 60398 Rows  

Poniższe zapytanie zwraca wszystkie odrębne wartości zwracane przez zapytanie po lewej i prawej stronie INTERSECT operatora.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales    
INTERSECT   
SELECT CustomerKey   
FROM DimCustomer   
WHERE DimCustomer.Gender = 'F'  
ORDER BY CustomerKey;  
--Result: 9133 Rows (Sales to customers that are female.)  

Poniższe zapytanie zwraca wszystkie odrębne wartości z lewej EXCEPT strony zapytania operatora, które nie zostały również znalezione w prawym zapytaniu.

-- Uses AdventureWorks  
  
SELECT CustomerKey   
FROM FactInternetSales    
EXCEPT   
SELECT CustomerKey   
FROM DimCustomer   
WHERE DimCustomer.Gender = 'F'  
ORDER BY CustomerKey;  
--Result: 9351 Rows (Sales to customers that are not female.)