Aracılığıyla paylaş


Alt sorgusuyla temelleri

Bir alt sorgunun select, INSERT, update veya delete deyim içine veya başka bir alt sorgu içinde iç içe bir sorgudur.A alt sorgu bir ifade izin verilir baka bir yerde kullanılmamalıdır.Bu örnekte, alt sorgu adlı bir sütun deyim kullanılan MaxUnitPrice , bir SELECT deyim.

USE AdventureWorks2008R2;
GO
SELECT Ord.SalesOrderID, Ord.OrderDate,
    (SELECT MAX(OrdDet.UnitPrice)
     FROM AdventureWorks.Sales.SalesOrderDetail AS OrdDet
     WHERE Ord.SalesOrderID = OrdDet.SalesOrderID) AS MaxUnitPrice
FROM AdventureWorks2008R2.Sales.SalesOrderHeader AS Ord

Alt sorgu içeren bir deyim de bir dış sorgu veya dış select hedeflemeyen bir alt sorgu bir iç sorgunun ya da iç select denilen.

Pek çok Transact-SQL deyimleri alt sorgular dahil alternatif olarak ifade olarak birleşimler.Diğer sorular, yalnızca alt sorgular ile çıkan.De Transact-SQL, genellikle bir alt sorgu içeren bir deyim gönderilmesinin eşdeğer bir sürüm mü arasındaki performans fark yokturdeğil. Ancak, varlığı yere iade edilmesi gerekir bazı durumlarda birleştirmek daha iyi performans sağlar.Aksi halde, dış sorgu yinelemeleri eleme emin olmak için her bir sonuç için iç içe sorgu işlenmelidir.Bu gibi durumlarda bir birleştirmek yaklaşımı daha iyi sonuçlar verir.Her ikisi de gösteren bir örnek şudur bir alt sorgu seçin ve bir birleştirmek aynı dönmek seçin sonuç:

/* SELECT statement built using a subquery. */
SELECT Name
FROM AdventureWorks2008R2.Production.Product
WHERE ListPrice =
    (SELECT ListPrice
     FROM AdventureWorks2008R2.Production.Product
     WHERE Name = 'Chainring Bolts' );

/* SELECT statement built using a join that returns
   the same result set. */
SELECT Prd1. Name
FROM AdventureWorks2008R2.Production.Product AS Prd1
     JOIN AdventureWorks2008R2.Production.Product AS Prd2
       ON (Prd1.ListPrice = Prd2.ListPrice)
WHERE Prd2. Name = 'Chainring Bolts';

Dış deyim içinde iç içe geçmiş alt sorgu aşağıdaki bileşenleri içerir:

  • Normal seçim listesi bileşenleri de dahil olmak üzere normal seçme sorgusu.

  • A normal bir veya daha fazla tablo veya Görünüm adları da dahil olmak üzere yan tümce tümce tümce.

  • Bir isteğe bağlı where yan tümce tümce tümce.

  • Bir isteğe bağlı group by yan tümce tümce tümce.

  • Bir isteğe bağlı HAVING yan tümce tümce tümce.

SEÇME sorgusu, bir alt sorgu her zaman parantez içinde.compute veya göz yan tümce tümce tümcesini içeremez ve ayrıca bir top yan tümce tümce tümce belirtildiğinde order by yan tümce tümce tümce yalnızca içerebilir.

Bir alt sorgunun where veya HAVING yan tümce tümce tümcesinde dış select, INSERT, update veya delete deyim içine veya başka bir alt sorgu içinde iç içe olabilir.Sınır kullanılabilir bellek ve diğer sorgu ifadelerde karmaşıklığına bağlı olarak değişir, ancak iç içe 32 düzeye kadar mümkündür.Tek tek sorguların en fazla 32 düzeye iç içe geçmiş desteklemiyor olabilir.Tek bir değer döndürürse bir alt sorgu bir ifade kullanılabilir, herhangi bir yerde görünebilir.

Bir tablo yalnızca bir alt sorgu ve değil dış sorgu görünüyorsa, bu tablodaki sütunları çıkış (dış sorgu seçim listesi) eklenemez.

Genellikle bir alt sorgu içeren ifadeleri bu biçimlerden birini gerçekleştirin:

  • WHERE expression [NOT] IN (subquery)

  • Burada expression comparison_operator [any | ALL] (subquery)

  • [not] EXISTS YERLERDE (subquery))

Bazı Transact-SQL ifadeleri, alt sorgu değerlendirilmesi gibi onu olan bağımsız bir sorgu.Conceptually, the subquery results are substituted into the outer query (although this is not necessarily how Microsoft SQL Server actually processes Transact-SQL statements with subqueries).

Alt sorgular üç temel türü vardır.Bunlar:

  • IN ile sunulan listeleri üzerinde çalışmak veya bir karşılaştırma işleç veya tümünü tarafından değiştirilebilir.

  • Bir değişmemiş karşılaştırma işleç ile tanıtılan ve tek bir değer döndürmesi gerekir.

  • Varlığı sınamaları EXISTS ile sunulan.