2011-10-18 39 views
5

Tôi đã nhìn xa và rộng, nhưng tôi không thể tìm thấy câu trả lời, có lẽ vì tôi không thể tìm ra cách đúng để đặt câu hỏi. Vì vậy, đây là: có lý do nào để thích bất kỳ truy vấn nào trong số hai truy vấn này không?THAM GIA VÀ CHỌN từ nhiều bảng

SELECT * FROM table1, table2 WHERE table1.id = table2.id; 

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; 

Câu hỏi đặt ra bắt nguồn từ một truy vấn phức tạp hơn nhiều mà tôi đang cố gắng để tối ưu hóa, nhưng tôi nghĩ rằng những hai truy vấn chứa bản chất của câu hỏi, và hy vọng bằng cách hỏi trong này cách nó sẽ hữu ích hơn cho người khác. Cảm ơn trước.

+0

Truy vấn đầu tiên đó có hoạt động không?Nếu có, tôi cho rằng nó âm thầm làm một số hình thức tham gia, nhưng tôi không biết loại nào. – eykanal

+0

Nó hoạt động, tôi đã thử nghiệm nó trước khi đăng. ;) – Sophivorus

Trả lời

4
SELECT * FROM table1, table2 WHERE table1.id = table2.id; 

SELECT * FROM table1 INNER JOIN table2 ON table1.id = table2.id; 

sẽ trả lại kết quả tương tự. Tuy nhiên, bạn nên chọn cái thứ hai trong trường hợp này. Biểu mẫu đầu tiên vẫn còn gặp phải rất nhiều vì Oracle không hỗ trợ biểu mẫu thứ hai trong một thời gian dài.

Tuy nhiên, nêu INNER JOIN mang ý và buộc bạn phải viết một điều kiện vì một INNER JOIN đòi hỏi một khoản ON. Đối với các truy vấn lớn hơn, nó làm cho truy vấn dễ đọc hơn và làm cho khó hơn để bỏ qua một vị từ nối. Ngoài ra, lưu ý rằng tôi có xu hướng đọc biểu mẫu đầu tiên là: lấy sản phẩm tiêu biểu của hai bảng và chỉ giữ lại các hàng có id bằng nhau trong cả hai bảng trong SQL được biểu thị là SELECT * FROM table1 CROSS JOIN table2 WHERE table1.id = table2.id;.

5

Thực tế hai truy vấn giống nhau, chỉ có hai cách khác nhau để viết. Cá nhân tôi nghĩ rằng cái sau cung cấp khả năng đọc dễ dàng hơn cho người dùng.

+0

Chưa kể tôi tin rằng trước đây là [không được chấp nhận] (http://blogs.technet.com/b/wardpond/archive/2008/09/13/deprecation-of-old-style-join-syntax- chỉ-một phần-thing.aspx). –

2

Từ what I gather chúng đều giống nhau. Một là đường cú pháp cho người kia.

Được gọi là ký hiệu Tham gia rõ ràng so với Implicit.

+0

+1 cho các từ "rõ ràng" so với "ẩn". – Benoit

2

Chúng giống nhau.

Phần lớn sự khác biệt được thấy ở định dạng cơ bản thường là giữa các cơ sở dữ liệu khác nhau như Oracle và mySQL. Theo truyền thống trong oracle tham gia đã được thực hiện chỉ sử dụng table.foreign_id = table2.id trong khi mySQL sẽ được sử dụng table1 join table2 on table1.foreign_key = table2.id

Tương tự join, inner join, left inner joinleft join có truyền thống thay đổi một chút từ việc thực hiện cơ sở dữ liệu để thực hiện vì vậy tốt nhất để kiểm tra hướng dẫn/tài liệu cho bạn thực hiện cơ sở dữ liệu hiện tại để đảm bảo rằng nó đang làm những gì bạn muốn.

Trong thời gian gần đây cú pháp đã trở thành tiêu chuẩn hóa hơn với tiêu chuẩn ANSI nhưng những gì mọi người thường sử dụng cho thấy nguồn gốc của họ!
này tốt bằng văn bản bài viết -
http://www.google.com/url?sa=t&source=web&cd=4&ved=0CD8QFjAD&url=http%3A%2F%2Fwww.kingtraining.com%2Fconfdownloads%2Fdownloads%2FOracle9iJoin_paper.pdf&ei=LOGdTpfiFOrV0QH4zpmECQ&usg=AFQjCNHjicW-tWmJfZcXwNi220LxjGvNhg&sig2=4tdM2lfgQ6AqiYudWWTirg

cho rất nhiều thông tin hơn và lịch sử và giải thích các loại bên trong và bên ngoài tham gia thực sự tốt.

Các vấn đề liên quan