查询练习题

发布 2021-05-09 05:46:28 阅读 9483

《网络数据库》讲稿。

简单的单表查询。

例1:检索出2024年6月1日之后出生的学生的姓名、性别和民族,并按降序排列。

select 姓名,性别,民族 from 学生 where 出生日期》'1983-6-1' order by 出生日期 desc

多表查询。在from后跟随多个表。

例1:查找出已修学分达到20分的学生的姓名、出生日期、班级名称、已修学分。

select 姓名,出生日期,班级名称,已修学分from 学生,班级where 学生。班级编号=班级。班级编号and 已修学分》=20

解释:这里的“学生。班级编号=班级。

班级编号”是连接条件。如果在from短语中有两个表,那么这两个表必须具备可建立联系的字段,否则无法查询。如果from短语中的多个表中有同名字段,当使用这些字段名时,需要在字段名左边加上表名和圆点,作为字段名的前缀。

练习题01:查找出已修学分低于20分的学生的姓名、性别和班主任。

练习题02:查找出学生“王林”的班主任。

练习题03:查找出班主任“刘成河”班的全部男生的信息。

例2:查找出课程“中国历史”考试及格的全部学生的学号、姓名。

select 学生。学号,姓名 from 学生,课程,成绩 where 分数》=60 and 课程名称='中国历史' and 学生。学号=成绩。

学号 and 成绩。课程编号=课程。课程编号。

练习题04:查找出课程“中国历史”考试及格的全部学生的学号、姓名、班级名称和分数。

练习题05:查找出全部同学的所有考试的姓名、课程名称、分数,查找结果的格式如下:

嵌套查询 p121-126

例1:查找出取得过95分及其以上考试成绩的学生的学号和姓名。

select 学号,姓名 from 学生 where 学号in (select 学号 from 成绩 where 分数》=95)

解释:该命令中的in相当于集合运算的包含运算符∈。括号外的查询称为外层查询;括号内的查询称为内层查询(也称为“子查询”)。内层查询的结果被当做是一个集合。

p104例2:查找出“计算机应用”课程考试取得95分及其以上考试成绩的学生的学号和姓名。

select 学号,姓名 from 学生 where 学号 in

(select 学号 from 成绩 where 分数》=95 and 课程编号 in

select 课程编号 from 课程 where 课程名称='计算机应用'))

例3:查找出所有学生的考试都及格的班级名称。

答案一:select 班级名称 from 班级 where 班级编号 not in

(select 班级编号 from 学生 where 学号 in

select 学号 from 成绩 where 分数<60))

答案二:select 班级名称 from 班级。

where not exists (select * from 学生。

where exists (select * from 成绩。

where 分数<60 and 班级。班级编号=学生。班级编号 and 成绩。学号=学生。学号))

答案三:select 班级名称 from 班级。

where not exists

select * from 成绩,学生

where 班级。班级编号=学生。班级编号 and 学生。学号=成绩。学号 and 分数<60)

练习题01:查找出班主任“刘成河”班的全部男生的信息。

练习题02:查找出考试全及格的课程名称。

练习题03:查找出所有学生的考试都及格的班级,并排除那些没有学生的班级。

练习题04:使用多表查询实现例1。

练习题05:使用多表查询实现例2。

练习题06:查找出“数学专业”班全体同学的姓名和“数学”课程考试分数。

三个特殊运算符。

一、谓词exists p122

exists判断子查询中是否为空集。

例1:查找出那些还没有学生的班级名称。

select 班级名称 from 班级 where not exists

(select * from 学生 where 学生。班级编号=班级。班级编号)

例2:检索出每个学生都选修了的课程(并且考试都及格)。

select 课程编号,课程名称 from 课程 where not exists

select 学号 from 学生 where not exists

select * from 成绩。

where 课程。课程编号=成绩。课程编号and 学生。学号=成绩。学号and 分数》=60))

练习题01:写出可实现例1要求的其他命令。

练习题02:写出可实现例2要求的其他命令。

二、范围运算符between …and… p103

该范围是一个闭区间,意思是在 …和… 之间,包括两个端点的值。

例3:查找出2024年6月1日至2024年6月1日之间出生的学生的信息。

select * from 学生 where 出生日期 between '1983-6-1' and '1984-6-1'

练习题03:查找出已修学分在15和20之间的学生的信息。

练习题04:查找出2024年6月1日至2024年6月1日之间出生的少数民族学生的信息。

练习题05:查找出已修学分在15和20之间、且“自然辨证法”课程的考试分数达到80分的学生的姓名、性别、所在班级。

三、字符串匹配运算符likep105

例4:查找出姓名中包含有“林”的学生的信息。

select * from 学生where 姓名like '%林%'

