Aracılığıyla paylaş


EXISTS ile alt sorgular

Ne zaman bir alt sorgu sunulan anahtar sözcüğüyle EXISTS, varlığı test alt sorgu görür.Dış sorgunun where yan tümce tümce tümce alt sorgu tarafından döndürülen satır var olup olmadığını sınar.Alt sorgu hiçbir veri üretmez; Bu true veya false değerini döndürür.

Alt sorgu içinde EXISTS sözdizimi aşağıdaki gibidir:

WHERE [NOT] EXISTS (subquery)

Aşağıdaki sorgu olan tüm ürünleri adlarını bulur Wheels alt kategorisi:

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE EXISTS
    (SELECT * 
     FROM Production.ProductSubcategory
     WHERE ProductSubcategoryID = 
            Production.Product.ProductSubcategoryID
        AND Name = 'Wheels')

Sonuç kümesi buradadır.

Name
--------------------------------------------------
LL Mountain Front Wheel
ML Mountain Front Wheel
HL Mountain Front Wheel
LL Road Front Wheel
ML Road Front Wheel
HL Road Front Wheel
Touring Front Wheel
LL Mountain Rear Wheel
ML Mountain Rear Wheel
HL Mountain Rear Wheel
LL Road Rear Wheel
ML Road Rear Wheel
HL Road Rear Wheel
Touring Rear Wheel

(14 row(s) affected)

Anlamak için sonuçlar Bu sorgulamanın sırayla her ürünün adını düşünün.Bu değer, en az bir satır geri dönmek alt sorgu neden olmaz?Başka bir deyişle, sorgunun doğru değerlendirmek varlığı test neden olmaz?

Aşağıdaki şekillerde EXISTS ile sunulan alt sorgular diğer alt sorgular biraz farklı olduğuna dikkat edin:

  • Anahtar sözcük EXISTS sütun adı tarafından öncesinde, sabit veya diğer ifade.

  • Seçim listesi bir alt sorgu EXISTS ile sunulan bir yıldız işareti (*) hemen her zaman oluşur.Çünkü belirtilen koşulları karşılayan satırları olup olmadığını hemen sınamakta olduğunuz liste sütun adları için bir neden yoktur alt sorgu yok.

EXISTS anahtar sözcüğünü sık sık olduğundan alt sorgular olmadan hiçbir alternatif formulation önemlidir.EXISTS ile oluşturulan bazı sorguları başka bir şekilde ifade edilemeyen olmakla birlikte, çok sayıda sorgu kullanabilirsiniz veya karşılaştırma işleç veya tümünü benzer sonuçlar elde etmek için tarafından değiştirilebilir.

Örneğin, yukarıdaki sorgu kullanarak ifade edilebilir IN:

USE AdventureWorks2008R2;
GO
SELECT Name
FROM Production.Product
WHERE ProductSubcategoryID IN
    (SELECT ProductSubcategoryID
     FROM Production.ProductSubcategory
     WHERE Name = 'Wheels')