DIŞINDA ve INTERSECT (Transact-sql)
İki sorgu sonuçlarını karşılaştırarak farklı değerler döndürür.
Döner dışında sol farklı değerler bu sorgu da sağ sorgu üzerinde bulunamadı.
INTERSECT sol ve sağ tarafında INTERSECT işlenen her iki sorgu tarafından döndürülen farklı değerler döndürür.
İki sonuç kümeleri birleştirme temel kuralları dışında kullanan sorgular veya INTERSECT şunlardır:
Numarası ve sütunların sırasını tüm sorgular aynı olmalıdır.
Veri türleri uyumlu olmalıdır.
Transact-SQL Sözdizim Kuralları
Sözdizimi
{ <query_specification> | ( <query_expression> ) }
{ EXCEPT | INTERSECT }
{ <query_specification> | ( <query_expression> ) }
Bağımsız değişkenler
<query_specification> | ( <query_expression> )
Bir sorgu belirtimi veya başka bir sorgu belirtimi veya sorgu ifadesi alınan verilerle karşılaştırılabilir veri döndüren sorgu ifadesi olduğunu. Bir dışında bir parçası veya INTERSECT işlemi sütun tanımları aynı olması gerekmez, ancak örtük dönüştürme karşılaştırılabilir olması gerekir. Veri türleri farklıysa, karşılaştırma yapmak ve sonuçları belirlenen dönmek için kullanılan bir tür kuralları temel veri türü önceliği.Aynı ama duyarlık, ölçek veya uzunluğu farklı türleri vardır, sonuç ifadeler birleştirme aynı kurallara göre belirlenir. Daha fazla bilgi için, bkz. Duyarlık, ölçek ve uzunluk (Transact-sql).
İfade veya sorgu belirtimi döndüremez xml, text, ntext, image, veya nonbinary clr kullanıcı tanımlı sütunları çünkü bu veri türleri karşılaştırılabilir değildir.
HARİÇ
Ayrı bir değerler sorgudan da sağ sorgudan döndürülen değil except işlenen solundaki döndürür.KESİŞTİR
Sol ve sağ tarafında INTERSECT işlenen her iki sorgu tarafından döndürülen farklı değerler döndürür.
Açıklamalar
Veri türleri benzer sütun sola sorgu tarafından döndürülen ve DIŞINDAKİLER sağında veya INTERSECT işlenen olan karakter veri türleri farklı alfabe ile gerekli karşılaştırma kurallarına göre gerçekleştirilir harmanlama önceliği. Bu dönüştürme gerçekleştirilemiyor, SQL Server Veritabanı Altyapısıhata veriyor.
Ayrı değerleri belirlemek için satır karşılaştırdığınızda, iki null değerleri eşit kabul edilir.
except tarafından döndürülen sonuç kümesi sütun adlarını veya INTERSECT işlenen solundaki sorgu tarafından döndürülen alanındakiyle aynı adları.
Sol taraftaki sorgu tarafından döndürülen sütun adları, sütun adları veya order by yan tümceleri diğer adlarda başvuru gerekir.
Herhangi bir sütun sonuç nullability except tarafından döndürülen ayarlamak veya INTERSECT işlenen solundaki sorgu tarafından döndürülen karşılık gelen sütun nullability ile aynı şeydir.
Eğer dışında veya INTERSECT bir ifadede diğer operatörleri ile birlikte kullanıldığında, aşağıdaki öncelik kapsamında değerlendirilir:
Parantez içindeki ifadeler
INTERSECT işlenen
DIŞINDA ve UNION soldan sağa ifadedeki konumlarına göre değerlendirilir
Eğer dışında veya INTERSECT sorguları ikiden fazla kümeleri karşılaştırmak için kullanılan, bir defada ve ifade değerlendirme yukarıda belirtilen kuralları aşağıdaki iki sorgu karşılaştırarak veri türü dönüştürme belirlenir.
DIŞINDA ve INTERSECT dağıtılmış Bölümlenmiş görünümün tanımları, sorgu bildirimleri kullanılır.
DIŞINDA ve INTERSECT kullanılabilir dağıtılmış sorgular, ancak vardır yalnızca yerel sunucuda çalıştırılan ve bağlantılı sunucuya itti değil. Bu nedenle, kullanma dışında ve içindeki INTERSECT dağıtılmış sorguları performansını etkileyebilir.
Hızlı yalnızca ileri ve statik imleçler, onlar bir except ile kullanılan veya INTERSECT işlemi ayarlamak sonuç tam olarak desteklenir. Eğer bir anahtar kümesi kullanımlı veya dinamik imleç bir except ile birlikte kullanılan veya INTERSECT işlemi, işlem sonuç kümesi imleç bir statik imleç dönüştürülür.
except işlemi görüntülendiğinde grafik Showplan özelliği kullanılarak SQL Server Management Studio, işlem olarak görünür bir sol anti noktalı katıl, INTERSECT işlemi görünür bir Sol noktalı katıl.
Örnekler
Aşağıdaki örnekler kullanarak INTERSECTve EXCEPTişlenen. İlk sorgu döndürür tüm değerleri Production.Producttablo karşılaştırma sonuçları için INTERSECTve EXCEPT.
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.Product ;
--Result: 504 Rows
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.Product ;
--Result: 504 Rows
Aşağıdaki sorgu, sol ve sağ tarafında her iki sorgu tarafından döndürülen farklı değerler döndürür INTERSECTişleneni.
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.Product
INTERSECT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
Aşağıdaki sorgu ayrı bir değerler sorgudan soluna döner EXCEPTde sağ sorgu üzerinde bulunmayan işleneni.
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.Product
EXCEPT
SELECT ProductID
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
Aşağıdaki sorgu ayrı bir değerler sorgudan soluna döner EXCEPTde sağ sorgu üzerinde bulunmayan işleneni. Tabloları önceki örnekten geri alınır.
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.WorkOrder
EXCEPT
SELECT ProductID
FROM Production.Product ;
--Result: 0 Rows (work orders without products)
USE AdventureWorks2012;
GO
SELECT ProductID
FROM Production.WorkOrder
EXCEPT
SELECT ProductID
FROM Production.Product ;
--Result: 0 Rows (work orders without products)