这三个 MySQL 查询有啥区别?
Posted
技术标签:
【中文标题】这三个 MySQL 查询有啥区别?【英文标题】:What is the difference between these three MySQL queries?这三个 MySQL 查询有什么区别? 【发布时间】:2012-01-26 18:37:08 【问题描述】: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
的外键。 title
是 Lessons
中的一列,name
是 Users
中的一列
【问题讨论】:
我相信这个问题已经解决了这个问题:***.com/questions/894490/… 只是风格不同, 【参考方案1】:这三个语句没有区别,都是隐式或显式INNER JOIN
s
第一个语句使用 implicit old join 语法。虽然这仍然受支持,但使用显式连接更具可读性和可维护性。不要使用旧式连接。
第二条语句使用显式连接,但未指定连接类型。默认情况下,这是INNER JOIN
第三条语句也是显式连接,避免了任何歧义。这是迄今为止最推荐的连接方式。
【讨论】:
【参考方案2】:不仅有完美的幂等性,还可能有另一种方式。 例如,如果您可以在 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;
【讨论】:
以上是关于这三个 MySQL 查询有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章
centos6和centos5和centos5.x这三个版本有啥区别?