MySQL中的'where'和不同的'joins'有什么区别?

3
可能重复:
在MySQL查询中,为什么要使用连接而不是where语句? 对我来说,连接总是很困惑的。 有人可以告诉我不同连接之间的区别以及哪个连接最快,何时使用哪个连接,连接和where子句之间的区别是什么吗? 请详细说明您的答案,因为我已经在一些网站上阅读了关于连接的内容,但没有完全理解概念。
2个回答

3
为了避免引用整篇维基百科文章,我建议您查看他们关于SQL Joins的文章。
SQL JOIN子句将来自数据库中两个或多个表的记录组合在一起。它创建一个可保存为表或直接使用的集合。通过使用每个表共有的值,JOIN是从两个表中组合字段的一种方式。ANSI标准SQL指定了四种类型的JOIN:INNER、OUTER、LEFT和RIGHT。在特殊情况下,表(基表、视图或连接表)可以在自连接中加入。
程序员编写JOIN谓词以识别要连接的记录。如果求值的谓词为true,则生成期望格式的组合记录,例如记录集或临时表。
有一种旧的语法使用WHERE子句来暗示INNER JOIN。尽管它能够正常工作,并会产生与使用INNER JOIN语法指定的查询完全相同的查询,但它已经被弃用,因为大多数人发现它更加令人困惑。
这是MySQL JOIN语法的文档。

2

这个查询:

SELECT c.customer_name, o.order_id, o.total
FROM customers c, orders o
WHERE c.id = o.customer_id

并且这个

SELECT c.customer_name, o.order_id, o.total
FROM customers c
INNER JOIN orders o ON c.id = o.customer_id

在mysql服务器上执行的内容并不会产生影响,但是使用join更易读,尤其是对于更复杂的连接:

这里有一篇关于此主题的文章:http://www.mysqlperformanceblog.com/2010/04/14/is-there-a-performance-difference-between-join-and-where/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接