0

下面是这两个 SQL 查询:

SELECT `o`.`date`, `i`.`description`, `o`.`quantity`
FROM `orders` AS `o`, `items` AS `i`
WHERE `i`.`itemID` = `o`.`itemID`;

SELECT `o`.`date`, `i`.`description`, `o`.`quantity`
FROM `orders` AS `o`
JOIN `items` AS `i`
ON `i`.`itemID` = `o`.`itemID`;

我得到的结果比第一个少。有人可以解释两者之间的区别吗?

4

2 回答 2

0

这是关于您想要做什么的有用讨论

SQL 左连接与 FROM 行上的多个表?

希望能帮助到你 !

于 2013-10-13T13:08:33.143 回答
0

它们在功能上是等效的,因为 MySQL 优化器将 theta 连接重写为 ANSI JOIN(至少 MySQL 5.6 可以)

您可以使用 EXPLAIN EXTENDED your_query 进行检查;显示警告;

theta风格加入

SELECT `o`.`date`, `i`.`description`, `o`.`quantity`
FROM `orders` AS `o`, `items` AS `i`
WHERE `i`.`itemID` = `o`.`itemID`;

ANSI 连接

SELECT `o`.`date`, `i`.`description`, `o`.`quantity`
FROM `orders` AS `o`
JOIN `items` AS `i`
ON `i`.`itemID` = `o`.`itemID`;

唯一真正的区别是可读性,theta 样式更容易误认为它是 INNER JOIN,因此请养成编写 ANSI JOIN 的习惯

于 2013-10-13T13:25:44.033 回答