实验二 单表查询

本文介绍了SQL在数据库查询中的应用,包括查询特定年级学生信息、筛选特定课时课程、获取选修课程号、进行模糊搜索、计算教师平均工资、找出未考试学生、计算教师课程平均分、统计课程选课人数与最高分、识别选修多门课程的学生及选修特定课程的学生等操作。通过这些实例,展示了SQL在数据处理和分析中的强大功能。
摘要由CSDN通过智能技术生成


在实验一创建库、表、录入数据的基础上,完成下列操作。

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;

总结

  1. 你select后面跟的东西,就是你想要显示的东西,例如:select Cno,那结果就会只显示Cno的内容
  2. 使用group by时,不能用where,WHERE 关键字无法与聚合函数一起使用,要改用having,HAVING 子句可以让我们筛选分组后的各组数据
  3. count()统计括号中内容的个数,COUNT (*) 函数返回表中的记录有几条,常常和group by连用,分组后统计以group by分组的每个内容的个数,例如,我们根据cno分组,group by cno,COUNT(*) 就会返回每一种cno的个数
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夏佳怡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值