2010-08-05 46 views
5

Tôi đang tạo truy vấn sẽ hiển thị thông tin cho bản ghi có nguồn gốc từ 8 bảng. Nhà phát triển ban đầu đã viết truy vấn đã sử dụng kết hợp 'ở đây bằng this this' AND 'this equals this' để tạo các kết nối.Câu hỏi SQL INNER JOIN

Tôi đã thay đổi truy vấn để sử dụng INNER JOINS. Tôi tự hỏi liệu cách tiếp cận của tôi có tốt hơn việc sử dụng kết hợp các toán tử WHERE hay không.

Trên phương pháp thực hành tốt, là sự kết hợp của INNER JOINS một tùy chọn tốt hoặc tôi nên sử dụng một kỹ thuật khác.

Trả lời

3

Từ quan điểm thực hiện, sẽ không có bất kỳ sự khác biệt nào ... ít nhất là trên các RDBMS nổi bật như Sql-server/Oracle ... Các cơ sở dữ liệu này, có khả năng xác định cả hai mẫu đều giống nhau và sử dụng kế hoạch thực hiện tương tự cho cả hai ...

Theo ý kiến ​​khiêm tốn của tôi, đều là thực hành tốt, nhưng bạn nên duy trì sự nhất quán và liên kết phù hợp ... Một nơi nào đó tôi nghe nói rằng mệnh đề thường được các nhà phát triển oracle sử dụng, và tham gia bên trong Sql-Server ... Không phải là rất nhiều chắc chắn về điều đó ... Bởi bây giờ hầu hết các lập trình viên có khả năng hiểu cả hai loại truy vấn ...

+0

Tôi sử dụng MySQL và thường thích INNER JOIN đơn giản vì tôi. mã trông sạch hơn và có vẻ dễ hiểu hơn. Tôi đúng khi nghĩ rằng một Inner Join sẽ được sử dụng khi có một bản ghi trong cả hai bảng. –

+0

Có ... Kết nối bên trong sẽ tìm nạp bạn chỉ những bản ghi có bản ghi phù hợp trong bảng con ... Nếu không có bản ghi trùng khớp trong bảng con mà hàng cụ thể bị loại trừ khỏi kết quả truy vấn. –

+0

Tôi tự hỏi nếu bạn có thể giúp tôi với truy vấn tôi đang làm? Nó quay trở lại quá nhiều hồ sơ mà tôi đã dự đoán. –

0

Cả hai sẽ hành xử giống nhau (như The King nói). Cá nhân tôi thích cú pháp INNER/OUTER/LEFT JOIN vì nó trực quan/rõ ràng hơn. Khi bạn nhận được vào LEFT JOINs với các điều kiện tham gia trong mệnh đề WHERE sau đó bạn phải nhận được vào bằng cách sử dụng dấu cộng và sau đó bạn phải nhớ bên nào để đưa chúng vào. Urgghh.

Nó cũng có vẻ như (một lần nữa như The King nói) là đúng sự thật rằng Oracle devs đặt các điều kiện tham gia vào mệnh đề WHERE.

-Jamiet

1

Tôi tin rằng không có sự khác biệt về hiệu năng giữa cả hai:

ANSI Phong cách
SELECT * FROM Table1 a JOIN TABLE2 b on a.id = b.id

Old Phong cách
SELECT * FROM Table1 a , TABLE2 b
WHERE a.id = b.id

Kiểu ANSI là mới hơn và dễ đọc hơn và đẹp hơn, tôi thích kiểu cũ hơn đặc biệt khi nói đến việc tham gia nhiều hơn 4/5 Bảng ... có thể bởi vì tôi đã nói với Oracle Dev trước khi o_O