聚集函数
1.between匹配 包含min和max值
2. count(*) 计算时会包括null值,而count(column)则会忽略null值。
检验是否含有null值需要使用is null。
3.使用聚集函数时,avg。sum,min,max均会忽略null值。
4.使用聚集函数要赋予其别名。
5.聚集函数内可以使用distinct关键字,而默认使用all关键字。
如 select avg(distinct price) as avg_price
当不使用distinc时 默认all: select avg(all price) as avg_price
6.注意指定别名时避免使用列名,虽然这是合法的。
过滤分组
group by子句用于按参数来排序并分组。
如果在select中使用表达式,则group by子句中必须指定相同的表达式,而不能使用别名。
除聚集语句外,select 语句中的每个列都必须在group by子句中给出。
若分组列中具有null值,则null将作为一个分组返回。若列中有多行null值,则他们讲分为一组。
where与having:
where与having所支持的关键字是相同的。
但where用于过滤指定行,但不能过滤分组;having则可以用于过滤分组。
oder by 与 group by
order by | group by |
排序产生的输出 | 分组行,但输出可能不是分组的顺序 |
任意列都可以使用,甚至包括非选择的列 | 只可能使用选择列或者表达式列,而且必须使用每个选择列表达式 |
不一定需要 | 若与聚集函数一起使用列(或表达式),则必须使用 |
由第一条可见,每次使用group by时应当也给出order by子句,这是为了保证数据正确排序的唯一方法。
组合查询
虽然where or语句与union效果基本相同,但默认union与where or都是返回去除重复数据的匹配行,而union all可以包含重复行。
对组合查询结果排序,仅支持在最后一条select 语句后添加排序条件,而不能对每部分分别制定排序规则。
使用insert select语句时要注意,填充数据时,使用select语句的第一列来填充insert第一列,第二列对应第二列,等等。
使用last_insert_id()函数获取auto_increment列的最后值。