如果我们在两张表关联以后在on后面加 and条件 效果如下
select*from test_a2 a2
leftjoin test_a1 a1 on a1.id=a2.id
where a2.id =1/a1.id=1--上面用a1,a2效果一样,但是不能用id=1,必须加别名,否则会报错 Column 'id' in where clause is ambiguous1 张三 男 1 数学 89.501 张三 男 1 英语 90.001 张三 男 1 语文 85.00
原因:
on后加where条件是对两张表join完以后的结果再进行筛选过滤的,可以理解为a1和a2表关联后生成临时表
然后在在临时表上进行的过滤
having和where的使用场景
where:WHERE语句在GROUPBY语句之前;SQL会在分组之前计算WHERE语句。
如:只统计所有学生数学和英语的总成绩
select
id
,sum(grade)from test_a1
where subject in('数学','英语')groupby id
id sum(grade)1179.502158.903176.504172.505258.00having:HAVING语句在GROUPBY语句之后;SQL会在分组之后计算HAVING语句。
如:对学生编号分组,求总成绩大于260的学生编号以及成绩
select id,sum(grade)from test_a1 groupby id havingsum(grade)>260
id sum(grade)1264.50