#管理后台,付费酒店如果没有所属部门的话,就默认为“4营销中心”
这里写where: 代表是对联合后的结果进行过滤。
这里写and :那查询出来的记录数就多了,表示的是联合时的条件。
Where是条件语句的开始,and是两个条件并列且同时满足!
在使用left jion时,and和where条件的区别如下:
1、 and条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。和右边的表关联不上,右边表的字段显示null;
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
本文来说下mysql中where和and的区别
多表查询语法结构:table_reference {[INNER] JOIN | {LEFT|RIGHT} [OUTER] JOIN} table_reference ON conditional_expr
由于内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,所有在内连接时on和where的结果是相同的。
SELECT
T.id,
T.content,
T.create_time time,
T.type,
T.state,
T.is_deleted t_is_deleted,
k.is_deleted k_is_deleted
FROM
p_alert T
JOIN p_deal K ON T.alert_code = k.alert_code
AND K.is_deleted = 0
AND T.is_deleted = 0
ORDER BY
T.create_time DESC
结果信息
WHERE的情况
SELECT
T.id,
T.content,
T.create_time time,
T.type,
T.state,
T.is_deleted t_is_deleted,
k.is_deleted k_is_deleted
FROM
p_alert T
JOIN p_deal K ON T.alert_code = k.alert_code
WHERE K.is_deleted = 0
AND T.is_deleted = 0
ORDER BY
T.create_time DESC
结果信息
在多表查询时,ON和where都表示筛选条件,on先执行,where后执行。
区别:
外连接时,on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。而where条件是在临时表生成好后,再对临时表进行过滤的条件。
左外连接,使用and的时候
SELECT
T.id,
T.content,
T.create_time time,
T.type,
T.state,
T.is_deleted t_is_deleted,
k.is_deleted k_is_deleted
FROM
p_alert T
LEFT JOIN p_deal K ON T.alert_code = k.alert_code
AND K.is_deleted = 0
AND T.is_deleted = 0
ORDER BY
T.create_time DESC
结果
左外连接,使用where的时候
SELECT
T.id,
T.content,
T.create_time time,
T.type,
T.state,
T.is_deleted t_is_deleted,
k.is_deleted k_is_deleted
FROM
p_alert T
LEFT JOIN p_deal K ON T.alert_code = k.alert_code
AND K.is_deleted = 0
WHERE T.is_deleted = 0
ORDER BY
T.create_time DESC
结果
来我们分析一下为什么会造成以上两种不同的结果。
and是生成临时表时使用的条件,上面我们采用的是左外连接,左外连接是以左表为基础的,左表的记录将会全部表示出来,而右表只会显示符合搜索条件的记录。也就是说p_alert是左表,p_deal是右表,条件是p_alert的alert_code与p_deal中的alert_code相等且K.is_deleted = 0 且T.is_deleted = 0 时才连接,而记录不足的地方均用NULL来补充。而where是在临时表生成好后,再对临时表进行过滤。也就是说p_alert的alert_code与p_deal中的alert_code相等,然后在对生成的临时表进行筛选,找到符合条件的记录。
本文详细说明了mysql中where和and的区别。
#管理后台,付费酒店如果没有所属部门的话,就默认为“4营销中心”
这里写where: 代表是对联合后的结果进行过滤。
这里写and :那查询出来的记录数就多了,表示的是联合时的条件。
Where是条件语句的开始,and是两个条件并列且同时满足!
转载于:https://www.cnblogs.com/yoyoma0355/p/11376250.html
Left join左连接,得到的是左表的所有数据拼接右表符合on条件的数据。
如下图一,on后的and使用错误导致两个筛选条件没有生效。图二为正确查询: