Các truy vấn con lồng nhau có thể sử dụng cùng các bí danh như được sử dụng trong truy vấn cha, mặc dù có thể hơi khó hiểu khi ai đó đọc mã. Không gian tên cho các bí danh trên một truy vấn con lồng nhau tách biệt với không gian tên trên cha mẹ. Ví dụ: truy vấn bên dưới có một truy vấn con lồng nhau b
cũng có một bí danh b
được sử dụng trong nó. Điều này có thể gây nhầm lẫn cho lập trình viên nhưng tốt với công cụ DBMS:
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
Trên truy vấn con tương quan, bạn có quyền truy cập vào các bí danh của cha mẹ, vì vậy các bí danh phải là duy nhất trong truy vấn cha và truy vấn con tương quan. Nếu chúng ta có một truy vấn con tương quan, chẳng hạn như bên dưới, chúng ta có một không gian tên toàn cục duy nhất được chia sẻ giữa truy vấn cha và truy vấn con tương quan:
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)
Subquery tương quan không có một bí danh vì nó không tham gia vào một tham gia như vậy 1 . Các tham chiếu b
và b2
for bar
đều có sẵn cho truy vấn con khi các truy vấn con tương quan chia sẻ không gian tên của chúng cho các bí danh với cha mẹ.
1 Lưu ý rằng trình tối ưu hóa có thể chọn sử dụng các toán tử nối trong kế hoạch phía sau hậu trường, mặc dù thao tác thực tế được chỉ định là truy vấn con tương quan và không phải là nối với truy vấn con lồng nhau.