数据库实验实验五.docx
《数据库实验实验五.docx》由会员分享,可在线阅读,更多相关《数据库实验实验五.docx(18页珍藏版)》请在冰豆网上搜索。
![数据库实验实验五.docx](https://file1.bdocx.com/fileroot1/2022-12/12/8f432996-f8dd-4fe6-b07d-9105f3151e7b/8f432996-f8dd-4fe6-b07d-9105f3151e7b1.gif)
数据库实验实验五
实验报告
1、目的(本次实验所涉及并要求掌握的知识点)
1.掌握数据的基本检索方法;
2.掌握数据查询的join和Orderby子句的使用;
3.掌握聚集函数的使用方法。
2、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析)
1.对数据表进行简单检索;
2.对数据表进行排序检索;
3.多表查询;
三、实验使用环境(本次实验所使用的平台和相关软件)
硬件环境要求:
PC机(单机)
使用的软件名称、版本号以及模块:
Windows10SQLServer2016
4、实验步骤和调试过程(实验步骤、测试数据设计、测试结果分析)
用SQL语句创建四个表:
createdatabaseSTU103
go
useSTU103
go
createtablestudent103
(
Snochar(3)notnullprimarykey,--学号
Snamenchar(4)notnull,--学生姓名
Ssexnchar
(1)notnull,--学生性别
Sbirthdaydate,--学生出生年月
Classchar(5)--学生所在班级
)
go
createtableteacher103--老师
(
Tnochar(3)notnullprimarykey,--教工编号(主码)
Tnamenchar(4)notnull,--教工姓名
Tsexnchar
(1)notnull,--教工性别
Tbirthdaydate,--教工出生年月
Profnchar(3),--职称
Departnchar(5)notnull--教工所在部门
)
go
createtableCourse103--课程
(
Cnochar(5)notnullprimarykey,--课程号
CnameNvarchar(25)notnull,--课程名称
Tnochar(3)notnullreferencesteacher103(Tno)--教工编号(外码)
)
go
createtableScore103--分数
(
Snochar(3)notnullreferencesstudent103(Sno),--学号(外码)
Cnochar(5)notnullreferencesCourse103(Cno),--课程号(外码)
primarykey(Sno,Cno),
DegreeDecimal(4,1)--成绩
)
表中数据如下,请插入相应的数据表中:
(问题如果数据更多,除了用insert语句外,有没有其他更快的方法?
)
可以使用表格导入数据
表
(一)Student103
Sno
Sname
Ssex
Sbirthday
class
108
曾华庆
男
1999-09-01
95033
105
匡明强
男
1998-10-02
95031
107
王丽娜
女
1996-01-23
95033
101
李君帅
男
1996-02-20
95033
109
王芳芳
女
1995-03-10
95031
103
陆君茹
男
1994-04-03
95031
104
陈文文
男
1994-08-13
95032
106
李丽丽
女
1996-11-13
95032
BULKINSERTStudent103
FROM'H:
\大二下\DB\s.txt'
with
(FIRSTROW=2)
表
(二)Course103
Cno
Cname
Tno
3-105
计算机导论
825
3-245
操作系统
804
3-235
数据结构
825
3-236
离散数学
831
6-166
数字电路
856
9-888
高等数学
831
9-886
[数学100%技巧
831
4-123
毛泽东思想和中国特色社会主义理论体系概论]
811
4-101
[马克思主义基本原理]概论
811
BULKINSERTCourse103
FROM'H:
\大二下\DB\c.txt'
with
(FIRSTROW=2)
表(三)Score103
Sno
Cno
Degree
103
3-245
86
105
3-245
75
109
3-245
68
103
3-105
92
105
3-105
88
109
3-105
76
101
3-105
64
107
3-105
91
108
3-105
78
101
6-166
85
107
6-166
79
108
6-166
81
103
9-886
88
103
4-123
77
103
4-101
78
101
9-886
98
101
4-123
87
101
4-101
88
103
6-166
NULL
注:
null怎么导入
最后含有null的记录可以用:
insertScore103(Sno,Cno)values('103','6-166')或者直接编辑插入
表(四)Teacher103
Tno
Tname
Tsex
Tbirthday
Prof
Depart
804
李诚
男
1958-12-02
副教授
计算机系
856
张旭
男
1969-03-12
讲师
电子工程系
825
王萍
女
1972-05-05
助教
计算机系
828
李丽丽
女
1976-11-13
讲师
计算机系
831
刘冰
女
1977-08-14
助教
电子工程系
811
李强栋
男
1977-09-24
讲师
社科系
BULKINSERTTeacher103
FROM'H:
\大二下\DB\t.txt'
with
(FIRSTROW=2)
select*fromTeacher103
六、验证性实验
以下查询要求在逐个语句执行,执行后将执行结果记录下来:
1.无条件查询全部数据
USESTUDENT
SELECT*FROMSTUDENT103
2.在SELECT关键字后指明要检索的列名
(1)查询学生表的学生学号和姓名
SELECTSNO,SNAMEFROMSTUDEN103
(2)查询STUDENT表中的班级名
SELECTclassFROMSTUDENT103
(3)查询S表中不重复的班级
SELECTDISTINCTclassFROMSTUDENT103
3.改变列标题的检索
(1)使用空格形式:
列名新标题
SELECTSNO学号,SNAME姓名FROMSTUDENT103
(2)使用“AS”形式,列名AS新标题
SELECTSNOAS'学号',SNAMEAS'姓名'FROMSTUDENT103
(3)使用“AS”形式,列名AS新标题
SELECTSNOAS'学号',SNAMEAS'姓名'FROMSTUDENT103
(4)使用“AS”形式,列名AS新标题
SELECT'学号'=SNO,'姓名'=SNAMEFROMSTUDENT103
4.有条件选择的查询
在S表检索“95033”的学生信息
SELECT*FROMSTUDENT103WHERECLASS='95033'
(1)在S表中检索姓“王”的学生信息
SELECT*FROMSTUDENT103
WHEREsnamelike'王%'
(2)在SC表检索’3-105’选修课成绩为空的选课记录
SELECTSNO,CNOFROMSCORE103
WHEREcno='3-105'andDegreeisnull
(3)检索年龄为21,25,22的学生学号、姓名
SELECTSNO,SNAMEFROMSTUDENT103
WHEREYEAR(GETDATE())-YEAR([Sbirthday])IN(21,25,22)
5.多表查询
查询所有人的学号,姓名,课程号,课程名,成绩
Selects.snosname,o,cname,DegreefromSTUDENT103sjoinSCORE103sc
Ons.sno=sc.snojoincourse103cono=o
注意:
表的别名
6.对检索结果进行排序
SELECT*FROMSCORE103
WHEREDegreeISnotNULL
ORDERBYSNO,CNODESC
七、设计性实验
(1).实验要求
1、查询Student表中95031班的所有记录的sno,Sname和Ssex列。
selectSno,Sname,Ssexfromstudent103whereclass='95031'
2、查询教师所有的单位即不重复的Depart列。
selectDISTINCTDepartfromteacher103
3、查询Score表中成绩在60到80之间的所有记录。
select*fromScore103wheredegree>=60anddegree<=80
4、查询Score表中成绩为85,86或88的记录。
select*fromScore103wheredegree=85ordegree=86ordegree=88
5、查询Student表中“95031”班或性别为“女”的同学记录。
select*fromstudent103whereclass='95031'orSsex='女'
6、以Cno升序、Degree降序查询Score表的所有记录。
select*fromScore103ORDERbyCno,Degreedesc
7、查询课程名中的第15个字符是‘理’课程信息。
select*fromCourse103wherecnamelike'______________理%'
8、查询Student表中不姓“王”且姓名第二字为‘君’的同学记录。
select*fromStudent103wherenotSnamelike'王%'andSnamelike'_君%'
9、查询Student表中每个学生的姓名和年龄。
selectSname,year(getdate())-year(Sbirthday)agefromstudent103
10、查询Student表中最大和最小的Sbirthday日期值。
selecttop1SbirthdayfromStudent103orderbySbirthday
selecttop1SbirthdayfromStudent103orderbySbirthdaydesc
11、以班号和年龄从大到小的顺序查询Student表中的全部记录。
select*,year(getdate())-year(Sbirthday)agefromstudent103orderbyclass,age
12.查询Student表本月过生日同学的信息,包括学号,姓名,课程号,课程名,任课教师和成绩。
Selects.sno,s.sname,o,cname,t.Tname,DegreefromSTUDENT103sjoinSCORE103sc
Ons.sno=sc.snojoincourse103cono=ojointeacher103tont.Tno=c.Tnowheremonth(getdate())-month(Sbirthday)=0
13.查询选修课程名中含有%的信息,包括学号,姓名,课程号,课程名和成绩。
Selects.sno,s.sname,o,cname,DegreefromSTUDENT103sjoinSCORE103sc
Ons.sno=sc.snojoincourse103cono=owhereCnamelike'%[%]%'
14.查询选修课程名中含有’[‘或’]’的信息,包括学号,姓名,课程号,课程名和成绩。
Selects.sno,s.sname,o,cname,DegreefromSTUDENT103sjoinSCORE103sc
Ons.sno=sc.snojoincourse103cono=owhereCnamelike'%或%'
15.查询选修课程名中含有’[‘和’]’的课程信息,包括学号,姓名,课程号,课程名和成绩。
Selects.sno,s.sname,o,cname,DegreefromSTUDENT103sjoinSCORE103sc
Ons.sno=sc.snojoincourse103cono=owhereCnamelike'%和%'
16.查询所有学生信息,包括学号,姓名,课程号,课程名,任课教师和成绩(包括没上课的学生,没有选修的课程以及没上课的教师)。
Selects.sno,s.sname,o,cname,t.Tname,DegreefromSTUDENT103sfulljoinSCORE103sc
Ons.sno=sc.snofulljoincourse103cono=ofulljointeacher103tont.Tno=c.Tno
五、实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)
1、导入的时候要注意编码。
2、查询的时候需要掌握一些匹配规则,特别是中文,或者特殊符号。
3、插入NULL值可以右键编辑插入或者是用插入命令直插入有值得部分。