关于left join
数据库在通过连接两张或多张表来返回记录时,都会生成一张中间的临时表,然后再将这张临时表返回给用户。
在使用left jion时,on和where条件的区别如下:
1、 on条件是在生成临时表时使用的条件,它不管on中的条件是否为真(但是关联的其他表格的数据会为null),都会返回左边表中的记录。
2、where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。
关于group by
我在我另一篇文章中说道过,关于mysql分组。
关于函数分组
gorup by得到的是一个分组后的数据,要对分组后的数据进行统计可以使用having进行条件过滤。一个sum,avg,count等统计的函数天生就是结合group,by进行统计的,他统计的就是分组后的数据结果集。如果没有进行分组就使用sum,avg,count等聚合函数,他统计的就是认为该查出来的就是分组数据。如果要同分组后,统计分组结果集,适当的使用子查询也是可以的,此时就是统计的没有分组后的函数了。