where -group by-having-order by-limit
总结借鉴 :https://blog.csdn.net/q1054261752/article/details/48156177
group by 把重复的行字段归纳为一个字段 如name有两个张三 即归为一个张三 即缩为一行数据
group by 字句总是跟在where 子句后面,但where 子句缺省时,跟在from 后面
简单来讲 配合计算使用 先分组再计算
单独使用 只显示每个分组的一条记录 意义不大 和集合函数配套使用最好
先将其分组完再看每个分组的总数或平均等
和group_concat(name)一起使用 分组完groupby sex;可以查询这个年龄段的所有人姓名
可以很好的把分组情况展示出来
加上having可以限制输出的结果 一般和聚合函数使用 比如查出年龄18的有几人 再用having
限定人数大于多少的显示
和with rollup一起使用 可以对聚合函数显示全部值 如下决定12的出现
eg: SELECT 性别,COUNT(性别) FROM 表 GROUP BY 性别 WITH ROLLUP;
性别 个数
男: 10
女: 2
12
where是对表或视图查询限定
where 需在group by前面 先限定条件再分组 where age>18 group by name
原表有10个人 但是先判断大于18的 所以刷掉了两个不符合的 再根据姓名分组
having 是分组后再限定条件 一般和聚合函数一起使用 什么最高最低平均 数量大于多少啦什么的 where group by having三个关键词也可一起使用
group by 和 orderby 在orderby前面使用 先分组再按顺序排列
limit 0/1 单数字0查询0条 1查询1条
limit 2,3 双数字 第一位代表2+1 从第三个id开始查询 第二位代表查询的总条数3条 大数据下第一位可用where id>2代替 提高查询效率
limit 在范围查询下可以提高查询效率
比如登陆时确认用户名 如果在数据库中存在该用户名 找到对应的用户名停止检索 如不加limit会全盘检索再返回用户名
inner join 返回关联的条件
用on连接两表 如不写inner join用where连接两表
left join 返回左表全部条件 右表没有显示null right join 相反