Mysql 如果可以在没有联接的情况下从多个表中进行选择,为什么要使用联接?
以下查询从Mysql 如果可以在没有联接的情况下从多个表中进行选择,为什么要使用联接?,mysql,sql,select,join,pdo,rdbms,Mysql,Sql,Select,Join,Pdo,Rdbms,以下查询从posts表和users表中选择数据。 第一个查询使用联接,第二个查询不。。。我的问题是为什么要使用连接 使用联接进行查询: SELECT u.*, p.* FROM users AS u JOIN posts AS p ON p.user_id=u.user_id WHERE u.user_id=1 查询时不带: SELECT u.*, p.* FROM users AS u, posts AS p WHERE p.user_id=u.user_id AND u.user_id=1
posts
表和users
表中选择数据。
第一个查询使用联接,第二个查询不。。。我的问题是为什么要使用连接
使用联接进行查询:
SELECT u.*, p.* FROM users AS u
JOIN posts AS p ON p.user_id=u.user_id
WHERE u.user_id=1
查询时不带:
SELECT u.*, p.* FROM users AS u, posts AS p
WHERE p.user_id=u.user_id
AND u.user_id=1
第二种形式称为隐式连接。首先也是最重要的一点是,隐式联接被大多数s视为不推荐使用。就我个人而言,我真诚地怀疑,在不久的将来,任何主要的RDBMS都会在任何时候放弃对它们的支持,但为什么要冒险呢 其次,显式联接有一种执行外部联接的标准方法。隐式连接有各种各样的不可读的hacks解决方案(例如,Oracle的
(+)
语法),但是,据我所知,没有任何标准具有合理的可移植性预期
第三,我承认这纯粹是品味的问题,它们只是看起来更好。使用显式联接允许您在逻辑上将查询中的条件与联接所有表所需的“支架”以及
where
子句的实际逻辑条件分开。使用隐式连接时,所有内容都会被集中到where
子句中,只有三到四个表就很难管理了。第二种形式称为隐式连接。首先也是最重要的一点是,隐式联接被大多数s视为不推荐使用。就我个人而言,我真诚地怀疑,在不久的将来,任何主要的RDBMS都会在任何时候放弃对它们的支持,但为什么要冒险呢
其次,显式联接有一种执行外部联接的标准方法。隐式连接有各种各样的不可读的hacks解决方案(例如,Oracle的(+)
语法),但是,据我所知,没有任何标准具有合理的可移植性预期
第三,我承认这纯粹是品味的问题,它们只是看起来更好。使用显式联接允许您在逻辑上将查询中的条件与联接所有表所需的“支架”以及where
子句的实际逻辑条件分开。使用隐式联接时,所有内容都会被集中到where
子句中,并且只有三到四个表,这就很难管理了。第二个查询使用联接。这就是逗号在中的意思,用户是u,帖子是p。这是一种隐式联接(隐式的,因为虽然您没有显式使用join
关键字,但您得到了它的效果),也被称为交叉联接
,意思是“左表的每一行,与右表的每一行联接”
使用JOIN。。。ON
语法(在我看来)更加明确易读,这在很大程度上是因为将连接条件从WHERE
子句移动到直接附加到JOIN
,并且还打开了其他连接类型的语法(左连接
,默认连接和内部连接
)具有不同的语义。第二个查询使用连接。这就是逗号在中的意思,用户是u,帖子是p。这是一种隐式联接(隐式的,因为虽然您没有显式使用join
关键字,但您得到了它的效果),也被称为交叉联接
,意思是“左表的每一行,与右表的每一行联接”
使用JOIN。。。ON
语法(在我看来)更加明确易读,这在很大程度上是因为将连接条件从WHERE
子句移动到直接附加到JOIN
,并且还打开了其他连接类型的语法(左连接
,默认连接和内部连接
)语义不同。这纯粹是风格的选择。服务器将对这两条语句进行相同的解释。
当您在FROM
子句中使用逗号(,
)时,这隐含地使用了交叉联接
如果在WHERE子句中有很多条件,则可能更清楚地区分用于连接表的条件(tableA.ID=tableB.tableA\u ID
)和用于过滤的条件。您可以通过将连接条件放在显式的连接旁边来实现这一点,这纯粹是一种样式选择。服务器将对这两条语句进行相同的解释。
当您在FROM
子句中使用逗号(,
)时,这隐含地使用了交叉联接
如果在WHERE子句中有很多条件,则可能更清楚地区分用于连接表的条件(tableA.ID=tableB.tableA\u ID
)和用于过滤的条件。您可以通过将连接条件放在显式的JOIN
JOIN
旁边来实现这一点,因为这是正确的语法。FROM
子句中的逗号是古语。我们不使用它们的原因与我们在演讲中通常不使用“you”和“doth”等词的原因大致相同。第二种查询在石器时代使用,称为隐式连接,第一种查询称为显式连接,在当今使用。@GordonLinoff You对此做了很好的解释。@AbhikChakraborty:SQL-92问世已经24年了,所以显式连接语法是青铜时代:-)LOL@dnoeth我出生时算作80年代是寒冷时代,90年代是石器时代等等,在印度:)JOIN
是正确的语法。FROM
子句中的逗号是古语。我们不使用它们的原因与我们在演讲中通常不使用“you”和“doth”等词的原因大致相同。第二种查询在石器时代使用,称为隐式连接,第一种查询称为显式连接,在当今使用。@GordonLinoff You对此做了很好的解释。@AbhikChakraborty:SQL-92问世已经24年了,所以解释一下