图书(书号,书名,价格,出版社) 读者(卡号,姓名,年龄,所属单位)借阅(书号,卡号,借阅日期)根据上面基本表的信息完成下列查询。1 查询书号为tp0103被借阅次数。2 查询工作单位在计算机系的读者姓名和借阅次数。3 查阅年龄50以上借阅次数2次以下的读者信息。4 查询从来没被借阅的图书信息。
时间: 2023-06-18 18:06:00 浏览: 80
1. 查询书号为tp0103被借阅次数。
```
SELECT COUNT(*) FROM 借阅 WHERE 书号 = 'tp0103';
```
2. 查询工作单位在计算机系的读者姓名和借阅次数。
```
SELECT 读者.姓名, COUNT(*) AS 借阅次数
FROM 读者
INNER JOIN 借阅 ON 读者.卡号 = 借阅.卡号
WHERE 读者.所属单位 = '计算机系'
GROUP BY 读者.卡号;
```
3. 查阅年龄50以上借阅次数2次以下的读者信息。
```
SELECT * FROM 读者
WHERE 年龄 >= 50
AND 卡号 IN (
SELECT 卡号 FROM 借阅
GROUP BY 卡号
HAVING COUNT(*) < 2
);
```
4. 查询从来没被借阅的图书信息。
```
SELECT * FROM 图书
WHERE 书号 NOT IN (
SELECT 书号 FROM 借阅
);
```
相关问题
图书(书号,书名,价格,出版社) 读者(卡号,姓名,年龄,所属单位)借阅(书号,卡号,借阅日期)建立图书的insert触发器,若向图书中插入一条记录,则自动向借阅表中插入一行,令该书被借阅次数最多的读者借阅。
好的,您的问题是如何建立图书的insert触发器,实现自动向借阅表中插入一行,并让该书被借阅次数最多的读者借阅?
下面是一个可能的解决方案:
首先,创建一个借阅次数最多的读者视图,该视图可以使用以下SQL语句创建:
```
CREATE VIEW most_borrower AS
SELECT b.书号, b.卡号, COUNT(*) AS borrow_count
FROM 借阅 b
GROUP BY b.书号, b.卡号
HAVING COUNT(*) = (
SELECT MAX(borrow_count)
FROM (
SELECT COUNT(*) AS borrow_count
FROM 借阅
GROUP BY 书号, 卡号
) AS t
)
```
该视图将返回每本书被借阅次数最多的读者。
接下来,创建一个insert触发器,在向图书表中插入新记录时自动向借阅表中插入一行,并让该书被借阅次数最多的读者借阅。以下是一个示例触发器:
```
CREATE TRIGGER insert_borrow
AFTER INSERT ON 图书
FOR EACH ROW
BEGIN
INSERT INTO 借阅 (书号, 卡号, 借阅日期)
SELECT NEW.书号, mb.卡号, NOW()
FROM most_borrower mb
WHERE mb.书号 = NEW.书号
LIMIT 1;
END
```
该触发器将在每次向图书表中插入新记录时执行。它将插入一条新的借阅记录,其中书号为新插入的书号,卡号为借阅次数最多的读者的卡号,借阅日期为当前日期。注意,我们使用视图most_borrower来查找借阅次数最多的读者。
请注意,这只是一个示例解决方案,具体实现可能因数据库系统和数据模型而异。如果您需要更多的帮助,请提供更具体的信息。
图书(书号,书名,价格,出版社)读者(卡号,姓名,年龄,所属单位)借阅(书号,卡号,借阅日期) 根据上面基本表的信息定义一个存储过程,完成下面功能:入口参数:书号 1显示图书借阅信息 2 如果没人借,删除该书记录3 如果价格5元以下,涨价至5元。
根据您提供的基本表信息,可以定义以下存储过程来实现您的要求:
```
CREATE PROCEDURE book_handle
@book_id INT
AS
BEGIN
-- 1.显示图书借阅信息
SELECT B.书号, B.书名, B.价格, B.出版社, R.卡号, R.姓名, R.年龄, R.所属单位, J.借阅日期
FROM 图书 B
LEFT JOIN 借阅 J ON B.书号 = J.书号
LEFT JOIN 读者 R ON J.卡号 = R.卡号
WHERE B.书号 = @book_id;
-- 2.如果没人借,删除该书记录
IF NOT EXISTS(SELECT * FROM 借阅 WHERE 书号 = @book_id)
BEGIN
DELETE FROM 图书 WHERE 书号 = @book_id;
PRINT '该书记录已删除';
END
-- 3.如果价格5元以下,涨价至5元
IF EXISTS(SELECT * FROM 图书 WHERE 书号 = @book_id AND 价格 < 5)
BEGIN
UPDATE 图书 SET 价格 = 5 WHERE 书号 = @book_id;
PRINT '该书价格已涨至5元';
END
END
```
以上存储过程可以根据输入的书号参数实现以下功能:
1. 显示该书的借阅信息,包括书名、价格、出版社、借阅日期、借书人卡号、姓名、年龄和所属单位。
2. 如果该书没有人借阅,将该书的记录从图书表中删除,并输出提示信息。
3. 如果该书价格低于5元,将该书的价格涨至5元,并输出提示信息。
注意:该存储过程中的打印信息可以根据实际需求进行修改。