数据库应用-数据查询实验答案

更新时间:2024-05-21 00:45:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验3 数据查询 1.实验目的

(1) 掌握使用Transact-SQL的SELECT语句进行基本查询的方法。 (2) 掌握使用SELECT语句进行条件查询的方法。

(3) 掌握SELECT语句的GROUP BY、ORDER BY以及UNION子句的作用和使用方法。 (4) 掌握嵌套查询的方法。

(5) 掌握连接查询的操作方法。 2.实验内容及步骤

请先附加studentsdb数据库,然后完成以下实验。 简单查询:

(1)在studentsdb数据库中,使用下列SQL语句将输出什么?请用文字描述 SELECT COUNT(*) FROM grade 答:

SELECT YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE()) 答:(无列名) (无列名) (无列名) 2015 11 4 (2)

① 在student_info表中,查询每个学生的学号、姓名、出生日期信息。 答:select 学号,姓名,出生日期 from student_info ② 查询学号为‘0001’的学生的姓名和家庭住址。

答:select 姓名,家庭住址 from student_info where 学号='0001' ③ 找出所有男同学的学号和姓名。

答:select 学号,姓名 from student_info where 性别='男' (3)

① 在grade表中查找分数在‘80~90’范围内的学生的学号和分数。 答:select 学号,分数 from grade where 分数 between 80 and 90 ② 在grade表中查询课程编号为k003的学生的平均分。

答:select 课程编号,avg(分数) 平均分 from grade group by 课程编号 having 课程编号='k003' ③ 在grade表中查询学习各门课程的人数。

答:select 课程编号,count(学号) from grade group by 课程编号 ④ 将学生按出生日期由大到小排序。

答:select 姓名,出生日期 from student_info order by 出生日期 desc ⑤ 查询所有姓“张”的学生的学号和姓名。

答:select 学号,姓名 from student_info where 姓名 like '张%'

(4)对student_info表,按性别顺序列出学生的学号、姓名、性别、出生日期及家庭住址,性别相同的按学号由小到大排序。

答:select 学号,姓名,性别,出生日期,家庭住址 from student_info order by 性别,学号 (5)使用GROUP BY查询子句,列出各个学生的平均成绩。

答:select 学号,avg(分数)平均成绩 from grade group by 学号

(6)使用UNION运算符将student_info表中姓“张”的学生的学号、姓名与 curriculum表的课程编号、课程名称返回在一个表中, 且列名为u_编号、u_名称,

答:select 学号 as u_编号,姓名 as u_名称 from student_info where 姓名 like ‘张%’ union

select 课程编号 as u_编号,课程名称 as u_名称 from course_info 图1-8 联合查询结果集 嵌套查询: (7)

① 在student_info表中查找与“刘卫平”性别相同的所有学生的姓名、出生日期。 --select * from student_info

答:select 姓名,出生日期 from student_info where 性别='男'(select 性别 from student_info

where 姓名='刘卫平')

② 使用IN子查询查找所修课程编号为k002、k005的学生学号、姓名、性别。

答:select 课程编号 from course_info where 课程编号='k002' or 课程编号='k005'

③ 列出学号为’0001’的学生的分数比’0002’学号的学生的最低分数高的课程编号和分数。

答:select 课程编号,分数 from grade where 学号='0001' and 分数>any (select 分数 from grade where 姓名='0002')

④ 列出学号为’0001’的学生的分数比学号为’0002’的学生的最高成绩还要高的课程编号和分数。 答:select 课程编号,分数 from grade where 学号='0001' and 分数>all (select 分数 from grade where 姓名='0002') 连接查询。 (8)

①查询分数在80~90范围内的学生的学号、姓名、分数。[用WHERE连接查询] 答:select student_info.学号,姓名,分数 from student_info,grade where student_info.学号=grade.学号 and 分数 between 80 and 90

②查询学习“C语言程序设计”课程的学生的学号、姓名、分数。 [用INNER JOIN 连接查询] 答:select student_info.学号,姓名,分数 from student_info inner join

grade on student_info.学号=grade.学号

inner join course on 课程名称='C语言程序设计'

③查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。

答:select a.学号,a.姓名,c.课程名称,b.分数 from student_info a inner join grade b on a.学号=b.学号

inner join course c on b.课程编号=c.课程编号 where(a.性别='男')

④查询每个学生的所选课程的最高成绩,要求列出学号、姓名、课程编号、分数。

答:select a.学号,c.姓名,a.课程编号,a.分数 from grade a inner join student_info c on a.学号=c.学号

where(a.分数=(select max(b.分数)from grade b where a.学号=b.学号))

⑤查询所有学生的总成绩,要求列出学号、姓名、总成绩,没有选修课程的学生的总成绩为空。

答:select a.学号,a.姓名,b.总成绩 from student_info a left outer join(select 学号,sum(分数) as 总成绩 from grade group by 学号)b on a.学号=b.学号

⑤ 为grade表添加数据行:学号为'0004'、课程编号为K006、分数为‘76‘。查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数,curriculum表中没有的课程列值为空。[使用右外连接。] 答:insert into grade(学号,课程编号,分数) values('0004','K006',76)

select a.课程编号,a.课程编号,a.课程编号,b.选修人数 from course a right outer join(select 课程编号,count(*) as 选修人数 from course group by 课程编号)b on a.课程编号=b.课程编号

实验名称 数据查询 实验日期

实验目的 掌握使用Transact-SQL的SELECT语句进行基本查询的方法。 掌握使用SELECT语句进行条件查询的方法。

掌握SELECT语句的GROUP BY、ORDER BY以及UNION子句的作用和使用方法。 掌握嵌套查询的方法。

掌握连接查询的操作方法。

实验环境 Windows 7 ,SQL Server 2008 实验内容 按实验步骤完成简单查询,嵌套查询,连接查询。

实验中要求在查询设计器中用语句完成的实验,请在这里填写他们的语句,并标上题号。 试验思考 回答以下问题:

(1)条件查询:order by ,INTO,UNION,GROUP BY ,HAVING,这些关键词意思是什么? (4)在嵌套查询中,SOME、ANY、IN 关键词用法说明。 (5)在连接查询中,述说内连接,外连接,交叉连接特点。

【手写“回答以下问题”,若空白处不够,请附页完成】

本文来源:https://www.bwwdw.com/article/v4d7.html

Top