以下语句给出相同的结果(一个是使用on
,另一个使用where
):
mysql> select * from gifts INNER JOIN sentGifts ON gifts.giftID = sentGifts.giftID;
mysql> select * from gifts INNER JOIN sentGifts WHERE gifts.giftID = sentGifts.giftID;
我只能在左外连接的情况下看到找到“不匹配”的情况:
(找出从未有人送过的礼物)
mysql> select name from gifts LEFT OUTER JOIN sentgifts
ON gifts.giftID = sentgifts.giftID
WHERE sentgifts.giftID IS NULL;
在这种情况下,首先使用on
, 进而where
。是否on
先进行匹配,然后where
是否进行“二次”过滤?或者是否有更通用的使用规则on
versus where
?谢谢。
The ON
子句定义表之间的关系。
The WHERE
子句描述您感兴趣的行。
很多时候,您可以交换它们并仍然得到相同的结果,但是左外连接的情况并不总是如此。
- If the
ON
子句失败,您仍然会得到一行,其中包含来自
左表但右表的列中有空值。
- If the
WHERE
子句失败,您根本不会得到该行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)