数据库实验报告7 数据库综合练习实验测试

一、实验目的:
(1)熟练掌握数据库创建、表和视图的创建、数据的插入、修改、删除、查询操作、数据完整性、触发器的创建、执行操作。
(2)掌握SQL语句常见语法错误的调试方法。
二、实验内容:
按照下列要求操作,并截取相应的结果图。要求所有的查询必须有结果,如果没有符合条件的记录,请插入符合条件的记录,再次截取相应的结果图。
综合练习
1、使用Transact- SQL语句建立一个图书读者数据库,数据库名为TSGL。
2、在图书管理数据库TSGL中创建三个表:图书信息表(tblBooks)、读者信息表(tblReaders)和借阅信息表(tblLending),表中各列的要求如下:

图书信息表tblBooks
字段名称 字段类型 说明
BookID 字符串,长度为20 图书唯一的编号,主键
Bname 字符串,长度为50 图书的名称,唯一性
Author 可变字符串,长度为30 图书编著者的名称
Press 可变字符串,长度为30 图书的出版社
Price money 图书的定价

读者信息表tblReaders
字段名称 字段类型 说明
ReaderID 字符串,长度为10 读者唯一编号,主键
Rname 字符串,长度为8 读者姓名,非空值
Sex 字符串,长度为2 读者性别,默认取值为男,取值只能为男或女
Department 可变字符串,长度为30 读者所在部门
Phone 字符串,长度为8 读者办公电话

借阅信息表tblLending
字段名称 字段类型 说明
ReaderID 字符串,长度为10 读者编号,外键,读者信息表
BookID 字符串,长度为20 图书编号,外键,图书信息表
Borrowdate DATE 借出日期,非空值
Returndate DATE 归还日期,归还日期晚于借出日期
主键(ReaderID , BookID)

图书信息表tblBooks:
BookID Bname Author Press Price
TP311.138DFG 网络数据库实用教程 石大鑫 机械工业出版社 23.00
TP311.138SQ SQL Server 2012实用教程 董建斌 机械工业出版社 25.00
TP311.138SQZA SQL Server实训 郑启芬 清华大学出版社 18.00
TP311.138WJ 数据库程序设计 刘韵华 电子工业出版社 38.00
TP311.138XZQ SQL Server 2012数据库系统管理 赵志清 人民邮电出版社 45.00
TP393.4LZX ASP.NET案例开发 陈正熙 机械工业出版社 45.00

读者信息表tblReaders:
ReaderID Rname Sex Department Phone
R200801001 王平 男 应用技术系 88907508
R200801002 张丽萍 女 软件技术系 88907522
R200801003 王辉 男 应用技术系
R200801004 李建伟 男 软件技术系 88907522
R200801005 程炎 女 软件技术系
R200801006 李丽 女 应用技术系

借阅信息表tblLending:
ReaderID BookID Borrowdate Returndate
R200801001 TP311.138SQ 2008-08-23 2008-11-20
R200801001 TP311.138SQZA 2008-08-12 2008-11-09
R200801001 TP393.4LZX 2008-09-06 2008-12-03
R200801002 TP311.138WJ 2008-08-23 2008-11-20
R200801005 TP311.138SQ 2008-08-23 2008-11-20
R200801005 TP311.138XZQ 2008-09-18

================================================
CREATE DATABASE TSGL

USE TSGL

CREATE TABLE tblBooks
(BookID CHAR(20) PRIMARY KEY,
Bname CHAR(50) UNIQUE,
Author VARCHAR(30),
Press VARCHAR(30),
Price MONEY );

INSERT INTO tblBooks
VALUES (‘TP311.138DFG’, ‘网络数据库实用教程’, ‘石大鑫’,‘机械工业出版社’,‘23.00’),
(‘TP311.138SQ’, ‘SQL Server 2012实用教程’, ‘董建斌’,‘机械工业出版社’,‘25.00’),
(‘TP311.138SQZA’,‘SQL Server实训’, ‘郑启芬’,‘清华大学出版社’,‘18.00’),
(‘TP311.138WJ’, ‘数据库程序设计’, ‘刘韵华’,‘电子工业出版社’,‘38.00’),
(‘TP311.138XZQ’, ‘SQL Server 2012数据库系统管理’,‘赵志清’,‘人民邮电出版社’,‘45.00’),
(‘TP393.4LZX’, ‘ASP.NET案例开发’, ‘陈正熙’, ‘机械工业出版社’,‘45.00’);

CREATE TABLE tblReaders(
ReaderID CHAR(10)PRIMARY KEY,
Rname CHAR(8)NOT NULL,
Sex CHAR(2) CHECK (Sex IN (‘男’,‘女’)),
Department VARCHAR(30),
Phone CHAR(8)
);

INSERT INTO tblReaders
VALUES (‘R200801001’,‘王平’,‘男’,‘应用技术系’,‘88907508’),
(‘R200801002’,‘张丽萍’,‘女’,‘软件技术系’,‘88907522’),
(‘R200801003’,‘王辉’,‘男’,‘应用技术系’,NULL),
(‘R200801004’,‘李建伟’,‘男’,‘软件技术系’,‘88907522’),
(‘R200801005’,‘程炎’,‘女’,‘软件技术系’,NULL),
(‘R200801006’,‘李丽’,‘女’,‘应用技术系’,NULL);

CREATE TABLE tblLending(
ReaderID CHAR(10),
BookID CHAR(20),
Borrowdate DATE,
Returndate DATE,
PRIMARY KEY (ReaderID,BookID),
FOREIGN KEY (ReaderID) REFERENCES tblReaders(ReaderID),
FOREIGN KEY (BookID) REFERENCES tblBooks(BookID)
);

INSERT INTO tblLending
VALUES (‘R200801001’,‘TP311.138SQ’,‘2008-08-23’,‘2008-11-20’),
(‘R200801001’,‘TP311.138SQZA’,‘2008-08-12’,‘2008-11-09’),
(‘R200801001’,‘TP393.4LZX’,‘2008-09-06’,‘2008-12-03’),
(‘R200801002’,‘TP311.138WJ’,‘2008-08-23’,‘2008-11-20’),
(‘R200801005’,‘TP311.138SQ’,‘2008-08-23’,‘2008-11-20’),
(‘R200801005’,‘TP311.138XZQ’,‘2008-09-18’,NULL);

SELECTFROM tblBooks
SELECT
FROM tblReaders
SELECT*FROM tblLending

–3、向读者表加入一个新读者,读者的信息为:读者号‘R200801010’,姓名“王小平”,性别“女”。
INSERT INTO tblReaders
VALUES (‘R200801010’,‘王小平’,‘女’,NULL,NULL)

–4、向借阅表插入一个借阅记录,表示读者“王小平”借阅了一本书,图书号为‘TP311.138WJ’,借出日期为当天的日期,归还日期为空值。
INSERT INTO tblLending
VALUES (‘R200801010’,‘TP311.138WJ’,GETDATE(),NULL)

–5、读者“王小平”在借出上述图书10天之后归还该书。
UPDATE tblLending
SET Returndate=getdate()+10
WHERE ReaderID=‘R200801010’
AND BookID=‘TP311.138WJ’

SELECT * FROM tblLending

--6、当读者“王小平”按期归还图书时,删除上述借阅记录。
DELETE FROM tblLending
WHERE ReaderID=(SELECT ReaderID
FROM tblReaders
WHERE Rname=‘王小平’)

–7、将所有“机械工业出版社”的图书加价10%
SELECT * FROM tblBooks
UPDATE tblBooks
SET Price=Price*1.1
WHERE Press=‘机械工业出版社’

–8、删除价格大于100元的图书。

DELETE FROM tblBooks
WHERE Price>100

–9、查询全部图书的信息,其中单价打8折,并设置该列的别名为‘打折价’。
SELECT BookID,Bname,Author,Press ,Price*0.8 ‘打折价’
FROM tblBooks

–10、查询出版的图书信息,查询结果按照图书的定价降序排列。

SELECT * FROM tblBooks
ORDER BY Price DESC

–11、 查询全部图书的图书号、书名、作者、出版社和单价。
SELECT BookID,Bname,Author,Press,Price
FROM tblBooks;

–12、 查询全部图书的信息,其中单价打8.5折,并设置该列的别名为‘打折价’。
SELECT BookID,Bname,Author,Press,Price*0.85 ‘打折价’
FROM tblBooks

SELECT * FROM tblBooks

–13、 显示所有被借阅图书的图书号,并去掉重复行。
SELECT BOOKID
FROM tblLending
GROUP BY BookID

–14、 查询所有单价在20~40之间的图书信息。

SELECT * FROM tblBooks
WHERE Price BETWEEN 20 AND 40

--15、 查询所有单价不在20~40之间的图书信息。

SELECT * FROM tblBooks
WHERE Price NOT BETWEEN 20 AND 40

–16、 查询机械工业出版社、电子工业出版社、人民邮电出版社的图书信息。
SELECT *
FROM tblBooks
WHERE Press IN (‘机械工业出版社’,‘电子工业出版社’,‘人民邮电出版社’)

–17、 查询既不是机械工业出版社,也不是电子工业出版社的图书信息。
SELECT *
FROM tblBooks
WHERE Press NOT IN (‘机械工业出版社’,‘电子工业出版社’)

–18、 查询姓名的第二个字符是‘丽’并且只有两个字符的读者号及姓名。
SELECT READERID ,RNAME
FROM tblReaders
WHERE RNAME LIKE ‘_丽’

–19、 查询所有姓‘李’并且全名为三个汉字的读者号及姓名。
SELECT READERID ,RNAME
FROM tblReaders
WHERE RNAME LIKE ‘李%’ AND RNAME NOT LIKE ‘李_’

–20、查询所有姓‘程’或姓‘李’的读者号及姓名。
SELECT READERID ,RNAME
FROM tblReaders
WHERE RNAME LIKE ‘程%’ OR RNAME LIKE ‘李%’

–21、查询所有不姓‘程’或‘李’的读者号及姓名。

SELECT READERID ,RNAME
FROM tblReaders
WHERE RNAME NOT LIKE ‘程%’ AND RNAME NOT LIKE ‘李%’

–22、查询无归还日期的借阅信息。

SELECT * FROM tblLending
WHERE Returndate is null
–23、查询有归还日期的借阅信息。

SELECT * FROM tblLending
WHERE Returndate is not null

–24、查询单价在20~40之间的机械工业出版社出版的图书名及单价。

SELECT Bname,Price
FROM tblBooks
WHERE Press=‘机械工业出版社’
AND Price>20
AND Price<40
–25、查询图书的总本数。

SELECT COUNT(*)
FROM tblBooks

–26、查询被借阅图书的总本数。

SELECT COUNT(DISTINCT BookID)
FROM tblLending

–27、查询机械工业出版社出版的图书的最高价、最低价、平均价格。

SELECT MAX(Price) ‘最高价’,MIN(Price) ‘最低价’,AVG(Price) ‘平均价格’
FROM tblBooks
WHERE Press=‘机械工业出版社’

–28、查询每个出版社的名称及其出版图书的总量。

SELECT Press,COUNT(*) ‘出版图书的总量’
FROM tblBooks
GROUP BY Press

–29、查询借阅图书数超过2本的读者号、借阅总本数,并按借阅总本数从大到小排序。

SELECT READERID,COUNT() ‘借阅总本数’
FROM tblLending
GROUP BY READERID
HAVING COUNT(
)>2
ORDER BY COUNT(*) DESC;

–30、查询与‘张丽萍’的办公电话相同的读者的姓名。

SELECT Rname
FROM tblReaders
WHERE Phone=(SELECT Phone
FROM tblReaders
WHERE Rname=‘张丽萍’)

–31、查询被借阅图书的基本信息及其被借阅情况。

SELECT * FROM tblBooks,tblLending
WHERE tblBooks.BookID=tblLending.BookID

–32、查询读者的读者号、姓名、借阅的图书名、借出日期及归还日期。

SELECT tblReaders.ReaderID,tblReaders.RNAME,tblBooks.BNAME,tblLending.Borrowdate,tblLending.Returndate
FROM tblLending,tblReaders,tblBooks
WHERE tblReaders.ReaderID=tblLending.ReaderID
AND tblBooks.BookID=tblLending.BookID

–33、查询借阅了机械工业出版社出版,并且书名中包含“SQL Server 2012”字符串的图书的读者,并显示读者号、姓名、书名、出版社、借出日期及归还日期。

