一、Order By用法
(1)作用:依照查询结果的某一列属性,进行相应的排序。
(2)排序方式的探索:
1)排序方式:
①ASC:升序排列。
②DESC:降序排列。
注意:可以将null视为无穷大,所以在升序的情况下,null放在最后面;在降序的情况下,null放在最前面。
2)单列属性排序
①将blog按照bid进行升序排序。
select *
from blog
order by bid asc
3)多列属性排序(先按前面的列属性进行排序,当出现一样的属性,就按照后面的属性进行相应的排序)
注意:也就是前面的排序优先级高,后续排序只能在前面的排序结果上进行相等的属性的再次排序(后续排序只改变局部)。
①例:将blog表中的按bid进行降序排序的基础上按照bname的升序排序。
select *
from blog
order by bid desc,bname asc
二、Group by的用法
(1)查询条件:按照查询结果集中的某一列(或多列),进行分组,值相等的为一组。
(2)聚合函数的作用对象
1)聚合函数(部分):count(表记录行数)、sum(总数)、avg(平均值)、max(最大值)、min(最小值)
例:对按bid后分组的表进行count(计数)
select bid,count(bid)
from blog
group by bid
(2)分组方法:按照指定一列或者多列值进行分组,值相同的一组。
1)使用Group By子句之后,SELECT的结果的列名中只能出现分组属性
①例:SELECT的结果的列名只有bid、count(bname)这两列
select bid,count(bname)
from blog
group by bid
(3)多个列属性进行分组
1) 通过bid和grade进行分组
select bid,grade,count(bid)
from blog
group by bid,grade
(4)使用having短语筛选最终输出结果
1)having和where的区别,作用对象不同。
①where语句作用于基表或视图,从中选择满足条件的元组。
②having短语作用于元组,从中选择满足条件的组。
例:查找blog表中博客序号(查看次数)大于100的分组,分组中博客的数量大于3。
select number,count(bname)
from blog
where bid>100
group by number
having count(bname)>3
2)having详解:
①使用having语句的原因:where关键字无法与合计函数一起使用
②例:查找blog表中bid(博客序号)大于100的根据btype进行分组,找出分类的博客的浏览次数大于300的分组。
select btype,count(number)
from blog
where bid>100
group by btype
having sum(number)>300