9...查询图书馆各书现存本数

先查询已借出图书的书号,借出本数

select book_No,count(book_No) 未归还的书的本数
from  borrow_Return
where  return_time is null
group by book_No

查询结果如下图:
在这里插入图片描述

BOOK表再和上查询结果通过book_no左外连接起起来

select book.book_No,book.book_name,quantity-isnull(x.未归还的书的本数,0) 现存本书
from book left join  (select book_No,count(book_No) 未归还的书的本数
from  borrow_Return
where  return_time is null
group by book_No)  x on x.book_No=book.book_No

查询结果如下图:

在这里插入图片描述

问题1:为啥用左外连接?

如果还有书从没被借阅过的话,直接用自然连接会丢失这些元组,从而找不到未被借阅过的书的现存数量,这显然是不合理的.

问题2:isnull()是个啥?为啥要用它?

isnull(a,b)意思是判断字段a是否为空,不为空的话就返回字段a的值,为空的话就返回参数b的值
如图所示:未归还本书可能为空,而一个字段减去空字段也会变成空
在这里插入图片描述
isnull(x.未归还的书的本数,0)意思是就是未归还本数为空时返回数字 0 .然后用quantity减去它
就是现存数量了

猜你喜欢

转载自blog.csdn.net/jiwei_1234____5/article/details/83789121