下午好,我刚注意到了什么。如果我在其中编写带有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子句吗?
答案 0 :(得分:2)
WHERE
和ON
都需要(布尔值)条件。布尔条件可以通过将它们与AND
,OR
和NOT
(以及可能(
和)
)
WHERE
条件是查询中的(可选)子句 JOIN
table-expression ON
条件是运算符根据条件组合两个 table-expression 。答案 1 :(得分:1)
join
是inner 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";
但它无法进行外连接(左连接或右连接)