SELECT TBLLENDING.READERID,RNAME,BNAME,PRESS,Borrowdate,Returndate
FROM tblReaders,tblLending,tblBooks
WHERE tblLending.BookID=tblBooks.BookID
AND tblLending.ReaderID=tblReaders.ReaderID
AND PRESS=‘机械工业出版社’
AND BNAME LIKE ‘%SQL Server 2012%’

–34、查询至少借阅过1本机械工业出版社出版的图书的读者号及借阅本数,并按借阅本数多少降序排列。

SELECT TBLLENDING.READERID,COUNT() ‘借阅本数’
FROM tblLending,tblBooks
WHERE tblLending.BookID=tblBooks.BookID AND PRESS=‘机械工业出版社’
GROUP BY READERID
HAVING COUNT(
)>=1
ORDER BY COUNT(*) DESC

–35、查询所有图书的借阅情况,要求包括被借阅了的图书和没被借阅的图书,显示他们的图书号、书名、读者姓名及借出日期。

SELECT tblBooks.BookID,Bname,Rname,Borrowdate
FROM tblBooks LEFT OUTER JOIN
(tblLending LEFT OUTER JOIN tblReaders ON (tblLending.ReaderID=tblReaders.ReaderID) )
ON (tblBooks.BookID= tblLending.BookID)

SELECT tblBooks.BOOKID,BNAME,RNAME,BORROWDATE
FROM tblLending,tblReaders,tblBooks
WHERE tblLending.ReaderID=tblReaders.ReaderID
AND tblLending.BookID=tblBooks.BookID
UNION
SELECT tblBooks.BOOKID,BNAME,NULL,NULL
FROM tblBooks
WHERE tblBooks.BookID NOT IN(SELECT BOOKID FROM tblLending)

–36、创建一个名为vwTotalCount的视图,用于查询每个读者编号、读者姓名及其借阅图书的本数。

CREATE VIEW vwTotalCount
AS
SELECT tblReaders.READERID,RNAME,COUNT(*) ‘本数’
FROM tblReaders,tblLending
WHERE tblLending.ReaderID=tblReaders.ReaderID
GROUP BY tblReaders.READERID,RNAME

SELECT * FROM vwTotalCount

–37、创建视图“VBorrowInfo”,显示书名Bname、作者Author、出版社Press、定价Price、读者编号ReaderID、读者姓名Rname、借书日期Borrowdate和还书日期Returndate。

CREATE VIEW VBorrowInfo
AS
SELECT Bname,Author,Press,Price,tblReaders.ReaderID,Rname,Borrowdate,Returndate
FROM tblBooks,tblReaders,tblLending
WHERE tblReaders.ReaderID=tblLending.ReaderID
AND tblBooks.BookID=tblLending.BookID

SELECT * FROM VBorrowInfo
–38、在数据库TSGL中创建一个与借阅信息表tblLending结构相同的表tblLending_bak,当删除借阅信息表tblLending中的记录时,自动将删除的记录存放到表tblLending_bak中。

CREATE TABLE tblLending_bak(
ReaderID CHAR(10),
BookID CHAR(20),
Borrowdate DATE,
Returndate DATE,
PRIMARY KEY (ReaderID,BookID),
FOREIGN KEY (ReaderID) REFERENCES tblReaders(ReaderID),
FOREIGN KEY (BookID) REFERENCES tblBooks(BookID)
);

CREATE TRIGGER DELETBL ON tblLending
FOR DELETE
AS
INSERT INTO tblLending_bak
SELECT * FROM deleted

DELETE FROM tblLending
WHERE ReaderID=‘R200801001’
AND BookID= ‘TP311.138SQ’

SELECT * FROM tblLending
SELECT * FROM tblLending_bak

–39、在数据库TSGL中基于读者信息表tblReaders创建一个触发器,针对INSERT 、DELETE、 UPDATE 操作,当执行INSERT、UPDATE 时,将inserted表中的数据打印出来,执行DELETE 、UPDATE 时,将deleted表中数据打印出来。
CREATE TRIGGER IDU ON tblReaders
FOR INSERT,DELETE,UPDATE
AS BEGIN
IF EXISTS (SELECT * FROM inserted)
BEGIN
SELECT * FROM inserted
END
IF EXISTS (SELECT * FROM deleted)
BEGIN
SELECT * FROM deleted
END
IF EXISTS (SELECT * FROM inserted)
AND EXISTS (SELECT * FROM deleted)
BEGIN
SELECT * FROM inserted
SELECT * FROM deleted
END
END