例5:查找出姓名中第二个字是“林”的学生的信息。

select * from 学生where 姓名like '_林%'

练习题06:查找出湖北出生的学生的信息。

练习题07:查找出武汉出生的学生的信息。

练习题08:查找出班主任“郭大壮”的班**生地是武汉的学生的姓名、班级。

练习题09:查找出至少参加了辛有余老师所任课程中一门课程考试的男生的姓名。至少写出两条不同的命令。

聚合函数及其分组查询。

为了完成后续题目,请首先计算出每位同学的已修学分。

update 学生 set 已修学分=(select sum(学分) from 成绩,课程。

where 学生。学号=成绩。学号and 分数》=60 and 成绩。课程编号=课程。课程编号)

一、常用统计(聚合)函数 p109表4-3

例1:计算出全部学生的平均已修学分。

select **g(已修学分) from 学生。

例2:计算出“软件工程”班全体同学的平均已修学分。

select **g(已修学分) from 学生 where 班级编号in(select 班级编号from 班级where 班级名称='软件工程')

练习题01:计算出“软件工程”和“计算机应用”两个班全体同学的平均已修学分。

注意:当子查询的结果只有一个数据时,可以用等号;为多个数据时,需用 in。

练习题02:计算出李建同学各门课程考试总分。

例3:查找出“数学专业”班“数学”课程考试的最高分数。

select max(分数) from 学生, 成绩。

where 学生。学号=成绩。学号 and

班级编号=(select 班级编号 from 班级 where 班级名称='数学专业')

and 课程编号=(select 课程编号 from 课程 where 课程名称='数学')

另一个答案。

select max(分数) from 成绩 where

学号 in (select 学号 from 学生 where 班级编号=(select 班级编号 from 班级 where 班级名称='数学专业'))

and 课程编号=(select 课程编号 from 课程 where 课程名称='数学')

例4:查找出“数学专业”班“数学”课程考试最高得分的同学姓名和分数。

select 姓名, 分数 from 学生, 成绩。

where 学生。学号=成绩。学号。

and 班级编号=(select 班级编号 from 班级 where 班级名称='数学专业')

and 课程编号=(select 课程编号 from 课程 where 课程名称='数学')

and 分数=

select max(分数) from 学生, 成绩 where 学生。学号=成绩。学号。

and 班级编号=(select 班级编号 from 班级 where 班级名称='数学专业')

and 课程编号=(select 课程编号from 课程 where 课程名称='数学'))

附:top … percent p98

二、group by短语。

group by后面跟随的是分组关键字段,按照关键字段的值,将记录分成若干个组,每一组转变为查询结果中的一行。

例5:计算出各班学生的平均已修学分。

select 班级编号,**g(已修学分) from 学生 group by 班级编号。

练习题04:计算出各门课程考试的平均分数。

练习题05:计算出各位学生的考试总分。

练习题06:计算出辛有余老师所任课程中每门课程的课程编号和学生平均考试分数。

三、别名及其应用 p113-114, p99

例6:查找出已修学分低于本班平均已修学分的学生信息。

select 姓名, 班级编号, 已修学分 from 学生。

where 已修学分<(select **g(已修学分) from 学生 xs where 学生。班级编号=xs.班级编号)

说明:在from短语中为表取别名也可省略as,例如from 学生 xs。

例7:查找和计算出各位学生的姓名和考试总分。

select 姓名, 总分。

from 学生, (select 学号, sum(分数) as 总分 from 成绩 group by 学号) as zf

where 学生。学号=zf.学号。

说明:在from短语中可用子查询的结果作为表,此时,必须为该子查询取别名。

在select短语中可为查询结果列取别名,其格式有三种,见p99。

练习题07:查找和计算出各门课程的名称及其考试的平均分数。

练习题08:查找和计算出各门课程的名称及其考试达到90分的人数。

查询综合练习题

1.显示每个学生的每门课的成绩。带有关系的选择查询 2.统计各系的男女教师人数 统计1992年参加工作的男教师人数分别保存为各自命名 自。选名称 的查询结果。带条件 计算的选择查询 3.统计各类职称教师人数,列字段显示 人数 预定义计算,性别分组的选择查询 4.求每个学生的平均分 四舍五入,取整 将...

sql查询练习题

商信息表 supplier 商标号 supplierid intpk 商名称 suppliername varchar 20 联系 suppliertel varchar 10 通信地址 address varchar 50 邮政编码 postcorder varchar 20 所在城市 city ...

查询操作练习题

在查询分析器中使用sql语言对下列各题进行操作 已知数据库s中含有3张表 student sno,sname,ssex,sage,sdept course cno,cname,hours sc sno,cno,grade 1.分别查询学生表和学生修课表中的全部数据。2.查询成绩在70到80分之间的学...