【MySQL 第八天 子查询|比较运算符|插入记录子查询|表和表互查】


在这里插入图片描述


【1】mysql子查询

子查询的引入
在这里插入图片描述

-- 身份证号为`52242855555`的用户,今天借了一本图书编号为`4454545`的图书。完成下列需求
-- 更新读者信息表得到余额

 -- 先将这个数据插入图书信息表 更新以下他的价格
insert into bookinfo(book_id) values('4454545');
update bookinfo set price = price+23.33 where book_id=4454545;
-- 查看这条数据
select price from bookinfo where book_id =4454545;

-- 插入身份信息到读者信息表
insert into readerinfo(card_id) values('52242855555');

-- 由于该读者借了书 就要给钱 所以扣钱 更新他的钱 通过查询的方式获取数据 即子查询
update readerinfo set balance = balance- 0.05*(select price from bookinfo where book_id =4454545) 
	where card_id=52242855555;

在这里插入图片描述


子查询:(select column_name from tab_name where column_name = value)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


【2】mysql比较运算符子查询

在这里插入图片描述

先插入数据,在演示


-- 向bookparent 插入数据
insert into bookparent(book_name,parent_id)values('眼科学',2),('临床医学',2);

-- 向bookinfo 插入数据
insert into bookinfo(book_id,book_copy_id,book_name,author,price,store,press,pubdate)
values
(20151101,6,'临床诊断学','小明,小红等',115,10,'人民出版社','2015-06-01'),
(20151102,6,'临床诊断学1','小明1,小红1等',115.5,10,'人民出版社1','2015-07-01');

-- 将readerinfo 的52242855555的余额改为500
update readerinfo set balance = 500 where card_id ='52242855555';

-- 向 borrowinfo 插入一条数据
insert into borrowinfo(book_id,card_id,borrow_date,return_date,status)
values(20151101,'52242855555','2017-10-10','2017-11-10','否');


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


在这里插入图片描述

开始演示子查询,设计多个表之间的联系

-- 查询借阅信息表,显示借《C++》这本书的借阅记录
-- 通过书名 获取book_id 通过book_id查看信息
select *from  borrowinfo where book_id =(select book_id from bookinfo where book_name ='C++');

-- 查询图书信息表,显示图书价格小于图书平均价格的图书信息
-- 先求平均价格 并保留两位小数
select *from bookinfo where price<(select round(AVG(price),2) from bookinfo);

-- 查询图书信息表,显示图书类别不是'数据库'的所有图书信息
-- 在bookparen获取'数据库'的类别ID即可
select *from bookinfo where book_copy_id <>(select book_id from bookparent where book_name ='数据库');

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


【1.1】any\all\some关键字修饰子查询

在这里插入图片描述
在这里插入图片描述

-- 查询图书信息表 bookparent 显示图书类别为'计算机'的所有图书信息
select *from bookinfo where book_copy_id = ANY(select book_id from bookparent where parent_id = 1);

-- 查询图书信息表 bookparent 显示图书类别为'计算机'的所有图书信息
select *from bookinfo where book_copy_id = some(select book_id from bookparent where parent_id = 1);

在这里插入图片描述


【3】mysql [NOT]IN或exists的子查询

-- 查询图书信息表 ,显示图书类别为'医学'的所有图书
select *from bookinfo where book_copy_id = any(select book_id from bookparent where parent_id = 2);

在这里插入图片描述

在这里插入图片描述
异曲同工之妙 相当于 =等于in 仅在这里具有可比性

-- 查询图书信息表 ,显示图书类别为'医学'的所有图书
select *from bookinfo where book_copy_id  in (select book_id from bookparent where parent_id = 2);

在这里插入图片描述


在这里插入图片描述

在这里插入图片描述

-- 查询图书信息表 ,显示图书类别不是为'医学'的所有图书
select *from bookinfo where book_copy_id not in (select book_id from bookparent where parent_id = 2);

在这里插入图片描述


在这里插入图片描述
在这里插入图片描述

-- 查看图书信息表中是否有`临床医学`的类别,如果有,查看图书信息表
select *from bookinfo where exists(select book_id from bookparent where book_name ='临床医学');

在这里插入图片描述


【4】mysql插入记录使用子查询

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

-- 创建罚款记录信息表
create table readerfee(
	book_id int,
	card_id char(18),
	return_date date,
	actual_return_date date,
	book_fee decimal(7,3),
	primary key(book_id,card_id)
);

-- 查询没有还书的 信息 使用datediff(系统时间,还书时间)>0 计算时间间隔天数
-- 现在时间-还书时间 >0 代表已经到了还书时间 
select sysdate();
select book_id,card_id,return_date from borrowinfo where datediff(sysdate(),return_date)>0 
and status = '否';

-- 将没有还书的信息插入到readerfee表
insert into readerfee(book_id,card_id,return_date)select book_id,card_id,return_date 
from borrowinfo where datediff(sysdate(),return_date)>0 and status = '否';

在这里插入图片描述


在这里插入图片描述

UPDATE borrowinfo set status ='是' WHERE book_id =1 and card_id ='52214685259788';

update readerfee set actual_return_date=sysdate(),book_fee = DATEDIFF(SYSDATE(),return_date)*0.2
WHERE book_id =1 and card_id ='52214685259788';

select *from readerfee ;

在这里插入图片描述


越到后面越重要,下一节别错过啊:/😕😕😕

  • 13
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qt历险记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值