2017-03-12SQL Sever 子查询聚合函数
Posted 疯丶无度
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2017-03-12SQL Sever 子查询聚合函数相关的知识,希望对你有一定的参考价值。
一、子查询
子查询:
把一条查询语句,当做值来使用
子句的查询结果必须是一列
子句可以返回多行数据,但必须是一列
子句返回的值为一个值的时候:
例如:
我只知道c026这个编号,我要查询比这个车价格低的全部车辆信息
select *from car where price<(select price from car where code=\'c026\') --先执行括号内返回一个值,再执行外边。此时括号内返回的是一个值的时候
若子句返回的是一列值而不是一个值的时候:
例如:
查询油耗与c016相等的或者与c029相等的或者与c014相等的全部汽车信息
select * from car where oil in(select oil from car where code=\'c016\' or code=\'c029\' or code=\'c014\')
in的用法:
select * from car where oil=7.4 or oil=8 or oil=8.3 与 select *from car where oil in (7.4,8,8.3) 执行结果一模一样
如果想得到油耗除7.4,8,8.3以外的汽车信息: select * from car where oil not in (7.4,8,8.3)
油耗的7到8之间的车的信息(包括7和8)
执行结果一样,但第一种更好一些
any用法:
油耗大于任意一个数,即为油耗大于其中的最小值即可。如果是油耗小于任意一个数,则为油耗小于最大值即可。
all 用法:
select * from car where oil> all(7.4,8,8.3)
油耗大于所有,则为油耗大于最大值。若是油耗小于所有,则为油耗小于最小值。
从多个表中查询返回到一个表中:
查询所有学生的Sname、Cno和Degree列。
select (select Sname from Student where Student.Sno=Score.Sno),Cno,Degree from Score
--其中Sname在Student表中,Cno和Degree在Score表中,其中两个表有Student.Sno=Score.Sno的连接
--用数据多的表做为主表来查询,其中Score为主表
查询所有学生的Sno、Cname和Degree列。
select Sno,(select Cname from Course where Course.Cno=Score.Cno),Degree from Score
--其中Sno和Degree在Score表中,Cname在Course表中,其中两个表有Course.Cno=Score.Cno的连接
--用数据多的表做为主表来查询,其中Score为主表
二、聚合函数
1、max,min:取最大值,最小值
--查询油耗最小的汽车的信息
select * from car where oil=(select max(oil) from car)
2、avg:取平均值
--查询汽车的平均价格
其中 as 用来起别名
3、count:取总个数
--求一下一共有多少车
即为求一下一共多少行
4、sum:求和
--求一下所有车的总价
按油耗进行分组,并看一下每组有多少辆车
注意:
--查询Score表中至少有5名学生选修的并以3开头的课程的平均分数。
select AVG(degree) from score where Cno =(select Cno from Score where Cno like \'3%\' group by Cno having count(*)>=5
在 group by 后面跟筛选条件的话得用 having 代替 where
以上是关于2017-03-12SQL Sever 子查询聚合函数的主要内容,如果未能解决你的问题,请参考以下文章