实验二 单表查询

编程入门 行业动态 更新时间:2024-10-26 15:14:47

实验二 单表查询

实验二 单表查询

文章目录

  • 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;

总结

  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的个数

更多推荐

实验二 单表查询

本文发布于:2024-02-12 00:06:45,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1684483.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!