今天继续SQL第五天:SQL中的子句
OUTLINE
- where
- starting with
- order by
- group by
- having
- 附加:where和having的区别
where
1、where使我们返回的数据更具有选择性
2、where是使用频率仅次于select 和 from的语句
starting with
1、starting with类似于 like子句
比如:select name,years,score from student where name like ‘Em%’
等同于:select name,years,score from student where name starting with(‘Em’)
2、个人觉得没有like好用,记住like就足够了~
order by
1、让查询输出的结果按照一定的规则进行显示
2、desc表示降序;asc表示升序(descending;ascending)
3、asc是默认选项
4、如果已知要排序的列是第一列,那么可以直接 order by 1 来代替输入的名字
group by
1、使用场景:当我们想知道每一类别东西的各种汇总情况(比如平均的、合计的等)时,我们就要想到group by,也只有group by可以做;
2、它可以对select的结果进行分组之后再应用汇总函数
3、它可以对多个列进行分组 group by col1,col2
having
1、我们需要对分组的数据进行限制
比如:我们想知道公司里面每个部门的平均薪资,我们就需要对职工所属的部门进行group by,求出其平均薪资
同时:我们又有一个想法,想知道哪些部门的平均工资到达2万以上的,于是我们就有了这样一个需求:求出每一个部门的平均薪资之后显示出那些工资大于2万的部门。这里就可以用having
而与此同时,对于where,它的语法规则是不能和汇总函数混合使用。而having允许你将汇总函数作为条件
2、having avg(salary) > 20,having avg(salary) in (12,25);
附加:where和having的区别
where —> 选定符合条件的行,进行行的过滤
having —> 为聚合结果指定条件,常跟group by 连用,但不仅只限于group by
区别:
① where 指定行所对应的条件
having指定组所对应的条件
② 语句执行效率
where 是先过滤不符合条件的行再进行排序或者其他操作
having是先进行排序、再分组、再聚合
③ where子句中不能用聚合函数
having子句可以
Where:
Select goods_name,goods_number from sw_goods where good_price > 100
Having:
Select goods_category_id,avg(goods_price) as ag from sw_goods group by goods_category
having Ag > 100