MySQL“;关于;条件-它做什么?

MySQL“;关于;条件-它做什么?,mysql,inner-join,Mysql,Inner Join,首先,让我解释一下,我已经在MySQL中搜索了至少一个小时关于这个常用关键字的任何信息。问题是,我使用的任何搜索引擎都会在最琐碎和不相关的结果中匹配“on”这个词。我也没有幸浏览MySQL的文档 我看到on与内部联接一起使用是一个条件,但我不知道它的作用。用法的一个例子是 SELECT t1.name, t2.salary FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name; 我知道“WHERE”和“have”之间的区别

首先,让我解释一下,我已经在MySQL中搜索了至少一个小时关于这个常用关键字的任何信息。问题是,我使用的任何搜索引擎都会在最琐碎和不相关的结果中匹配“on”这个词。我也没有幸浏览MySQL的文档

我看到on与内部联接一起使用是一个条件,但我不知道它的作用。用法的一个例子是

SELECT t1.name, t2.salary
FROM employee AS t1 INNER JOIN info AS t2 ON t1.name = t2.name;
我知道“WHERE”和“have”之间的区别分别是过滤行和过滤组之间的区别

然而,我无法想象什么是“开启”过滤器

我想在使用内部联接时可能需要进行过滤,但我以前在内部联接的情况下使用过WHERE,如下所示:

SELECT g.id, g.name, g.date_created, g.date_updated, g.created_by, 
    c.fullname AS creator_name, g.updated_by, u.fullname AS updater_name, 
    COUNT(i.id) as image_count

FROM gallery_groups g INNER JOIN
    users c INNER JOIN
    users u INNER JOIN
    gallery_images i

WHERE g.created_by=c.id AND g.updated_by=u.id AND i.group=g.id
GROUP BY g.name
ORDER BY g.date_updated DESC, g.name

如有任何信息和/或示例,将不胜感激

仅供参考,除
内部连接外,两者都相同。。。ON是ANSI 92语法

您可能需要谷歌
ansi92语法与ansi86/89语法


而不是编写长WHERE语句,在打开关键字后,将表之间的依赖关系放在JOIN闭包中


它加快了数据库中的搜索过程(它与kartezjan矩阵相关联),使您的代码更干净,更容易放置真实的WHERE条件

内部连接
确实可以在不使用ON的情况下编写,只需将所有ON子句移动到WHERE子句即可。使用sane优化器,在性能方面不会有什么不同(但仍会使查询更清晰!)

由于空处理,外部联接(例如,
左联接
)不能被删除

SELECT a.foo, b.bar FROM a LEFT JOIN b ON (a.fk = b.pk)
如果b中不存在a.fk,将返回b.bar=NULL

SELECT a.foo, b.bar FROM a, b WHERE a.fk.b.pk
如果b中不存在a.fk,则不会返回行


仅供参考:连接语法是

尝试一些解释或基准测试,它不太可能有什么不同。优化器并没有那么糟糕。我甚至怀疑3.x是真的。