数据查询(续)

接着上次写


挑些不太好懂的写加强印象

例 3.27 查询CS、MA、IS系学生的姓名和性别

SELECT Sname,Ssex
FROM Student
WHERE Sdept IN('CS','MA','IS');

等价于后面多条件查询

SELECT Sname,Ssex
FROM Student
WHERE Sdept='CS'OR Sdept='MA' OR Sdept='IS'; 

在这里插入图片描述

在满足条件的元组集合中输出Sname列和Ssex列

字符匹配

语法格式: [NOT] LIKE ‘<匹配串>′ [ESCAPE ‘<换码字符>′ ]

** % (百分号)代表任意长度(长度可以为0)的字符串。例如a%b表示以a开头,以b结尾的任意长度的字符串。

** _ (下划线)代表任意单个字符。例如a_b表示以a开头,以b结尾的长度为3的任意字符串

例 3.35 查询以“DB_”开头,且倒数第三个字符为i的课程的详细情况

SELECT*
FROM Course
WHERE Cname LIKE 'DB\_%i__'ESCAPE'\';

匹配串’DB_%i__'中第一个_因前有 ’ \ ‘,被转义成普通字符’’。i后面的两个’'仍作通配符

ORDER BY 子句

ORDER BY 子句对查询结果按照一个或多个属性列的升序(ASC)或降序(DESC)排列,默认值为升序。

例 3.40 查询全体学生情况,查询结果按所在系的系号升序排列,同一系中的学生按年龄降序排列

SELECT *
FROM Student
ORDER BY Sdept,Sage DESC;

在这里插入图片描述

多个属性列的排序原理:
在这里插入图片描述

聚集函数
COUNT(*)    统计元组个数
COUNT([DISTINCT | ALL] <列名>)    统计一列中值的个数
SUM([DISTINCT | ALL] <列名>)    计算一列值的总和
AVG([DISTINCT | ALL] <列名>)    计算一列值的平均值
MAX([DISTINCT | ALL] <列名>)    求一列值中的最大值
MIN([DISTINCT | ALL] <列名>)    求一列值中的最小值

例 3.42 查询选修了课程的学生人数

SELECT COUNT(DISTINCT Sno)
FROM SC;

在这里插入图片描述

一个学生要选修多门课程,为避免重复计算学生人数,必须在COUNT函数中使用DISTINCT

GROUP BY 子句

比较难懂,详细写一下

GROUP BY子句将查询结果按某一列或多列的值分组,值相等的为一组

对查询结果分组的目的是为了细化聚集函数的作用对象。如果未对查询结果分组,聚集函数将作用于整个查询结果,分组后聚集函数将作用于每一个组,即每一组都有一个函数值


例 3.46 求各个课程号及相应的选课人数

SELECT Cno,COUNT(Sno)
FROM SC
GROUP BY Cno;

在这里插入图片描述
该语句对查询结果按Cno的值分组,所有具有相同Cno值的元组为一组,然后对每一组作用聚集函数COUNT进行计算,以求得该组的学生人数。

如果分组后还要求按一定的条件对这些组进行筛选,这种只输出满足指定条件的组则可以使用HAVING短语指定筛选条件。

例 3.47查询选修的三门以上课程的学生学号

SELECT Sno
FROM SC
GROUP BY Sno
HAVING COUNT(*)>2;

在这里插入图片描述

这里先用GROUP子句按Sno进行分组,再用聚集函数COUNT对每一组计数。HAVING短语给出了选择组的条件,只有满足条件的组才会被选出来

附下表:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值