Thứ tự bảng trong Tham gia truy vấn


7

Nếu tôi nói:

Table1 left join Table2

nó có giống như nói không?:

Table2 right join Table1

Nói cách khác, tôi có nên mong đợi nhận được kết quả tương tự từ 2 truy vấn giống nhau trong đó điều duy nhất được thay đổi là bảng nào được viết trước và liệu sử dụng phép nối trái hay phải (theo cùng một mẫu tôi đã mô tả ở trên?)


Đầu ra sẽ giống nhau và thậm chí kế hoạch truy vấn cũng giống nhau. (Trừ khi bị ghi đè, trình tối ưu hóa truy vấn sẽ luôn xác định thứ tự tham gia thực tế, bất kể bạn chỉ định các bảng theo thứ tự nào.)
Nick Chammas

Câu trả lời:


8

Vâng, kết quả sẽ giống nhau. Hãy xem điều này như một ví dụ:

if exists(select * from sys.tables where name = 'T1')
    drop table T1
go
if exists(select * from sys.tables where name = 'T2')
    drop table T2
go

create table T1
(
    id int not null,
    someText varchar(100) not null
)
go

insert into T1
values(1, 'hello'),
(3, 'bye'),
(6, 'what')
go

create table T2
(
    id int not null,
    someText varchar (100) not null
)
go

insert into T2
values(2, 'hi'),
(3, 'ciao'),
(4, 'no')
go

select *
from T1
left join T2
on T1.id = T2.id

select *
from T2
right join T1
on T2.id = T1.id

Đầu ra sẽ có cùng các trường chính xác (lưu ý bạn, nếu bạn sử dụng SELECT *thứ tự cột sẽ khác nhau giữa các truy vấn) với cùng một dữ liệu chính xác.

Để tham khảo, đây là hai kế hoạch thực hiện:

nhập mô tả hình ảnh ở đây


1
Cảm ơn bạn rất nhiều có ý nghĩa. Đó là câu trả lời tôi đã hy vọng nhận được. Chỉ cần có một ngày khó khăn với một số truy vấn của tôi ngày hôm nay.
Juan Velez
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.