图书(书号,书名,价格,出版社) 读者(卡号,姓名,年龄,所属单位)借阅(书号,卡号,借阅日期)根据上面基本表的信息完成下列查询。1 查询书号为tp0103被借阅次数。2 查询工作单位在计算机系的读者姓名和借阅次数。3 查阅年龄50以上借阅次数2次以下的读者信息。4 查询从来没被借阅的图书信息。
时间: 2023-06-18 16:06:00 浏览: 126
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触发器,让它能够自动向借阅表中插入一行记录,使得该书被借阅次数最多的读者借阅。
首先,需要建立一个触发器,它会在向图书表中插入一条记录时被触发。触发器的代码如下:
```
CREATE TRIGGER update_borrowed_books
AFTER INSERT ON books
FOR EACH ROW
BEGIN
DECLARE max_count INT;
DECLARE max_reader_id INT;
SELECT COUNT(*) INTO max_count, reader_id INTO max_reader_id
FROM borrowed
WHERE book_id = NEW.book_id
GROUP BY reader_id
ORDER BY COUNT(*) DESC
LIMIT 1;
INSERT INTO borrowed (book_id, reader_id, borrow_date)
VALUES (NEW.book_id, max_reader_id, NOW());
END;
```
这个触发器会在向图书表中插入一条记录时被触发。它首先会查询借阅表中该书被不同读者借阅的次数,并找出借阅次数最多的读者。然后,它会向借阅表中插入一条新的记录,让该读者借阅这本书。
请注意,这个触发器只会在向图书表中插入一条记录时被触发。如果要更新图书表中的记录,或者删除图书表中的记录,就需要另外定义相应的触发器。
图书(书号,书名,价格,出版社)读者(卡号,姓名,年龄,所属单位)借阅(书号,卡号,借阅日期) 根据上面基本表的信息定义一个存储过程,完成下面功能:入口参数:书号 1显示图书借阅信息 2 如果没人借,删除该书记录3 如果价格5元以下,涨价至5元。
以下是基于MySQL语法的存储过程实现,实现了上述功能:
```
CREATE PROCEDURE book_management(IN book_id INT)
BEGIN
DECLARE borrow_count INT DEFAULT 0;
DECLARE book_price FLOAT DEFAULT 0;
-- 查询借阅次数
SELECT COUNT(*) INTO borrow_count FROM 借阅 WHERE 书号 = book_id;
-- 查询价格
SELECT 价格 INTO book_price FROM 图书 WHERE 书号 = book_id;
IF borrow_count > 0 THEN
-- 显示借阅信息
SELECT * FROM 借阅 WHERE 书号 = book_id;
ELSEIF book_price < 5 THEN
-- 涨价至5元
UPDATE 图书 SET 价格 = 5 WHERE 书号 = book_id;
SELECT CONCAT('书号为', book_id, '的图书价格已经涨至5元') AS message;
ELSE
-- 删除该书记录
DELETE FROM 图书 WHERE 书号 = book_id;
SELECT CONCAT('书号为', book_id, '的图书记录已经删除') AS message;
END IF;
END;
```
可以通过调用该存储过程来实现上述功能:
```
CALL book_management(123); -- 假设需要处理书号为123的图书
```
其中,存储过程中的三个查询语句可以根据具体情况进行修改,比如增加查询条件、增加返回字段等。
阅读全文