这三个MySQL查询有什么区别?

时间:2012-01-26 18:37:09

标签: mysql sql join

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

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;

Lessons有一个名为author的列被索引为Users.email的外键。 titleLessons中的列,nameUsers中的列

2 个答案:

答案 0 :(得分:12)

这三个陈述之间没有区别,它们都是隐含的或明确的,INNER JOIN s

  1. 第一个语句使用隐式旧连接语法。虽然仍然支持此功能,但使用显式联接更具可读性和可维护性。不要使用旧式连接。

  2. 第二个语句使用显式连接而未指定连接类型。默认情况下,这是INNER JOIN

  3. 第三个陈述也是显式联接,避免任何歧义。这是迄今为止最常推荐的连接方式。

答案 1 :(得分:1)

不仅有完美的幂等,还有另一种方式。 例如,如果您可以在Lesson.email中重命名Lessons.author,为了确保相关列在两个表中具有相同的名称,您可以使用 NATURAL JOIN 隐式地将行绑定在一起来自共享相同名称的不同表:

-- After renaming Lessons.author in Lessons.email, you simply use NATURAL JOIN
SELECT title,name FROM Lessons NATURAL JOIN Users;