以下两个SQL之间有什么区别:
select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'
select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id
where t1.col2='xxx' and t2.col2='xxx'
我发现当同一个子句放在不同位置时,结果有时可能会有所不同,甚至更多的sql性能可能会有很大差异。如果我在左连接之后立即使用额外条款或将其放在'where'之后有什么主要区别?
有人可以提供解释吗?提前谢谢。
答案 0 :(得分:1)
让我们重写SQL:
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'
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'
在表格中填写数据
t1(id,col2):
1 xxx
2 xxx
3 jjj
t2(col1,col2):
1 uuu
2 xxx
3 xxx
第一次查询的结果:
1 NULL
2 2
第二次查询的结果:
2 2
因此,如果您在'join'中添加任何条件,则可能无法连接连接线,并且连接的结果将为null。
请参阅this链接以了解
答案 1 :(得分:0)
性能肯定会有所不同,当mySQL执行select时,它首先从整个表开始,然后根据它取消某些结果的条件,因此你应该始终使用最具体的一个,即将留下最有可能结果的那个。
答案 2 :(得分:0)
您可以看到以下SQL之间的区别,只需在两个查询前添加“EXPLAIN
”即可。即。
EXPLAIN select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id and t2.col2='xxx'
where t1.col2='xxx'
AND
EXPLAIN select ...
from table1 t1
left join table2 t2 on t2.col1=t1.id
where t1.col2='xxx' and t2.col2='xxx'