数据库技术与应用实验 实验4 数据查询
实验4 数据查询 学号:18103317 专业:电子信息工程
一、实验内容和步骤
1.在studentsdb数据库中,使用下列SQL语句将输出什么?并说明语句中使用函数所实现的功能。
(1)SELECT COUNT(*) FROM 成绩表
(2) SELECT SUBSTRING(姓名,1,2) FROM 学生表
(3)SELECT UPPER(‘kelly’) (小写字母->大写字母) (4)SEIECT Replicate(‘kelly’,3) (将“kelly”重复3次) (5) SELECT SQRT(分数) FROM 成绩表 WHERE 分数>=85 (SQRT()开根号) (6)SELECT 2,3,POWER(2,3) (乘方,即23) (7)SELECT YEAR(GETDATE()),MONTH(GETDATE()),DAY(GETDATE())
2.在studentsdb数据库中使用SELECT语句进行基本查询。 (1)在学生表中,查询每个学生的学号、姓名、出生日期信息。 (2)查询学号为0002的学生的姓名和家庭住址。 (3)找出所有男同学的学号和姓名。 3.使用SELECT语句进行条件查询
(1)在成绩表中查找分数在80~90范围内的学生的学号和分数。 (2)在成绩表中查询课程编号为C003的学生的平均分。
SELECT AVG(分数) FROM 成绩表 WHERE 课程编号='C003' (3)在成绩表中查询学习各门课程的人数。
SELECT COUNT(*) FROM 成绩表 GROUP BY 课程编号
南京师范大学中北学院
1
数据库技术与应用实验 实验4 数据查询
(4)将学生按出生日期由大到小排序。
SELECT * FROM 学生表 ORDER BY 出生年月 DESC (5)查询所有姓“张”的学生的学号和姓名。
SELECT * FROM 学生表 WHERE 姓名 LIKE '张%' 4.嵌套查询
(1)在学生表中查找与“刘卫平”性别相同的所有学生的姓名、出生日期。 SELECT 姓名,出生年月 FROM 学生表
WHERE 性别= (SELECT 性别
FROM 学生表 WHERE 姓名='刘卫平')
(2)使用IN子查询查找所修课程编号为C002、C005的学生学号、姓名、性别。 SELECT 学号,姓名,性别 FROM 学生表
WHERE 学生表.学号 IN (SELECT 学号 FROM 成绩表
WHERE 课程编号 IN('C002','C005'))
(3)列出学号为0001的学生的分数比0002号的学生的最低分数高的课程编号和分数。
SELECT 课程编号,分数 FROM 成绩表
WHERE 学号='0001'AND 分数>ANY (SELECT 分数
FROM 成绩表 WHERE 学号='0002') (4)列出学号为0001的学生的分数比学号为0002的学生的最高成绩还要高的课程编号和分数。
SELECT 课程编号,分数 FROM 成绩表
WHERE 学号='0001'AND 分数>(SELECT MAX(分数)
FROM 成绩表 WHERE 学号='0002')
南京师范大学中北学院 2
数据库技术与应用实验 实验4 数据查询
5.多表查询
(1)查询分数在80~90范围内的学生的学号、姓名、分数。 SELECT 学生表.学号,姓名,分数 FROM 学生表,成绩表
WHERE 学生表.学号=成绩表.学号 AND 分数 BETWEEN 80 AND 90 (2)查询学习“C语言程序设计”课程的学生的学号、姓名、分数。 SELECT 学生表.学号,姓名,分数
FROM 学生表 INNER JOIN 成绩表 ON 学生表.学号=成绩表.学号 INNER JOIN 课程表 ON 课程表.课程编号=成绩表.课程编号 WHERE 课程表.课程名称='C语言程序设计'
(3)查询所有男同学的选课情况,要求列出学号、姓名、课程名称、分数。 SELECT 学生表.学号,姓名,课程名称,分数
FROM 学生表 INNER JOIN 成绩表 ON 学生表.学号=成绩表.学号 INNER JOIN 课程表 ON 课程表.课程编号=成绩表.课程编号 WHERE 学生表.性别='男'
(4)查询各门课程的最高成绩,要求列出课程编号、课程名称、分数。 SELECT b.课程编号,c.课程名称,MAX(b.分数)AS 最高分
FROM 成绩表 b INNER JOIN 课程表 c ON b.课程编号=c.课程编号 GROUP BY b.课程编号,c.课程名称
(5)查询所有学生的总成绩,要求列出学号、姓名、总成绩。 SELECT b.学号,姓名,SUM(b.分数)AS 最高分
FROM 学生表 a LEFT JOIN 成绩表 b ON a.学号=b.学号 GROUP BY b.学号,a.姓名 提示:使用左外连接。
(6)查询所有课程的选修情况,要求列出课程编号、课程名称、选修人数。 SELECT b.课程编号,a.课程名称,COUNT(b.课程编号) AS 选修人数 FROM 课程表 a RIGHT JOIN 成绩表 b ON a.课程编号=b.课程编号 GROUP BY b.课程编号,a.课程名称 提示:使用右外连接。
南京师范大学中北学院 3
数据库技术与应用实验 实验4 数据查询
(7)查询所有没有选修课C002的学生信息,返回结果包括学号、姓名、性别。 SELECT 学号,姓名,性别 FROM 学生表
WHERE NOT EXISTS (SELECT * FROM 成绩表
WHERE 课程编号='C002' AND 学号=学生表.学号)
提示:使用条件运算符EXISTS。
(8)在学生表和成绩表之间实现交叉连接。 SELECT 学生表.学号,姓名,成绩表.课程编号,分数 FROM 学生表 CROSS JOIN 成绩表
(9)查询每个学生的所选课程的成绩,并列出学号生成分组汇总行(总成绩)和明细行(各课成绩)。
SELECT 学号,课程编号,分数 FROM 成绩表 ORDER BY 学号
COMPUTE SUM(分数)BY 学号
提示:使用SELECT语句的COMPUTE选项。
南京师范大学中北学院 4