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 子查询聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

sql sever 查询语句

SQL SEVER 开窗函数总结

Elasticsearch SQL 类似子查询聚合

递归 SQL:使用递归子查询分解的聚合函数

SQL语句汇总——聚合函数分组子查询及组合查询

调优 SQL 查询:在同一张表上具有聚合函数的子查询