mysql概要(四)order by ,limit ,group by和聚合函数的特点,子查询

1.order by 默认按升序排列(asc/desc),多字段排序 order by 字段 排序方式,字段2 排序方式,..;

   在分组排序中,排序是对分组后的结果进行排序,而不是在组中进行排序。

 

select * from stu order by score desc,name asc;//优先score ,然后name排序

 

2.limit 在语句表示,截取记录的条数。一般和order by 配合使用(大数据下Limit使用

limit[offset][N]

   offset: 偏移量   N:条数; 如limit(2,2),即从第三记录开始取两条记录。当一个参数时:limit 2,即从第一条记录开始取2条

select * from ibmng limit 10,10

3.关于分组和聚合函数的一个问题,(补充

使用聚合函数,分组时其他字段的值是从库中取组第一次出现时对应数据,聚合函数的得到值和其他字段的值并不是原来本该对应的一条记录。只是组合一起      

如:以班级进行分组,获取成绩最好的学生,

select name ,max(score) from stu group by bianji;//错误,这样最大成绩对应的学生并不是原学生。

如果你想在学校学生表中获取班级成绩最好的学生信息,如果想使用简单分组是不行,上面已经说明,

     方法一:先使用分组查询出班级和最大成绩的结果作为新表,再和原表进行联合查询出所对应的学生信息。(保证有多个相同成绩的存在情况)

     方法二:如果是最好成绩只有一个话的特列,倒是可以先按班级和成绩排序结果集再进行分组(利用了分组获取第一次出现的规则。类似获取商品中每类物品的最高价格的物品:

                 

4子查询 where from exists

   where 子查询:聚合函数可以直接用,(差点以为只能在group中使用了,但是一般不能和别的字段一起使用)

使用不同的子查询查出栏目下最新商品(只是id最大的那个为最新)

where

from

exists:查询出有商品的栏目:可以理解成外查询中每条记录,代入到内查询中,如果内查询有结果,就表示外查询的当前记录满足条件。

 exists,有点类似in 

posted @ 2016-01-14 23:19  假程序猿  阅读(7403)  评论(0编辑  收藏  举报