在MySQL查询中,为什么要使用join而不是在哪里?

它似乎要组合两个或多个表,我们可以使用join或where。一个比另一个的优点是什么?
涉及多个表的任何查询需要某种形式的关联以将来自表“A”的结果链接到表“B”。传统的(ANSI-89)方法是:

>在FROM子句中列出逗号分隔列表中涉及的表
>在WHERE子句中写入表之间的关联

SELECT *
  FROM TABLE_A a,
       TABLE_B b
 WHERE a.id = b.id

这里是使用ANSI-92 JOIN语法重写的查询:

SELECT *
  FROM TABLE_A a
  JOIN TABLE_B b ON b.id = a.id

从性能角度:

在支持(Oracle 9i,PostgreSQL 7.2,MySQL 3.23,SQL Server 2000)的地方,使用任何语法都不会对其他语言产生性能优势。优化器将它们视为同一查询。但是更复杂的查询可以从使用ANSI-92语法中受益:

>能够控制JOIN顺序 – 扫描表的顺序
>能够在加入之前对表应用过滤标准

从维护角度:

使用ANSI-92 JOIN语法比ANSI-89有许多原因:

>更易读,因为JOIN标准与WHERE子句是分开的
>不太可能错过JOIN标准
>对INNER之外的JOIN类型提供一致的语法支持,使查询在其他数据库上易于使用
> WHERE子句仅用作对连接的表的笛卡尔乘积的过滤

从设计角度:

ANSI-92 JOIN语法是模式,不是反模式:

>查询的目的更明显;应用程序使用的列是清楚的
>它遵循关于在可能的情况下使用严格类型的模块化规则。显性几乎普遍更好。

结论

缺乏熟悉和/或舒适,我没有看到继续使用ANSI-89 JOIN语法而不是ANSI-92语法的任何好处。一些人可能会抱怨说ANSI-92语法更冗长,但这是它的显式。越明确,越容易理解和维护。

http://stackoverflow.com/questions/2241991/in-mysql-queries-why-use-join-instead-of-where

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:在MySQL查询中,为什么要使用join而不是在哪里?