Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果可以在没有联接的情况下从多个表中进行选择,为什么要使用联接?_Mysql_Sql_Select_Join_Pdo_Rdbms - Fatal编程技术网

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年了,所以解释一下