INSERT INTO tblReaders
VALUES (‘R200801007’,‘王燕’,‘女’,‘应用技术系’,‘NULL’)

DELETE tblReaders WHERE ReaderID=‘R200801007’

UPDATE tblReaders
SET Rname=‘王鹏’
WHERE ReaderID=‘R200801001’

SELECT * FROM tblReaders

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
实验四视图、数据控制与嵌入式SQL语言实验 基于实验一建立的“图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。具体实验内容如下: 1、视图定义与查询实验 ① 在“图书读者数据库”(Book_Reader_DB)中,先用视图创建向导的方法创建视图View1和View2。其中View1包括书号、书名、定价、数量等属性。View2包括读者号、读者姓名、单位、电话、书号、书名、借阅日期、应归还日期、实际还书日期和过期天数等属性,其条件是所有借书已过期的读者和借书情况(假定借阅期为60天); ② 根据上述定义的视图,在查询分析器中用语句完成如下查询: A:通过视图View1查询书库中藏书的情况; B:通过视图View2查询借书过期的读者和借书情况及罚款金额(假定超期罚款标准为1元/天); ③ 在查询分析器中用SQL语句创建视图View3和视图View4,视图View3的要求与View1相同,视图View4与视图View2的条件相同。 2、数据控制实验 ① 假定系统有U1、U2、U3 、U4、U5、U6六个登录用户,试将查询图书的权限由管理员授权给U1, 以U1用户的身份重新登录系统后,再把权限授予给U2; ② 系统管理员把插入数据给借阅的权限授予给U3; ③ 系统管理员把添加图书数据的权限授予给U4; ④ 系统管理员把修改读者数据信息的权限授予给U5; ⑤ 将U1访问图书的权限收回; 3、嵌入式SQL语言实验 ① 用VB建立一个工程,在对话框Form1上添加一些访问数据库和显示数据的控件,并通过ODBC建立与数据库Book_Reader_DB的连接; ② 在Form1上添加一个按钮Button1,对Button1添加一个点击事件(双击按钮Button1即可进入源代码输入界面),在事件上添加一些访问数据库对象或视图对象的SQL语句,运行工程,即可将满足要求的记录显示在界面的显示数据的控件上。换用不同的SQL语句,检查其执行结果。 上述每项实验内容相应的实验步骤必须进行详细的记录,并将其整理后写在实验报告中。
很抱歉,我并不是一个可以接收并处理实验报告的程序。但是,我可以为您提供一些关于 JSP 访问数据库的基本知识和指导。 首先,JSP(Java Server Pages)是一种用于创建动态Web页面的Java技术。它允许在页面中嵌入Java代码,以及使用标签库和达式语言来简化页面开发。 要在JSP中访问数据库,您需要使用JDBC(Java Database Connectivity)API。这个API提供了一组Java类和接口,用于连接和操作各种类型的数据库。 下面是一个简单的JSP页面,演示如何使用JDBC API连接到MySQL数据库,并查询其中的数据: ``` <%@ page language="java" %> <%@ page import="java.sql.*" %> <!DOCTYPE html> <html> <head> <title>JSP Database Example</title> </head> <body> <% // Connect to the database Connection conn = null; Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost/mydatabase"; String username = "root"; String password = "password"; conn = DriverManager.getConnection(url, username, password); // Query the database Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); // Display the results while (rs.next()) { out.println(rs.getString("name") + " " + rs.getInt("age")); } // Close the database connection rs.close(); stmt.close(); conn.close(); %> </body> </html> ``` 在这个例子中,我们首先使用Class.forName方法加载MySQL驱动程序,然后使用DriverManager.getConnection方法连接到MySQL数据库。接下来,我们使用Statement.executeQuery方法查询数据库,并使用ResultSet.next方法依次遍历查询结果。最后,我们关闭了ResultSet、Statement和Connection对象,以释放资源。 当然,上面的例子只是一个简单的示例,实际情况可能更加复杂。如果您想了解更多关于JSP访问数据库的知识,请参考相关的教程和文档。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值