Aracılığıyla paylaş


Temelleri alt sorgu

Alt sorgu bir SELECT, INSERT, UPDATE veya DELETE deyim içine veya başka bir alt sorgu içine yuvalanmış bir sorgudur.Bir alt sorgunun herhangi bir ifade izin kullanılır.Bu örnekte, alt sorgu adlı bir sütun ifade olarak kullanılır MaxUnitPrice ' de bir SELECT ifade.

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

Alt sorgu içeren bir deyim, bir dış bir sorgu veya dış seçin da bilinir ancak bir iç sorgunun veya iç seçin, alt sorgu da adlandırılır.

Birçok Transact-SQL alt sorgular içeren ifadeleri birleştirmeler alternatif şeklide. Diğer sorular yalnızca alt sorgular ile çıkan.Içinde Transact-SQL, genellikle performans alt sorgu içeren bir deyim ile başlamıyor semantically eşdeğer sürüm arasındaki fark yoktur. Ancak, birleştirmek varlığı denetlenmeli bazı durumlarda, daha iyi performans sağlar.Aksi halde, çoğaltmaları, eleme emin olmak için dış sorgunun her sonuç için iç içe sorgu işlenmelidir.Bu gibi durumlarda, daha iyi sonuçlar bir birleştirmek yaklaşım getirebilecek.Her iki alt sorgu gösteren bir örnek SELECT ve SELECT aynı sonucu döndüren bir birleştirmek kümesi şudur:

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

/* SELECT statement built using a join that returns
   the same result set. */
SELECT Prd1. Name
FROM AdventureWorks.Production.Product AS Prd1
     JOIN AdventureWorks.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 SELECT sorgusu.

  • A FROM düzenli bir veya daha fazla tablo veya Görünüm adları dahil yan tümce.

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

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

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

Alt sorgu, bir SELECT sorgusu, her zaman ayraç içine.COMPUTE veya FOR BROWSE yan tümcesini içeremez ve bir TOP yan tümce de belirtilirse yalnızca bir ORDER BY yan tümce içerebilir.

Bir alt sorgunun WHERE veya yan tümce dış SELECT, INSERT, UPDATE veya DELETE deyiminin HAVING içinde veya başka bir alt sorgu içinde iç içe kullanılabilir.Sınır kullanılabilir belleği ve diğer ifadelerin sorguda karmaşıklığına bağlı olarak değişir, ancak iç içe geçme 32 düzeye kadar olasıdı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 ifade kullanılabilen herhangi bir alt sorgu görünebilir.

Bir tablo yalnızca bir alt sorgu ve dış sorguda belirirse, o tablo sütunlarından çıktıda (dış sorgu seçme listesinde) bulunamaz.

Genellikle bir alt sorgu içeren bir ifade aşağıdaki biçimlerden birini gerçekleştirin:

  • burada expression [not] İÇİNDE (subquery)

  • burada expression comparison_operator [TÜM | TÜMÜ] (subquery)

  • BURADA [not] BULUNMAKTADIR. (subquery)

Bazı Transact-SQL ifadeleri, alt sorgu, bu bağımsız bir sorgu gibi değerlendirilebilir. 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.Bu:

  • IN ile tanıtılan listeleri çalışan veya karşılaştırma işleç ANY veya ALL tarafından değiştirildi.

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

  • EXISTS varlığı sınamaları kullanılmaya başlandı.