Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrátí jedinečné řádky porovnáním výsledků dvou dotazů.
KROMĚ vrátí odlišné řádky z levého vstupního dotazu, které nejsou výstupem správného vstupního dotazu.
Funkce INTERSECT vrátí jedinečné řádky, které jsou výstupem operátoru levých i pravých vstupních dotazů.
Pokud chcete zkombinovat sady výsledků dvou dotazů, které používají KROMĚ nebo INTERSECT, jsou základní pravidla:
Číslo a pořadí sloupců musí být ve všech dotazech stejné.
Datové typy musí být kompatibilní.
Syntax
{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }
Arguments
<
> query_specification | ( <query_expression> )
Je specifikace dotazu nebo výraz dotazu, který vrací data, která se mají porovnat s daty z jiné specifikace dotazu nebo výrazu dotazu. Definice sloupců, které jsou součástí operace EXCEPT nebo INTERSECT, nemusí být stejné. Musí však být srovnatelné prostřednictvím implicitního převodu. Pokud se datové typy liší, pravidla pro prioritu datového typu určují datový typ, který se spustí pro porovnání.
Výsledek je založený na stejných pravidlech pro kombinování výrazů, pokud jsou typy stejné, ale liší se v přesnosti, stupnici nebo délce. Další informace naleznete v tématu Přesnost, Měřítko a Délka (Transact-SQL).
Specifikace dotazu nebo výraz nemůžou vracet sloupce typu definované uživatelem xml, text, ntext, obrázek nebo nebinární typ CLR, protože tyto datové typy nejsou srovnatelné.
EXCEPT
Vrátí všechny odlišné hodnoty z dotazu nalevo od operátoru EXCEPT. Tyto hodnoty se vrátí tak dlouho, dokud správný dotaz nevrací tyto hodnoty.
INTERSECT
Vrátí všechny jedinečné hodnoty vrácené dotazem na levé i pravé straně operátoru INTERSECT.
Remarks
Datové typy srovnatelných sloupců vrací dotazy vlevo a vpravo od operátorů EXCEPT nebo INTERSECT. Tyto datové typy mohou obsahovat datové typy znaků s různými kolacemi. Když to uděláte, spustí se požadované porovnání podle pravidel priority kolace. Pokud tento převod nemůžete spustit, databázový stroj SQL Serveru vrátí chybu.
Při porovnávání hodnot sloupců pro určení řádků DISTINCT se považují dvě hodnoty NULL za stejné.
KROMĚ a INTERSECT vrátí názvy sloupců sady výsledků, které jsou stejné jako názvy sloupců, které dotaz na levé straně operátoru vrátí.
Názvy sloupců nebo aliasy v klauzulích ORDER BY musí odkazovat na názvy sloupců vrácené levým dotazem.
Nulová hodnota libovolného sloupce v sadě výsledků vrácených parametrem EXCEPT nebo INTERSECT je stejná jako nulová hodnota odpovídajícího sloupce vráceného dotazem na levé straně operátoru.
Pokud se funkce EXCEPT nebo INTERSECT používá společně s jinými operátory ve výrazu, vyhodnotí se v kontextu následující priority:
Výrazy v závorkách
Operátor INTERSECT
KROMĚ A UNION vyhodnocené zleva doprava na základě jejich pozice ve výrazu
K porovnání více než dvou sad dotazů můžete použít funkci EXCEPT nebo INTERSECT. Když to uděláte, převod datového typu se určí porovnáním dvou dotazů najednou a podle dříve zmíněných pravidel vyhodnocení výrazu.
S VÝJIMKOU a INTERSECT nelze použít v distribuovaných definicích rozděleného zobrazení, oznámení dotazu.
KROMĚ a INTERSECT lze použít v distribuovaných dotazech, ale spouští se pouze na místním serveru a ne nasdílené na odkazovaný server. Použití funkce EXCEPT a INTERSECT v distribuovaných dotazech může mít vliv na výkon.
Pokud se používají s operací EXCEPT nebo INTERSECT, můžete v sadě výsledků použít rychlé kurzory pouze vpřed a statické kurzory. Můžete také použít klávesovou sadu řízenou nebo dynamickou kurzor společně s operací EXCEPT nebo INTERSECT. Když to uděláte, kurzor sady výsledků operace se převede na statický kurzor.
Pokud je operace EXCEPT zobrazena pomocí grafické showplan funkce v APLIKACI SQL Server Management Studio, zobrazí se operace jako levý antimimi spojení a operace INTERSECT se zobrazí jako levé středník spojení.
Examples
Následující příklady ukazují použití INTERSECT operátorů a EXCEPT operátorů. První dotaz vrátí všechny hodnoty z Production.Product tabulky pro porovnání s výsledky a INTERSECTEXCEPT.
-- Uses AdventureWorks
SELECT ProductID
FROM Production.Product ;
--Result: 504 Rows
Následující dotaz vrátí všechny jedinečné hodnoty, které vrací dotaz na levé i pravé straně operátoru INTERSECT .
-- Uses AdventureWorks
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
Následující dotaz vrátí všechny odlišné hodnoty z levého dotazu operátoru EXCEPT , které nejsou nalezeny také v pravém dotazu.
-- Uses AdventureWorks
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
Následující dotaz vrátí všechny odlišné hodnoty z levého dotazu operátoru EXCEPT , které nejsou nalezeny také v pravém dotazu. Tabulky jsou obrácené z předchozího příkladu.
-- Uses AdventureWorks
SELECT ProductID
FROM Production.WorkOrder
EXCEPT
SELECT ProductID
FROM Production.Product ;
--Result: 0 Rows (work orders without products)
Příklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
Následující příklady ukazují, jak používat operátory INTERSECT a EXCEPT operátory. První dotaz vrátí všechny hodnoty z FactInternetSales tabulky pro porovnání s výsledky a INTERSECTEXCEPT.
-- Uses AdventureWorks
SELECT CustomerKey
FROM FactInternetSales;
--Result: 60398 Rows
Následující dotaz vrátí všechny jedinečné hodnoty, které vrací dotaz na levé i pravé straně operátoru 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.)
Následující dotaz vrátí všechny odlišné hodnoty z levého dotazu operátoru EXCEPT , které nejsou nalezeny také v pravém dotazu.
-- 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.)