通过视图v_book_borrow_reader查询借书过期的读者和借书情况及罚款金额(假定超期
时间: 2023-12-19 22:02:08 浏览: 134
视图v_book_borrow_reader是通过将借书表和读者表关联起来创建的,它包含了读者借书的相关信息,如读者ID、借书日期、应还日期等。通过该视图可以查询借书过期的读者以及其借书情况和罚款金额。
首先,根据视图v_book_borrow_reader查询借书过期的读者:
```
SELECT *
FROM v_book_borrow_reader
WHERE CURDATE() > 应还日期;
```
这条SQL查询语句会返回借书过期的读者的所有相关信息。
然后,查询这些过期读者的借书情况和罚款金额:
```
SELECT 读者ID, 借书日期, 应还日期, 罚款金额
FROM v_book_borrow_reader
WHERE CURDATE() > 应还日期;
```
这条SQL查询语句会返回借书过期的读者以及他们借书日期、应还日期和罚款金额的信息。
以上是通过视图v_book_borrow_reader查询借书过期的读者和借书情况及罚款金额的方法。查询结果中的罚款金额是根据应还日期和当前日期计算出来的超期天数乘以罚款单价所得到的。
相关问题
create trigger tri_jieshu on reader_borrow for insert as declare @id varchar(50) select @id=borrow_id from inserted update book_borrowing set book_surplus=book_surplus-1 where book_id=@id create trigger tri_huanshu on reader_back for insert as declare @id varchar(50) select @id=back_id from inserted update book_borrowing set book_surplus=book_surplus+1 where book_id=@id create proc payment @id varchar(20),@name varchar(20) as begin select borrow_date,back_date from reader_back,reader_borrow where back_id=borrow_id and back_id=@id and borrow_bookname=back_bookname and (select datediff(day, borrow_date,back_date) FROM reader_back,reader_borrow)>7 end create view view_pay as select * from reader_back,reader_borrow where (borrow_id=back_id and borrow_bookname=back_bookname) create proc proc_pay (@id varchar(20)) as select back_id,back_bookname,back_date,borrow_date from view_pay where back_id=@id exec proc_pay @id='1'该代码有什么语法错误
在触发器 tri_jieshu 和 tri_huanshu 中,update 语句中的 where 子句需要指定 book_id 而不是 borrow_id 和 back_id。应该修改为:
```
update book_borrowing set book_surplus=book_surplus-1 where book_id=(select book_id from inserted)
```
和
```
update book_borrowing set book_surplus=book_surplus+1 where book_id=(select book_id from inserted)
```
在 payment 存储过程中,应该将 datediff 函数的返回值赋值给一个变量,然后使用该变量进行比较。应该修改为:
```
create proc payment @id varchar(20),@name varchar(20) as
begin
declare @days int
select @days = datediff(day, borrow_date,back_date) FROM reader_back,reader_borrow
where back_id=borrow_id and back_id=@id and borrow_bookname=back_bookname
if (@days > 7)
begin
select borrow_date,back_date from reader_back,reader_borrow
where back_id=borrow_id and back_id=@id and borrow_bookname=back_bookname
end
end
```
在 proc_pay 存储过程中,应该将 @id 的数据类型修改为 varchar(50),并且在查询结果中使用别名来避免列名冲突。应该修改为:
```
create proc proc_pay (@id varchar(50)) as
begin
select b.back_id, b.back_bookname, b.back_date, r.borrow_date
from reader_back b, reader_borrow r
where b.back_id = r.borrow_id and b.back_id = @id and b.borrow_bookname = r.back_bookname
end
exec proc_pay @id='1'
```
在图书管理系统book 数据库,对经常要查询借书频率比较高的书籍信息, 为了便于查询,需要创建视图 view_borrow_book_top,同时使用 SSMS 和 TSQL 相关语句进行: 1. 视图的建立、修改、删除、加密 2. 对视图中数据进行编辑 34 3. 实现视图的约束、重命名
好的,我会根据您的要求回答问题。以下是对您的问题逐一回答。
1. 创建视图 view_borrow_book_top:
使用 T-SQL 语句创建视图 view_borrow_book_top,示例代码如下:
```
CREATE VIEW view_borrow_book_top AS
SELECT TOP 10 book_id, book_name, COUNT(*) AS borrow_count
FROM borrow_info
GROUP BY book_id, book_name
ORDER BY borrow_count DESC;
```
上述代码中,借阅信息存储在 borrow_info 表中,视图 view_borrow_book_top 中包含了 book_id、book_name 和 borrow_count 三个列,其中 borrow_count 表示该书籍的借阅次数。使用 GROUP BY 和 COUNT(*) 函数统计每本书籍的借阅次数,并使用 ORDER BY 按照借阅次数降序排列。使用 TOP 10 限制只显示前 10 个结果。
2. 视图的修改、删除、加密:
要修改视图,可以使用 ALTER VIEW 语句,示例代码如下:
```
ALTER VIEW view_borrow_book_top AS
SELECT TOP 20 book_id, book_name, COUNT(*) AS borrow_count
FROM borrow_info
GROUP BY book_id, book_name
ORDER BY borrow_count DESC;
```
上述代码将视图 view_borrow_book_top 修改为显示前 20 本借阅次数最多的书籍。要删除视图,可以使用 DROP VIEW 语句,示例代码如下:
```
DROP VIEW view_borrow_book_top;
```
上述代码将视图 view_borrow_book_top 删除。要加密视图,可以使用 WITH ENCRYPTION 关键字,示例代码如下:
```
CREATE VIEW view_borrow_book_top WITH ENCRYPTION AS
SELECT TOP 10 book_id, book_name, COUNT(*) AS borrow_count
FROM borrow_info
GROUP BY book_id, book_name
ORDER BY borrow_count DESC;
```
上述代码创建了一个加密的视图 view_borrow_book_top。
3. 对视图中数据进行编辑:
视图是基于表的查询结果,不能直接对视图中的数据进行编辑。如果需要修改或删除数据,需要修改原始表的数据。
4. 实现视图的约束、重命名:
视图只是查询结果的一个虚拟表,不能在视图中添加约束。如果需要添加约束,需要在原始表上添加约束。要重命名视图,可以使用 sp_rename 存储过程,示例代码如下:
```
sp_rename 'view_borrow_book_top', 'view_top_borrow_book';
```
上述代码将视图 view_borrow_book_top 重命名为 view_top_borrow_book。
阅读全文