实验二 单表查询
- 实验二 单表查询 推荐度:
- 相关推荐
实验二 单表查询
文章目录
- 1.查询年级为2016的所有学生的学号、姓名和年级。
- 2. 查询课时为64或48的课程名称和学时。
- 3.查询所有被选课程的课程号。
- 4.查询所有课中含有“数”的课程号及课程名称。
- 字符串匹配
- 5. 统计所有教师的平均工资。
- 6. 查询没有参加考试的学生学号。
- 注意:
- 7. 查询每位教师所任课程的平均成绩,按平均成绩降序排列(提示:每个教师只担任一门课程)。
- 8.统计各个课程的选课人数和最高成绩。
- 9.查询至少选修了3门课程的学生编号和选修课程数。
- 10.查询选修了B001或B0 02任意一门课程的学生学号。
- 11. 查询至少被三名学生选修的课程号。
- 总结
在实验一创建库、表、录入数据的基础上,完成下列操作。
1.查询年级为2016的所有学生的学号、姓名和年级。
select sno,sname,Ssex
from Students
where grade='2016';
分析:要显示的是学生的学号姓名班级,所以用select sno,sname,Ssex
,这些属性都在Students表中,所以可以直接选取from Students
,要选择的条件是年级为2016的,条件选择用where
2. 查询课时为64或48的课程名称和学时。
select Cname,Chour
from Courses
where Chour=64 or Chour=48;
分析:我们需要的是课程名称(cname)和学时(chour)这两个属性都在courses表中,所以可以直接选取courses表(from Courses),条件是chour为64或48,where条件可以用比较运算符or
连接
常用的比较运算符:
运算符 | 含义 |
---|---|
=, >,<,>=,<=, !=,> | 比较大小 |
AND, OR, NOT | 多重条件 |
IN | 确定集合 |
BETWEEN AND | 确定范围 |
IS NULL | 空值 |
LIKE | 字符匹配 |
3.查询所有被选课程的课程号。
select distinct cno
from STC;
DISTINCT:返回所有不重复行,不写默认是ALL(返回所有行,包括重复行)
4.查询所有课中含有“数”的课程号及课程名称。
select Cno,Cname
from Courses
where Cname LIKE '%数%';
此条涉及到模糊查询字符串匹配
字符串匹配
格式:属性名 LIKE ‘<匹配串>’
属性名 NOT LIKE ‘<匹配串>’
例如
Cname LIKE '%数%' #含有“数”的
Cname NOT LIKE '%数%' #不含有“数”的 例如 数学 高数 只要字符串里有‘数’都符合条件
Cname LIKE '数%' #以“数”开头的,例如 数学 数字 ,但是‘高数’不符合,因为‘高数’是高开头的
◆<匹配串>=字符常量+通配符
两种通配符:
%:代表任意长度
(长度可以为0)的字符串
_:代表任意单个
字符
5. 统计所有教师的平均工资。
select AVG(salary)
from Teachers
SQL 拥有很多可用于计数和计算的内建函数。
AVG() 函数返回数值列的平均值。
点击查看更多函数
6. 查询没有参加考试的学生学号。
select Sno
from STC
where score is null;
没有参加考试的学生,也就是成绩为空
的学生
注意:
值为空,score is null 中的null不能加引号 ‘ ’ ,加了引号后表示字符串null,这种写法是错误的
score is 'null'
7. 查询每位教师所任课程的平均成绩,按平均成绩降序排列(提示:每个教师只担任一门课程)。
select Tno,avg(score)
from STC
group by Tno
order by avg(score) desc;
代码 | 含义 |
---|---|
select Tno,avg(score) | 选择(select)显示平均成绩(avg(score))和教师编号(Tno), |
group by Tno | 根据教师编号(Tno)来分组 |
order by avg(score) desc | 根据平均成绩,降序(desc) |
8.统计各个课程的选课人数和最高成绩。
select count(*),max(Score)
from STC
group by Cno
代码 | 含义 |
---|---|
group by Cno | 统计各个课程的东西,所以要以课程号来分组 |
count(*) | 统计选课人数,也就是,在stc表中统计每一个课程号出现的次数count(cno),因为已经以cno分组了(group by Cno),所以可以写成count(*),count(cno)也不错 |
max(Score) | 最高成绩可以用max函数 |
9.查询至少选修了3门课程的学生编号和选修课程数。
select Sno,count(Cno)
from STC
group by Sno having count(Cno)>=3;
要以学号来分组,统计每个学号的课程号个数。
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与聚合函数一起使用。
HAVING 子句可以让我们筛选分组后的各组数据。.
10.查询选修了B001或B0 02任意一门课程的学生学号。
select distinct sno
from STC
where Cno='B001' or Cno='B002';
11. 查询至少被三名学生选修的课程号。
select Cno
from STC
group by Cno HAVING count(Cno)>=3;
总结
- 你select后面跟的东西,就是你想要显示的东西,例如:select Cno,那结果就会只显示Cno的内容
- 使用group by时,不能用where,WHERE 关键字无法与聚合函数一起使用,要改用having,HAVING 子句可以让我们筛选分组后的各组数据
- count()统计括号中内容的个数,COUNT (*) 函数返回表中的记录有几条,常常和group by连用,分组后统计以group by分组的每个内容的个数,例如,我们根据cno分组,group by cno,COUNT(*) 就会返回每一种cno的个数
最新文章
- 获取rowid的两种方法。
- spring之Annotation
- 哀悼日设置网站主题为黑白主题
- Win7 64位中MinGW和MSYS的安装
- 网络Socket编程
- [转]Windows IIS WEB服务器配置安全规范
- HTK 安装、编译以及测试——Ubuntu 14.04
- 叶片杰伦恋夜语
- void指针(void *)是什么?如何使用它
- 使用HTML5+调用手机摄像头和相册
- c函数itoa和atoi实现
- extern 用法小结
- 微信小程序60秒倒计时
- 生成网站与发布网站的区别
- 基于STM32F429的语音识别交互系统
- word 如何设置页码?分页?分节?
- cs,ds,ss,es?即cs,ds,ss,es的区别