Mysql sql连接子句位置问题

Mysql sql连接子句位置问题,mysql,join,Mysql,Join,以下两个SQL之间有什么区别: select ... from table1 t1 left join table2 t2 on t2.col1=t1.id and t2.col2='xxx' where t1.col2='xxx' 我发现,当同一个子句放在不同的位置时,结果有时可能会不同,甚至sql性能可能会有很大的差异。如果我把额外子句放在左连接后面,或者放在“where”后面,有什么主要区别 有人能解释一下吗?提前感谢。性能肯定会有所不同,当mySQL执行select时,它首先从整个表

以下两个SQL之间有什么区别:

select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'

我发现,当同一个子句放在不同的位置时,结果有时可能会不同,甚至sql性能可能会有很大的差异。如果我把额外子句放在左连接后面,或者放在“where”后面,有什么主要区别


有人能解释一下吗?提前感谢。

性能肯定会有所不同,当mySQL执行select时,它首先从整个表开始,然后根据删除部分结果的位置条件,因此您应该始终以最具体的搜索条件开始搜索,也就是说,将最有可能的结果排除在外

性能肯定会有所不同,当mySQL执行select时,它首先从整个表开始,然后根据删除部分结果的位置条件而定,因此您应该始终以最具体的搜索条件开始搜索,即将最有可能的结果排除在外的搜索条件

您可以看到以下SQL之间的差异,只需在两个查询前面添加“
EXPLAIN
”。i、 e

EXPLAIN select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'


您可以看到以下SQL之间的差异,只需在两个查询前面添加“
EXPLAIN
”。i、 e

EXPLAIN select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'

让我们重写SQLs:

select t1.id, t2.col1
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'

用数据填充表格
t1(id,col2):
1 xxx
2 xxx
3 jjj

t2(col1,col2):
1 uuu
2 xxx
3xxx

第一次查询的结果:
1空
2
第二次查询结果:
2.2

所以,若在“连接”中添加任何条件,则连接行可能不会连接,并且连接结果将为空

请参阅链接以了解

让我们重写SQLs:

select t1.id, t2.col1
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'

用数据填充表格
t1(id,col2):
1 xxx
2 xxx
3 jjj

t2(col1,col2):
1 uuu
2 xxx
3xxx

第一次查询的结果:
1空
2
第二次查询结果:
2.2

所以,若在“连接”中添加任何条件,则连接行可能不会连接,并且连接结果将为空


请参阅链接以了解

请发布差异结果!这个问题有点模糊,质量不高。请发布不同的结果!这个问题有点模糊,质量也不高。然而,这个链接似乎并没有解释为什么在join子句中加入额外条件时mysql的行为会有所不同,“为什么”它返回空结果?可以想象,“where”是一个全局结果过滤器。如果t2.col2!=xxx,结果将不包含此行。“左连接”中的条件仅影响将一行连接到另一行。如果不满足“左联接”中的条件,则将联接NULL。我希望你能理解我糟糕的英语。然而,这个链接似乎并没有解释为什么在join子句中加入额外条件时mysql的行为会有所不同,“为什么”它返回空结果?可以想象,“where”是一个全局结果过滤器。如果t2.col2!=xxx,结果将不包含此行。“左连接”中的条件仅影响将一行连接到另一行。如果不满足“左联接”中的条件,则将联接NULL。我希望你能理解我糟糕的英语。
select t1.id, t2.col1
from table1 t1
left join table2 t2 on t2.col1=t1.id
where t1.col2='xxx' and t2.col2='xxx'