Tôi đang cố gắng xem liệu sự hiểu biết của tôi về JOINs
có đúng không.Điều gì thực sự xảy ra trong bảng JOINs?
Đối với các truy vấn sau đây:
SELECT * FROM tableA
join tableB on tableA.someId = tableB.someId
join tableC on tableA.someId = tableC.someId;
Liệu các RDMS về cơ bản thực hiện giả tương tự như sau:
List tempResults
for each A_record in tableA
for each B_record in tableB
if (A_record.someId = B_record.someId)
tempResults.add(A_record)
List results
for each Temp_Record in tempResults
for each C_record in tableC
if (Temp_record.someId = C_record.someId)
results.add(C_record)
return results;
Vì vậy, về cơ bản các hồ sơ nhiều hơn với cùng someId
tableA
có với tableB
và tableC
, các nhiều bản ghi RDMS có quét? Nếu tất cả 3 bảng có bản ghi với cùng một someId
thì về cơ bản quét toàn bộ bảng được thực hiện trên tất cả 3 bảng?
Sự hiểu biết của tôi có đúng không?
Câu hỏi hay. Nhưng tôi không chắc chắn nếu có ai có thể trả lời câu hỏi này. ';)' Chắc chắn tôi cảm thấy điều tương tự đang xảy ra ở phía sau. –
Bạn muốn hiểu câu lệnh ghép nối T-SQL nhiều hơn? Điều này [tham gia] (https://mva.microsoft.com/en-US/training-courses/querying-with-transactsql-10530?l=BooD4g87_7904984382) là một phần tốt để hiểu chúng. – Edward
[** Bài đăng này **] (http://stackoverflow.com/questions/29795400/loop-join-in-sql-server-2008) ii hữu ích. – Vikrant