2012-01-26 29 views
5
SELECT title,name FROM Lessons,Users WHERE Lessons.author = Users.email; 

Sự khác biệt giữa ba truy vấn MySQL này là gì?

SELECT title,name FROM Lessons JOIN Users ON Lessons.author = Users.email; 

SELECT title,name FROM Lessons INNER JOIN Users ON Lessons.author = Users.email; 

bài học có một cột tên là author lập chỉ mục như một chìa khóa nước ngoài tham gia Users.email. title là một cột trong Lessonsname là một cột trong Users

+0

tôi tin rằng điều này được đề cập trong câu hỏi này: http://stackoverflow.com/questions/894490/sql-left-join-vs-multiple-tables-on-from-line – jzila

+0

Các khác biệt chỉ là phong cách, – onedaywhen

Trả lời

12

Không có sự khác biệt giữa ba tuyên bố, tất cả họ đều, hoặc ngầm hoặc rõ ràng,

  1. Bản tuyên bố đầu tiên INNER JOIN s là sử dụng ẩn cũ tham gia cú pháp. Mặc dù điều này vẫn được hỗ trợ, việc sử dụng các kết nối rõ ràng có thể đọc được và dễ bảo trì hơn. Không sử dụng tham gia kiểu cũ.

  2. Câu lệnh thứ hai đang sử dụng tham gia rõ ràng mà không chỉ định loại tham gia. Theo mặc định, đây là một số INNER JOIN

  3. Câu lệnh thứ ba cũng là tham gia rõ ràng và tránh bất kỳ sự mơ hồ nào. Đây là cách được khuyến nghị nhiều nhất để viết các phép nối.

1

Không chỉ có giá trị hoàn hảo, mà còn có cách khác. Ví dụ: Nếu bạn có thể đổi tên Lessons.author trong Lesson.email, để đảm bảo rằng các cột liên quan có cùng tên trong hai bảng, bạn có thể sử dụng NATURAL JOIN. phần cùng tên:

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN 
SELECT title,name FROM Lessons NATURAL JOIN Users; 
Các vấn đề liên quan