这三个 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 的外键。 titleLessons 中的一列,nameUsers 中的一列

【问题讨论】:

我相信这个问题已经解决了这个问题:***.com/questions/894490/… 只是风格不同, 【参考方案1】:

这三个语句没有区别,都是隐式或显式INNER JOINs

    第一个语句使用 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这三个版本有啥区别?

在Oracle数据库条件查询语句中使用'%%','_%%'这两个有啥区别

这两个媒体查询有啥区别? [复制]

SQL Server 中这两个循环删除查询有啥区别

这两个 LINQ 查询有啥区别以及如何正确优化它们?

为啥MYSQL很少人用视图,MYSQL的视图和MSSQL的视图有啥本质区别。