数据库系统原理实验报告-SQL查询语句
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据库系统原理
实验报告
姓名:xxx
学号:xxxxxxxx
专业:xxxxx
日期:xxxxx
Lab2一、实验目的
进一步熟悉关系数据库标准语言SQL。
二、实验环境
1)Windows 10
2)SQL Server 2017
三、实验内容
给定如学生表、课程表和学生作业表所示的信息。
表2 课程表
表3 学生作业表
K0020529707085 K0020531808080 K0020538657585 K0020592758585 K0060531808090 K0060591808080 M0010496707080 M0010591657575 S0010531808080 S00105386080
写出如下SQL语句:
1.查询数据库中有哪些专业班级。
(5分)
Sql语句:
SELECT专业班级
FROM学生表;
查询结果截图:
2.查询在1986年出生的学生的学号、姓名和出生日期。
(5分)Sql语句:
SELECT学号,姓名,出生日期
FROM学生表
WHERE出生日期LIKE'1986%';
查询结果截图:
3.查询05级的男生信息。
(5分)
Sql语句:
SELECT*
FROM学生表
WHERE学号LIKE'05%'AND性别='男';
查询结果截图:
4.查询没有作业成绩的学号和课程号。
(5分)
Sql语句:
SELECT学号,课程号
FROM学生作业表
WHERE作业1成绩IS NULL OR作业2成绩IS NULL OR作业3成绩IS NULL;
查询结果截图:
5.查询选修了K001课程的学生人数。
(5分)
Sql语句:
SELECT COUNT(DISTINCT学号)
FROM学生作业表
WHERE课程号='K001';
查询结果截图:
6.查询数据库中共有多少个班级。
(5分)
Sql语句:
SELECT COUNT(DISTINCT专业班级)
FROM学生表;
查询结果截图:
7.查询选修三门以上(含三门)课程的学生的学号和作业1平均分、作业2平均分和作业3平均分。
(5分)
Sql语句:
SELECT学生作业表.学号,AVG(作业1成绩),AVG(作业2成绩),AVG(作业3成绩)
FROM学生表,学生作业表
WHERE学生表.学号=学生作业表.学号
GROUP BY学生作业表.学号
HAVING COUNT(*)>2;
查询结果截图:
8.查询于兰兰的选课信息,列出学号、姓名、课程名。
(5分)
Sql语句:
SELECT学生作业表.学号,姓名,课程名
FROM学生表,学生作业表,课程表
WHERE姓名= '于兰兰'AND学生表.学号=学生作业表.学号AND课程表.课程号=学生
作业表.课程号;
查询结果截图:
9. 查询与“张志国”同一班级的学生信息(使用连接查询和子查询方式两种方式)。
(10 )
1)连接查询:
Sql语句:
SELECT学生表1.*
FROM学生表AS学生表1,学生表AS学生表2
WHERE学生表2.姓名='张志国'AND学生表1.专业班级=学生表2.专业班级;
查询结果截图:
2)子查询:
Sql语句:
SELECT*
FROM学生表
WHERE专业班级=(SELECT专业班级
FROM学生表
WHERE姓名='张志国');
查询结果截图:
10. 查询比“计算机应用基础”学时多的课程信息(使用连接查询和子查询方式两种方式)。
(10分)
1)连接查询:
Sql语句:
SELECT课程表1.*
FROM课程表AS课程表1,课程表AS课程表2
WHERE课程表2.课程名='计算机应用基础'AND课程表1.学时数>课程表2.学时数;
查询结果截图:
2)子查询:
Sql语句:
SELECT*
FROM课程表
WHERE学时数>(SELECT学时数
FROM课程表
WHERE课程名='计算机应用基础');
查询结果截图:
11. 查询选修课程号为K002的学生的学号、姓名(使用连接查询、普通子查询、相关子查询、使用exists关键字的相关子查询四种方式)。
(20分)
1)连接查询:
Sql语句:
SELECT学生表.学号,学生表.姓名
FROM学生作业表,学生表
WHERE学生作业表.课程号='K002'AND学生作业表.学号=学生表.学号;
查询结果截图:
2)普通子查询:
Sql语句:
SELECT DISTINCT学生表.学号,学生表.姓名
FROM学生作业表,学生表
WHERE学生表.学号IN(
SELECT学生表.学号
FROM学生作业表
WHERE学生作业表.课程号='K002'AND学生作业表.学号=
学生表.学号)
查询结果截图:
3)相关子查询:
Sql语句:
SELECT DISTINCT学生表.学号,学生表.姓名
FROM学生表,学生作业表
WHERE学生表.学号IN(
SELECT学生作业表.学号
FROM学生作业表
WHERE学生作业表.课程号='K002')
查询结果截图:
4)使用exists关键字的相关子查询:
Sql语句:
SELECT DISTINCT学生表.学号,学生表.姓名
FROM学生作业表,学生表
WHERE EXISTS(
SELECT*
FROM学生作业表
WHERE学生作业表.课程号='K002'AND学生作业表.学号=学生表.
学号)
查询结果截图:
12. 查询没有选修K001和M001课程的学号、课程号和三次成绩(使用子查询)。
(20分)
Sql语句:
SELECT DISTINCT学号,课程号,作业1成绩,作业2成绩,作业3成绩
FROM学生作业表
WHERE学号NOT IN(
SELECT学号
FROM学生作业表
WHERE课程号='K001'OR课程号='M001')
查询结果截图:
四、实验总结
通过本次实验,我更加熟悉了SQL语言查询相关的语句用法。
在实验中遇到了很多问题,例如建表时提示主键列不能输入重复值,后来才知道原来要设置两个主键。
希望在以后的实验中可以收获更多的实践知识。