实验类型:综合性
- 掌握使用INSERT、UPDATE、DELETE语句向表中插入数据、修改和删除数据;
- 熟悉和掌握对数据表中数据的查询操作和SQL命令的使用;
- 能掌握各种查询方法,能通过查询获取对自己有用的数据,能对查询结果进行编辑;
- 理解不同类型的查询语句其执行原理及查询效率;
- 加深理解关系运算的各种操作(尤其是关系的选择,投影,连接和除运算);
- 理解视图概念、运用视图;
- 报告中,要有重要方法、讨论与思考过程等内容书写。
1.1表的概念
表是数据的集合,是用来存储数据和操作数据的逻辑结构。和电子表格类似,数据在表中是按照行和列的格式来组织排列的,每一行代表一条唯一的记录,每一列代表一个属性。
1.2数据类型
常用的数据类型:整型、浮点型、货币类、日期和时间、字符类型(含Unicode字符串)、二进制类型等
1.3数据的完整性
数据完整性是指数据的正确性、一致性和安全性,它是衡量数据库中数据质量好坏的重要标准。当用户使用INSERT、DELETE或UPDATE语句修改数据库内容时,数据的完整性就可能会遭到破环。为此,SQL Sever提供了实施数据完整性的方法包括约束、规则等。数据的完整性大致分为四种类型:实体完整性:表中的每一行都能由主键的属性列来唯一标识,且不存在重复的数据行;域完整性:限制向表中输入值的范围,保证给定列的输入的有效性。可以通过限制数据类型,值域或数据格式实现;参照完整性:当一个表引用了另一个表中的某些数据时,要防止非法的数据更新,以保持表间数据的一致性;用户自定义完整性:体现实际运用的业务规则。
1.4 各种查询语句其执行原理及查询效率
1.5 视图作为一种数据库对象,可以让用户对数据源进行查询和修改。视图是SQL Sever中重要的数据库对象。视图常用于集中、简化和定制数据库中的数据信息,为用户从多角度观察数据库中的数据提供方便。
1. 数据更新
请使用SQL语句方法完成以下操作。
1.1建立数据库后,运行实验二提供的相关代码。每个学生根据下面提供的表结构,用SQL命令方式,给图书信息表添加本课程教材书籍。同时添加学生本人的班级和学生信息。
1.2 在图书表里面的B0001的记录中,作者信息更改为“阿历克斯”,图书的价格为50.5元。修改学生信息,密码为Ab12@@,联系电话为,18812345688。
1.3 删除学生信息表中,上题修改学生的记录。
请针对以下业务的具体需求,对上述参考表及其数据做对应查询。
2.1 单表查询
- 查询所有图书的基本信息
- 查询所有图书的编号、名称和价格
- 查询计算机系学生读者的借书证号、姓名和联系电话
- 查询学生借书证号为L0001且所借图书编号为B0003的借阅记录信息
- 查询t_borrow表未还书的记录(假设当前的日期是2022-10-20号)。
- 查询借阅日期“1998-02-06”至“2021-12-06”的借书记录信息
- 查询姓徐的学生读者的基本信息
2.2对查询结果进行编辑
- 查询所有曾经借书学生的姓名和所在院系,输出结果的字段名是:姓名和所在院系。
- 查询借书证号为L0002的读者所借图书至今的天数总和。
- 查询借书证号为L0003的读者一共借了多少本书(同一本书多次续借的话,仅统计一次)。
- 查询所有图书信息,结果按价格的降序排列。
- 统计图书信息表中不同出版社的图书的数目,把统计结果大于或等于2的记录输出。
- 查询所有图书的库存总量。
- 输出借阅过期的借阅记录,并且输出的罚金翻倍。
- 持有L0002的读者已经缴纳了全部的罚金,请把对应借书记录的罚金更改为0,然后把续借的数量增加1,把过期记录的“是否过期”属性修改为“N”。
2.3连接查询
17. 采用等值连接的方式查询学生读者的学号、借书证号、姓名、联系电话以及所借书的图书编号,借阅日期。
18. 采用内连接的方法查询图书信息以及对应图书类别的详细信息。
19. 查询学生读者借书证号、姓名、班级以及所借图书的图书编号、借阅日期,没有借阅记录的学生也要输出。
20. 查询借书信息表中读者的借书证号、图书编号、借阅日期以及所借图书在图书信息表中对应的出版社编号,图书信息表没有连接成功的记录也要输出。
21. 查询在被罚款的同学的学号、姓名、电话、班级名称、借书证号、借书证发证日期、图书编号、图书名称、应还书日期、罚金数量。
22. 查询读者的借书证号、姓名、联系电话、以及所借图书的图书编号、类别名称、借阅日期、出版社和编号。
2.3子查询
23. 查询借阅了图书编号为B0001的图书的读者信息。
24. 查询借阅了广东人民出版社和清华出版社的图书的读者信息。
25. 查询还未归还图书的读者的借书证号、姓名、部门和联系电话(假设当前的日期是2022-10-20号,图书归还时候,一定要缴纳罚金)。
26. 查询姓名为朱威读者的借阅记录。
27. 查询跟徐广声借阅了相关图书的其他读者详细信息。
28. 利用相关子查询邹思柔是否有借阅图书的记录,若有则输出借阅记录。
29. 查询图书价格比所有图书平均价格高的图书信息。
30. 查询图书价格比图书编号为B0002和B0003的价格都高的图书信息。
2.4视图
1.根据应用,请同学定义2张视图。第一个视图输出学生学号、姓名、电话号码、班级名称、系部名称。第二个视图输出罚金超过10元的学生学号、学生、电话号码、借书证、图书名字、借书日期、应还书日期及罚金。
2.创建视图运用视图修改视图数据(与操作表一样,只是把table换成view)
1.Windows XP Professional SP3/Windows7/win10
2.SQL Server 2012/2019
(查询的代码和查询的结果,贴图放在每个题目的下面)
请使用SQL语句方法完成以下操作。
建表之前要求创建数据库:st_db
所有的表与视图要在自建的数据库中创建。
答:
–先判断,后删除,再创建
1.1建立数据库后,运行实验二提供的相关代码。每个学生根据下面提供的表结构,用SQL命令方式,给图书信息表添加本课程教材书籍。同时添加学生本人的班级和学生信息。
要求:以下所有表的字段要用英文名称,为了达到训练效果,首先在答题区直接输入代码(不要有注释),然后,选择复制后粘贴到客户端界面进行调试,最后,再把客户端调试完成的正确代码(要有注释)复制其后。
图书信息表t_book
要求:主键、外键在列约束条件定义,即定义类型同时定义。
答:--建表t_book
改进:(讨论)
语句:
通用:(添加了指定用户)
新增馆藏可借图书c_book
要求讨论为什么要建此表。结合现实图书馆讨论读者所借阅的图书是什么样的?如何改进?
答:
原始表格创建语句:
改进1 : 添加自动增量,检查状态是否符合标准
改进2 : 将主键改为联合主键 (原因在后面操作异常问题与解决方案中问题一)
借书证表t_libraryCard
学生信息表t_student
要求主键、外键用定义约束条件名形式定义
答:
约束条件名形式定义 语法:
班级信息表t_class
要求主键定义用修改表形式定义。
答:
借阅信息表 t_borrow
要求讨论ReturnDate字段是否可空的讨论。请注意:这里Book_id的类型以及引用的是哪个表中书号?
答:
–对ReturnDate是否可空的讨论
(1)可以,因为书本可能在被借阅状态,因此没有还书日期。
(2)不可以,我们可以定义最晚还书日期进行填充,如果提前还书再修改即可!
–对这里Book_id的类型以及引用的是哪个表中书号?
类型是char(15)
引用的是c_book中的Bid书号
图书类别信息表 t_book_type
答:(其实在定义图书信息表t_book的时候就已经将 图书类别信息表 t_book_type当成前置表格创建了 )
在图书表里面的B0001的记录中,作者信息更改为“阿历克斯”,图书的价格为50.5元。
在学生表中,修改学号为21210120117的学生信息,密码为Ab12@@,联系电话为,18812345688。
在借书证表中,插入本人信息。
在学生表中,插入本人的信息。
在借阅表中,插入一条本人所借的一本书信息。
关于以上各表数据准备的顺序(表)是什么?为什么?用实验说明。
数据准备数据语句(每个表写3个有代表性,但,在SQL脚本中是全的)
显示数据语句:
修改前数据(复制):
修改语句:
修改后显示语句:
修改后数据(复制):
上面只是简单样例
增加数据语句:
注: 插入语法为
所以 插入单行数据 的写法为:
如果要 按与表列顺序不同的顺序插入数据
分别显示三个插入本人信息的表的数据(包括本人信息 ):
如果要查询某人(本人 )信息 eg.查询 潘奕寰 相关信息
1.3 在学生信息表中,删除上题中修改过的学生记录。
答:
当然根据之前表格信息,要完整删除该学生所有的信息,应该删除其他表该学生相关信息
关于以上各表数据准备的顺序(表)是什么?为什么?用实验说明。
答:
图书类别信息表 t_book_type --> 图书信息表t_book -->新增馆藏可借图书c_book
借书证表t_libraryCard
班级信息表t_class – > 学生信息表t_student
其中图书类别信息表 t_book_type , 借书证表t_libraryCard , 班级信息表t_class 无前提准备要求,可以同时第一时间创建/数据准备
但 借阅信息表 t_borrow需要 在 新增馆藏可借图书c_book 和 借书证表t_libraryCard 这两个表之后
理由: 无外键约束的为第一梯队,用第一梯队为外键约束的为第二梯队以此类推。外键是从属关系。如果不这么做,会报错: 说的就是因为有外键约束"FR_LC" ,并且 表"dbo.t_libraryCard", column 'LCardNo’里面没有这个值,所以无法添加。 (具体外键约束 :)
请针对以下业务的具体需求,对上述参考表及其数据做对应查询。
2.1单表查询
1.查询所有图书的基本信息
2.查询所有图书的编号、名称和价格
3. 查询计算机系学生读者的借书证号、姓名和联系电话
答:
步骤一,查询计算机系班级编号
第一步结果:
当然 我们还可以一步到位!!!!
语句:
结果: 发现结果是一样的
具体用法参考 sql—如何把sql查询出来的结果当做另一个sql的条件查询,1、语句2、with as
4. 查询学生借书证号为L0001且所借图书编号为B0003的借阅记录信息
5. 查询t_borrow表未还书的记录(假设当前的日期是2023-10-20号)。要求:
很不巧啊,上面添加没有符合要求的
那么我们添加一个试试
6. 查询借阅日期“2023-08-05”至“2023-9-21”的借书记录信息
7. 查询与本人姓氏(如:学生林小娜)相同的学生读者(包括自己,姓林的)的基本信息;
查询姓名第二个字与本人姓名第二个字不同学生读者的基本信息。
语句:
2.2对查询结果进行编辑
1. 查询所有曾经借书学生的姓名和所在院系,输出结果的字段名是:姓名和所在院系。
2. 查询借书证号为L0002的读者所借图书至今的天数总和。
3. 查询借书证号为L0003的读者一共借了多少本书(同一本书多次续借的话,仅统计一次)。
4. 查询所有图书信息,结果按价格的降序排列。
5. 统计图书信息表中不同出版社的图书的数目,把统计结果大于或等于2的记录输出。
6. 查询所有图书的库存总量。
7. 输出借阅过期的借阅记录,并且输出的罚金翻倍。
8. 持有L0002的读者已经缴纳了全部的罚金,请把对应借书记录的罚金更改为0,然后把续借的数量增加1,把过期记录的“是否过期”属性修改为“N”。
2.3连接查询
1. 采用等值连接的方式查询学生读者的学号、借书证号、姓名、联系电话以及所借书的图书编号,借阅日期。
2. 采用内连接的方法查询图书信息以及对应图书类别的详细信息。
3. 查询学生读者借书证号、姓名、班级以及所借图书的图书编号、借阅日期,没有借阅记录的学生也要输出。
4. 查询借书信息表中读者的借书证号、图书编号、借阅日期以及所借图书在图书信息表中对应的出版社编号,图书信息表没有连接成功的记录也要输出。
5. 查询在被罚款的同学的学号、姓名、电话、班级名称、借书证号、借书证发证日期、图书编号、图书名称、应还书日期、罚金数量。
添加一个看看效果:
然后再次查询 , 结果:
6. 查询读者的借书证号、姓名、联系电话、以及所借图书的图书编号、类别名称、借阅日期、出版社和编号 。
7. 利用查询语句与数据更新语句等实现每批次购进图书在馆数的修改。提示:在t_book中,用修改表语句增加在馆数量字段。
答: 实话说没怎么看懂这个题目,个人理解是用新增馆藏可借图书c_book中的数据去增加
语句:
查询:
修改后并查询:
2.4子查询
1. 查询借阅了图书编号为B0001的图书的读者信息。
当然 如果 不想重复 用 DISTINCT
2. 查询借阅了广东人民出版社和清华出版社的图书的读者信息。
3. 查询还未归还图书的读者的借书证号、姓名、部门和联系电话(假设当前的日期是2022-10-20号,图书归还时候,一定要缴纳罚金)。
4. 查询姓名为朱威读者的借阅记录。
5. 查询跟徐广声借阅了相关图书的其他读者详细信息。
6. 利用相关子查询邹思柔是否有借阅图书的记录,若有则输出借阅记录。
7. 查询图书价格比所有图书平均价格高的图书信息。
8. 查询图书价格比图书编号为B0002和B0003的价格都高的图书信息。
1.根据应用,请同学定义2张视图。第一个视图输出学生学号、姓名、电话号码、班级名称、系部名称。第二个视图输出罚金超过10元的学生学号、学生、电话号码、借书证、图书名字、借书日期、应还书日期及罚金。
答:
语句:
简单运用视图:
2.创建视图运用视图修改视图数据(与操作表一样,只是把table换成view)
–1创建视图并修改字段的别名
–直接运用视图查询与运行结果
–2插入视图数据
–查询插入后的视图与运行结果
–3修改视图的数据值
–查询修改了值的视图与运行结果
–4删除视图的行数据
–查询删除了值的视图与运行结果
错误背景:
在建立 借阅信息表 t_borrow 中出现
将 c_book表中 Bid 设置为主键即可解决
错误背景:2. 查询借阅了广东人民出版社和清华出版社的图书的读者信息。
将 = 改成 IN