mysql实现查询在借图书的在借数量(rdate为null表示未归还,即处于在借状态),book表中字段有bno,bname,borrow表中有字段bno,bdate,查询每个图书的再借数量
时间: 2023-11-28 15:51:04 浏览: 103
可以使用以下SQL语句实现查询每个图书的在借数量:
```
SELECT b.bno, b.bname, COUNT(*) as borrow_count
FROM book b
INNER JOIN borrow br ON b.bno = br.bno
WHERE br.rdate IS NULL
GROUP BY b.bno, b.bname
```
解释一下这个SQL语句:
- 首先使用内连接(INNER JOIN)将book表和borrow表连接起来,以便同时获取图书信息和借阅信息。
- 然后通过WHERE子句筛选出rdate为NULL的借阅记录,即在借状态的记录。
- 最后使用GROUP BY子句将结果按照图书编号和图书名称分组,并使用COUNT函数统计每个分组内的借阅记录数量,即在借数量。
执行此SQL语句后,可以得到每个图书在借的数量。
相关问题
使用存储过程,思路如下: 2.1 查询在借图书的在借数量 2.2 逐行读取查询结果中的书号和在借量到变量sh和zjl, 更新book表中书号等于sh的数据记录,设置 available=number-zjl; 2.3 更新book表中available字段为空的数据记录,设置 available=number; book表字段有bno,bname,number,available borrow表字段有bno,rdate 在借图书的在借数量(rdate为null表示未归还,即处于在借状态
)可以使用以下存储过程实现:
```
CREATE PROCEDURE update_available()
BEGIN
DECLARE sh VARCHAR(20);
DECLARE zjl INT;
-- 查询在借图书的在借数量
SELECT bno, COUNT(*) INTO sh, zjl FROM borrow
WHERE rdate IS NULL
GROUP BY bno;
-- 逐行更新book表中的记录
WHILE sh IS NOT NULL DO
UPDATE book SET available = number - zjl
WHERE bno = sh;
SELECT bno, COUNT(*) INTO sh, zjl FROM borrow
WHERE rdate IS NULL AND bno > sh
GROUP BY bno;
END WHILE;
-- 更新剩余的book表记录
UPDATE book SET available = number
WHERE available IS NULL;
END
```
该存储过程首先查询在借图书的在借数量,并逐行读取结果进行更新。最后,更新剩余的book表记录。
用MySQL图书借阅表 borrow定义如下,其中bno表示图书编号,dno表示读者身份证号,bdate表示借书日期,rdate表示还书日期。 借出图书时bdate填入当天日期,rdate填入空值。 归还图书时rdate填入归还当日日期。
好的,请问你需要我做什么呢?如果你想让我帮你创建这个表,你可以使用以下的 SQL 语句:
```sql
CREATE TABLE borrow (
bno INT NOT NULL,
dno VARCHAR(18) NOT NULL,
bdate DATE NOT NULL,
rdate DATE,
PRIMARY KEY (bno, dno)
);
```
在这个 SQL 语句中,我们定义了一个名为 `borrow` 的表,包含了 `bno`、`dno`、`bdate` 和 `rdate` 四个字段。其中,`bno` 是一个整数类型,`dno` 是一个长度为 18 的字符串类型,`bdate` 和 `rdate` 都是日期类型。我们还使用了 `PRIMARY KEY` 来指定了表的主键,即由 `bno` 和 `dno` 这两个字段组成的联合主键。这样可以确保每个借阅记录的图书编号和读者身份证号都是唯一的。
阅读全文