Megosztás a következőn keresztül:


Operátorok beállítása – KIVÉVE és INTERSECT (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-adatbázis a Microsoft Fabricben

Két lekérdezés eredményeinek összehasonlításával különböző sorokat ad vissza.

A KIVÉVE a bal oldali bemeneti lekérdezéstől eltérő sorokat ad vissza, amelyeket nem a megfelelő bemeneti lekérdezés ad ki.

Az INTERSECT különböző sorokat ad vissza, amelyeket a bal és a jobb oldali bemeneti lekérdezések operátora is kimenetként ad vissza.

A EXCEPT vagy AZ INTERSECT elemet használó két lekérdezés eredményhalmazainak kombinálásához az alapvető szabályok a következők:

  • Az oszlopok számának és sorrendjének minden lekérdezésben azonosnak kell lennie.

  • Az adattípusoknak kompatibilisnek kell lenniük.

Transact-SQL szintaxis konvenciók

Syntax

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

Arguments

< > query_specification | ( <query_expression> )
Olyan lekérdezési specifikáció vagy lekérdezési kifejezés, amely egy másik lekérdezési specifikációból vagy lekérdezési kifejezésből származó adatokkal összehasonlítandó adatokat ad vissza. A EXCEPT vagy AZ INTERSECT művelet részét képező oszlopok definícióinak nem kell megegyeznie. Azonban implicit átalakítással összehasonlíthatóaknak kell lenniük. Ha az adattípusok eltérnek, az adattípus-elsőbbség szabályai határozzák meg az összehasonlításhoz futtatott adattípust.

Az eredmény ugyanazokon a szabályokon alapul, amelyek a kifejezések kombinálására vonatkoznak, ha a típusok azonosak, de pontosságuk, skálázásuk vagy hosszuk eltér. További információ: Pontosság, skálázás és hossz (Transact-SQL).

A lekérdezés specifikációja vagy kifejezése nem tud xml-, szöveg-, ntext-, kép- vagy nem kötési CLR-típusú oszlopokat visszaadni, mert ezek az adattípusok nem összehasonlíthatók.

EXCEPT
A KIVÉTEL operátortól balra lévő lekérdezéstől eltérő értékeket ad vissza. Ezek az értékek mindaddig visszaállnak, amíg a megfelelő lekérdezés nem adja vissza ezeket az értékeket.

INTERSECT
Az INTERSECT operátor bal és jobb oldalán lévő lekérdezés által visszaadott különböző értékeket adja vissza.

Remarks

Az összehasonlítható oszlopok adattípusait a EXCEPT vagy AZ INTERSECT operátor bal és jobb oldalán lévő lekérdezések adják vissza. Ezek az adattípusok tartalmazhatnak különböző rendezésű karakteradattípusokat. Ha igen, a szükséges összehasonlítás a rendezési sorrend szabályai szerint fut. Ha nem tudja futtatni ezt az átalakítást, az SQL Server adatbázismotorja hibát ad vissza.

A DISTINCT sorok meghatározásához használt oszlopértékek összehasonlításakor a rendszer két NULL értéket egyenlőnek tekint.

A KIVÉVE és az INTERSECT az eredményhalmaz oszlopneveit adja vissza, amelyek megegyeznek az operátor bal oldalán lévő lekérdezés által visszaadott oszlopnevekkel.

Az ORDER BY záradékokban szereplő oszlopneveknek vagy aliasoknak a bal oldali lekérdezés által visszaadott oszlopnevekre kell hivatkoznia.

A EXCEPT vagy AZ INTERSECT által visszaadott eredményhalmaz bármely oszlopának nullsága megegyezik az operátor bal oldalán lévő lekérdezés által visszaadott megfelelő oszlop nullhatóságával.

Ha a EXCEPT vagy az INTERSECT kifejezés más operátorokkal együtt van használva, akkor a rendszer a következő sorrendben értékeli ki:

  1. Kifejezések zárójelben

  2. Az INTERSECT operátor

  3. A EXCEPT és a UNION kiértékelése balról jobbra a kifejezésben elfoglalt pozíciójuk alapján

A EXCEPT vagy az INTERSECT használatával kétnál több lekérdezést hasonlíthat össze. Ha így tesz, az adattípus-átalakítást két lekérdezés összehasonlításával és a korábban említett kifejezéskiértékelési szabályok követésével határozzuk meg.

A KIVÉVE és az INTERSECT nem használható elosztott particionált nézetdefiníciókban, lekérdezési értesítésekben.

A KIVÉVE és az INTERSECT használható elosztott lekérdezésekben, de csak a helyi kiszolgálón hajtja végre, és nem küldi el a csatolt kiszolgálóra. Így a EXCEPT és az INTERSECT elosztott lekérdezésekben való használata befolyásolhatja a teljesítményt.

A csak gyors előre és statikus kurzorokat akkor használhatja az eredményhalmazban, ha CSAK vagy INTERSECT művelettel használják őket. Billentyűkészlet-vezérelt vagy dinamikus kurzort is használhat a EXCEPT vagy AZ INTERSECT művelettel együtt. Ha így tesz, a művelet eredményhalmazának kurzora statikus kurzorrá alakul.

Ha a EXCEPT művelet az SQL Server Management Studióban a Graphical Showplan funkcióval jelenik meg, a művelet bal oldali anti semi joinként jelenik meg, az INTERSECT művelet pedig bal oldali félillesztésként jelenik meg.

Examples

Az alábbi példák az és INTERSECT az EXCEPT operátorok használatát mutatják be. Az első lekérdezés a tábla összes értékét visszaadja, Production.Product hogy összehasonlíthassa az eredményeket a következővel INTERSECT : és EXCEPT.

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

Az alábbi lekérdezés az operátor bal és jobb oldalán INTERSECT lévő lekérdezés által visszaadott különböző értékeket adja vissza.

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

Az alábbi lekérdezés az operátor bal oldali lekérdezésétől EXCEPT eltérő értékeket ad vissza, amelyek a megfelelő lekérdezésben sem találhatók.

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

Az alábbi lekérdezés az operátor bal oldali lekérdezésétől EXCEPT eltérő értékeket ad vissza, amelyek a megfelelő lekérdezésben sem találhatók. A táblák fordítottak az előző példához képest.

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

Példák: Azure Synapse Analytics and Analytics Platform System (PDW)

Az alábbi példák bemutatják az operátorok és INTERSECT az EXCEPT operátorok használatát. Az első lekérdezés a tábla összes értékét visszaadja, FactInternetSales hogy összehasonlíthassa az eredményeket a következővel INTERSECT : és EXCEPT.

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

Az alábbi lekérdezés az operátor bal és jobb oldalán INTERSECT lévő lekérdezés által visszaadott különböző értékeket adja vissza.

-- 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.)  

Az alábbi lekérdezés az operátor bal oldali lekérdezésétől EXCEPT eltérő értékeket ad vissza, amelyek a megfelelő lekérdezésben sem találhatók.

-- 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.)