在学校里学完SQL,再过一遍《MySQL 必知必会》语法是都会,但是处理的技巧要在实践中才能领悟到
记载下在LeetCode上刷题时,编写查询语句影响深刻的技巧。
聚合函数sum()、count()、avg()、max()、min(),在查询条件时where join on使用时要分组,不分组会自动分组显示。在查询结果时select不用分组
count统计可以count(if(condition,1,null))来统计符合条件的行,因为count默认不统计null行。
count(*)会统计null行
计算所占比例,可以用
DATE_FORMAT() 函数用于格式化时间
null 不要用 = 和!= ,用is 和not is。
char_length()能统计中文字符,无论是汉字,字母,数字,标点都是一个字符。length()统计的是字节,汉字按照编码不同,可能是3个或者2个。
Round()控制精度
时间范围用between and,between and 是包含两边界值的
NOT BETWEEN 是不包含两个边界的
if()函数 IF(condition, value_if_true, value_if_false),if函数可以使用查询的字段比较,不需要再次子查询
ifnull函数 IFNULL(value_if_isnot_null, value_if_is_null)
group by分组统计,计算sum,count更方便,分组后使用max 和 min有奇效
order by可以多个字段排序,用逗号隔开即可
连接的join on条件可以是多个语句,多个语句也可以全放在join on里,也可以放在where与语句里
连接
左右连接
left join 选前面的表的所有列和后面的表相匹配的列
right join 选后面的表的所有列和前面的表相匹配的列
要谁的所有列的数据来选择左右连接,如果被连接的表没有匹配的列会用null 填充。
内连接只匹配相等的列
交叉连接,取笛卡儿积,所有列相乘的结果,可以与自己交叉连接做一些查询。
并集,多次查询将结果合并,union 或者 union all
union不含重复行,union all包括所有行
文章评论