Yuvalanmış alt sorguların üst sorguda kullanılan diğer takma adları kullanması tamamdır, ancak kodu okuyan biri için biraz kafa karıştırıcı olabilir. Yuvalanmış bir alt sorgudaki diğer adların ad alanı ebeveyn üzerindeki ad alanından ayrıdır. Örneğin, aşağıdaki sorguda b
, b
içinde kullanılan bir diğer adı da içeren iç içe bir alt sorgu var . Bu, programlayıcı için potansiyel olarak kafa karıştırıcı olabilir, ancak DBMS motoruyla iyi olurdu:
select a.foo
,b.bar
,b.BarCount
from (select b.bar
,count (*) as BarCount
from BarTable b
join OtherTable o
on b.OtherTableID = o.OtherTableID
group by b.bar) b
join Foobar a
on a.bar = b.bar
İlişkili bir alt sorguda ebeveynin diğer adına erişiminiz vardır, bu nedenle diğer adın üst sorguda ve ilişkili alt sorguda benzersiz olması gerekir. Aşağıdaki gibi bir ilişkili alt sorgu alırsak, ana sorgu ile ilişkili alt sorgu arasında paylaşılan tek, genel bir ad alanımız vardır:
select a.foo
,b.bar
from Foobar a
join Bar b
on b.FooBarID = a.FooBarID
where not exists
(select 1
from Bar b2
where b2.BarCategoryID = b.BarCategoryID
and b2.BarDate > b.BarDate)
Korelasyonlu alt sorgu 1 gibi bir birleşme işlemine katılmadığından bir diğer adı yoktur . Başvurular b
ve hem de alt sorgu b2
için bar
kullanılabilir, çünkü ilişkili alt sorgular üst ad ile takma adlar için ad alanlarını paylaşır.
1 Belirtilen asıl işlem, iç içe geçmiş bir alt sorguya karşı birleştirme değil, ilişkili bir alt sorgu olmasına rağmen, en iyileştiricinin sahnelerin arkasındaki plandaki birleştirme işleçlerini kullanmayı seçebileceğini unutmayın.