Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Förhandsversion av Microsoft Fabric
Returnerar distinkta rader genom att jämföra resultatet av två frågor.
EXCEPT returnerar distinkta rader från den vänstra indatafrågan som inte matas ut av den högra indatafrågan.
INTERSECT returnerar distinkta rader som matas ut av både den vänstra och höger indatafrågor operatorn.
Om du vill kombinera resultatuppsättningarna för två frågor som använder EXCEPT eller INTERSECT är de grundläggande reglerna:
Antalet och ordningen på kolumnerna måste vara samma i alla frågor.
Datatyperna måste vara kompatibla.
Transact-SQL syntaxkonventioner
Syntax
{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }
Arguments
<
> query_specification | ( <query_expression> )
Är en frågespecifikation eller ett frågeuttryck som returnerar data som ska jämföras med data från en annan frågespecifikation eller ett frågeuttryck. Definitionerna av kolumnerna som ingår i en EXCEPT- eller INTERSECT-åtgärd behöver inte vara desamma. Men de måste vara jämförbara genom implicit konvertering. När datatyperna skiljer sig åt avgör reglerna för datatypprioritet den datatyp som körs för jämförelse.
Resultatet baseras på samma regler för att kombinera uttryck när typerna är samma men skiljer sig i precision, skala eller längd. Mer information finns i Precision, Skala och Längd (Transact-SQL).
Frågespecifikationen eller uttrycket kan inte returnera kolumner av typen xml, text, ntext, bild eller icke-binär CLR-användardefinierad typ eftersom dessa datatyper inte är jämförbara.
EXCEPT
Returnerar eventuella distinkta värden från frågan till vänster om EXCEPT-operatorn. Dessa värden returnerar så länge rätt fråga inte returnerar dessa värden också.
INTERSECT
Returnerar alla distinkta värden som returneras av både frågan till vänster och höger i INTERSECT-operatorn.
Remarks
Datatyperna för jämförbara kolumner returneras av frågorna till vänster och höger om OPERATORERNA EXCEPT eller INTERSECT. Dessa datatyper kan innehålla teckendatatyper med olika sortering. När de gör det körs den obligatoriska jämförelsen enligt reglerna för sorteringsprioritet. Om du inte kan köra den här konverteringen returnerar SQL Server Database Engine ett fel.
När du jämför kolumnvärden för att fastställa DISTINCT-rader anses två NULL-värden vara lika.
EXCEPT och INTERSECT returnerar resultatuppsättningens kolumnnamn som är samma som kolumnnamnen som frågan på operatorns vänstra sida returnerar.
Kolumnnamn eller alias i ORDER BY-satser måste referera till kolumnnamn som returneras av den vänstra frågan.
Nullbarheten för en kolumn i resultatuppsättningen som returneras av EXCEPT eller INTERSECT är samma som nullbarheten för motsvarande kolumn som returneras av frågan på operatorns vänstra sida.
Om EXCEPT eller INTERSECT används tillsammans med andra operatorer i ett uttryck utvärderas det i samband med följande prioritet:
Uttryck inom parenteser
INTERSECT-operatorn
EXCEPT och UNION utvärderas från vänster till höger baserat på deras position i uttrycket
Du kan använda EXCEPT eller INTERSECT för att jämföra fler än två uppsättningar frågor. När du gör det bestäms datatypskonvertering genom att jämföra två frågor i taget och följa de tidigare nämnda reglerna för uttrycksutvärdering.
EXCEPT och INTERSECT kan inte användas i distribuerade partitionerade vydefinitioner, frågemeddelanden.
EXCEPT och INTERSECT kan användas i distribuerade frågor, men körs bara på den lokala servern och skickas inte till den länkade servern. Därför kan användning av EXCEPT och INTERSECT i distribuerade frågor påverka prestanda.
Du kan använda snabb framåtriktade och statiska markörer i resultatuppsättningen när de används med en EXCEPT- eller INTERSECT-åtgärd. Du kan också använda en tangentuppsättningsdriven eller dynamisk markör tillsammans med en EXCEPT- eller INTERSECT-åtgärd. När du gör det konverteras markören för åtgärdsresultatuppsättningen till en statisk markör.
När en EXCEPT-åtgärd visas med funktionen Grafisk showplan i SQL Server Management Studio visas åtgärden som en vänster anti-semikoppling och en INTERSECT-åtgärd visas som en vänster halvkoppling.
Examples
Följande exempel visar hur du använder operatorerna INTERSECT och EXCEPT . Den första frågan returnerar alla värden från Production.Product tabellen för jämförelse med resultatet med INTERSECT och EXCEPT.
-- Uses AdventureWorks
SELECT ProductID
FROM Production.Product ;
--Result: 504 Rows
Följande fråga returnerar alla distinkta värden som returneras av både frågan till vänster och höger i operatorn INTERSECT .
-- Uses AdventureWorks
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
Följande fråga returnerar eventuella distinkta värden från frågan till vänster om operatorn EXCEPT som inte också hittas i den högra frågan.
-- Uses AdventureWorks
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
Följande fråga returnerar eventuella distinkta värden från frågan till vänster om operatorn EXCEPT som inte också hittas i den högra frågan. Tabellerna är omvända från föregående exempel.
-- Uses AdventureWorks
SELECT ProductID
FROM Production.WorkOrder
EXCEPT
SELECT ProductID
FROM Production.Product ;
--Result: 0 Rows (work orders without products)
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
Följande exempel visar hur du använder operatorerna INTERSECT och EXCEPT . Den första frågan returnerar alla värden från FactInternetSales tabellen för jämförelse med resultatet med INTERSECT och EXCEPT.
-- Uses AdventureWorks
SELECT CustomerKey
FROM FactInternetSales;
--Result: 60398 Rows
Följande fråga returnerar alla distinkta värden som returneras av både frågan till vänster och höger i operatorn INTERSECT .
-- 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.)
Följande fråga returnerar eventuella distinkta värden från frågan till vänster om operatorn EXCEPT som inte också hittas i den högra frågan.
-- 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.)