数据库原理——聚集函数

聚集函数

SQL语言提供了五个作用在简单列值几何上的内置聚集函数,分别是COUNT,SUM,AVG,MAX,MIN
5个聚集函数的介绍如下:

聚集函数名参数类型结果类型描述
Count任意集合一个数值计算几何元素个数
sum数值集合一个数值计算集合的和
avg数值集合一个平均值计算集合的平均值
max字符或数值集合集合中的最大者找出集合中的最大值
min字符或数值集合集合中的最小者找出集合中的最小值

示例

1、 求教师的工资总额

SELECT SUM(Salary) FROM Teacher

2、求数据库课程的平均值

SELECT AVG(Score) FROM Course C, SC
WHERE C.Cname = '数据库' AND C.C# = SC.C#

分组查询

SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值的元组划到一个组或一个集合中,同时处理多个组或集合的聚集运算。
分组 是在WHERE后面加GROUP BY 分组条件

在这里插入图片描述

示例

SC表如下:
SC
1、 求每一个学生的平均成绩

SELECT S#, AVG(Score) FROM SC
GROUP BY S#

该语句是按照学号进行分组,学号相同的为一组,再对每一组进行求平均值的操作。

2、 求每一门课程的平均成绩

SELECT C#, AVG(Score) FROM SC
GROUP BY C#

按照课程号进行分组

分组过滤

首先聚集函数不允许在WHERE字句中使用,即不能这么些SELECT * FROM SC WHERE AVG(Grade)>60 这样的写法是错误,因为WHERE子句只能对每一个元组进行条件过滤,操作对象是元组。而聚集函数的操作对象是集合。因此要对集合(即分组)进行过滤需要采用分组过滤的方式。
分组过滤 满足过滤条件的分组留下,不满足的筛去
HAVING子句 又称为分组过滤子句,是作用域GROUP BY之后,没有GROUP BY便没有HAVING子句。
在这里插入图片描述

示例

1、求不及格课程超过两门的同学的学号,其中SC(SN 学号, CN 课程号, Teacher 老师)

SELECT SN FROM SC
WHERE Score < 60
GROUP BY SN HAVING COUNT(*)>2

HAVING 子句 与WHERE 子句表达条件的区别

区别

示例

1、 求有两门以上不及格课程同学的学号及其平均成绩,其中SC(SN 学号, CN 课程号, Teacher 老师)

SELECT SN, AVG(Score) FROM SC
WHERE SN IN 
	(SELECT SN FROM SC
	WHERE Score < 60
	GROUP BY SN HAVING COUNT(*)>2
	)
GROUP BY SN 

并-差-交

在这里插入图片描述

示例

1、 求学过002好课的同学或学过003好课的同学的学号

SELECT SN FROM SC WHERE CN = '002'
UNION
SELECT SN FROM SC WHERE CN = '003'

2、已知两个表
Customers(CID, Cname, City, Discnt)
Agents(AID, Aname, City, Percent)
求客户所在的城市或者代理商所在的城市

SELECT City FROM Customers
UNION
SELECT City FROM Agents

3、求既学过002号课,又学过003号课的同学学号

SELECT SN FROM SC WHERE CN='002'
INTERSECT
SELECT SN FROM SC WHERE CN='003'

4、假定所有学生都有选课,求没学过002号课程的学生学号

Select DISTINCT SN From SC
EXCEPT
Select SN From SC Where CN = '002'

不用EXCEPT实现

Select DISTINCT SN From SC SC1
Where not exists ( Select * From SC
Where CN =002and SN = SC1.SN)

空值的处理

在SQL标准中和许多现流行的DBMS中,空值被用一种特殊的符号Null来
标记
,使用特殊的空值检测函数来获得某列的值是否为空值。
空值检测 is [not ] null 测试指定列的值是否为空值

示例

1、 找出年龄值为空的学生姓名

Select Sname From Student
Where Sage is null ;
现行DBMS的空值处理小结
1、除is[not]null之外,空值不满足任何查找条件
2、如果null参与算术运算,则该算术表达式的值为null
3、如果null参与比较运算,则结果可视为false。在SQL-92中可看成unknown
4、如果null参与聚集运算,则除count(*)之外其它聚集函数都忽略null

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值