为什么使用“AND”运算符与JOIN一起使用,即使没有“WHERE”子句也是如此

时间:2016-08-13 19:01:53

标签: php mysql join where

下午好,我刚注意到了什么。如果我在其中编写带有JOIN的mysql查询,例如:

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar WHERE  Car="Brand"

它将返回等于“品牌”的汽车。

但是我注意到如果我以这种方式构建查询:

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar AND Car="Brand" 

它将返回与上一个查询相同的内容。注意到我使用AND而不是WHERE。我还在PHP查询中测试了它的工作原理。例如:

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar AND Car=$brand

而不是

Select Car, Vendor from Cars JOIN Vendor On Vendor.IdCar=Car.IdCar WHERE Car=$brand

所以我问的问题是:为什么第二个查询有效?是因为使用了JOIN,因为我很确定在AND之前需要WHERE子句吗?

3 个答案:

答案 0 :(得分:2)

WHEREON都需要(布尔值)条件。布尔条件可以通过将它们与ANDORNOT(以及可能()

组合在一起来构造布尔条件
  • WHERE 条件是查询中的(可选)子句
  • table-expression JOIN table-expression ON 条件运算符根据条件组合两个 table-expression

答案 1 :(得分:1)

joininner join的缩写,因此您要对on子句中的所有条件进行过滤。这与将条件放在where子句中具有相同的效果。如果您使用outer join(左侧或右侧),则会在联接的左侧或右侧获得该表的所有记录,并且那些记录中的null值为{39} ; t匹配条件,而where子句仍然只选择那些符合条件的记录。

答案 2 :(得分:0)

出于可读性目的,您可以将on子句放在where子句中,并且事情将正确完成:

Select Car, Vendor from Cars JOIN Vendor where Vendor.IdCar=Car.IdCar AND Car="Brand";

这也是有效的:

Select Car, Vendor from Cars, Vendor where Vendor.IdCar=Car.IdCar AND Car="Brand";

但它无法进行外连接(左连接或右连接)