MySql(12)--MySQL 多表连接查询的介绍

多表连接查询的介绍
将一张表中的行按照某个条件(连接条件)和另一张表中的行连接起来形成一个新行的过程
 根据连接查询返回的结果,分3类:

    内连接(inner join)

    外连接(outer join)

    交叉连接(cross join)
– 多表连接
– 通过查看图书信息表和图书类别表来获取图书编号、图书名称、图书类别
这里写图片描述
select book_id,book_name,category from bookinfo inner join bookcategory on bookinfo.book_category_id = bookcategory.category_id;
这里写图片描述

2 内连接
这里写图片描述
比如
– 由于图书借阅统计的需要,想查询未归还图书的图书编号,图书名称,身份证号,姓名,电话,归还日期, 是否归还。
book_id在两个表中都有,那就要标明是哪个表,如果只在一个表当中存在就可以直接使用
select borrowinfo.book_id,book_name,borrowinfo.card_id, name, tel, return_date, status from borrowinfo
inner join bookinfo on borrowinfo.book_id = bookinfo.book_id
inner join readerinfo on borrowinfo.card_id = readerinfo.card_id
where borrowinfo.status = ‘否’;

可以用t1,t2,t3简化代替
select t1.book_id,book_name,t1.card_id, name, tel, return_date, status from borrowinfo t1
join bookinfo t2 on t1.book_id = t2.book_id
join readerinfo t3 on t1.card_id = t3.card_id
where t1.status = ‘否’;

3 外连接
这里写图片描述
这里写图片描述
这里写图片描述
– 根据业务需要,我们需要查看图书类别表中的所有类别下都有哪些图书。
select book_id, book_name, category from bookcategory
left join bookinfo on bookcategory.category_id = bookinfo.book_category_id
where parent_id<>0;

select book_id, book_name, category from bookinfo a
right join bookcategory b on b.category_id = a.book_category_id;

4 自连接
这里写图片描述
比如这张表
这里写图片描述
– 查询所有图书类别的图书类别编号,类别名称,上级分类名称。
select s.category_id as’图书类别编号’, s.category as ‘图书类别名称’, p.category as’图书的上级分类名称’ from bookcategory s
left join bookcategory p
on s.parent_id = p.category_id;
这里写图片描述
改成内连接就是
这里写图片描述
5 多表更新
今天身份证号为210210199901012222的读者将超限的图书20151101归还,根据描述实现如下需求:
1、更新借阅信息表,将借阅状态(status)更新为‘是’。
2、更新罚款记录信息表,更新实际还书日期和罚款金额,罚款金额为每超出一天扣0.2元。
3、同时更新读者信息表的余额。(在余额中扣除罚款金额)
*/

update readerfee t1 join readerinfo t2 on t1.card_id = t2.card_id
set actual_return_date = sysdate(),book_fee=datediff(sysdate(),return_date)*0.2,balance = balance - book_fee
where t1.book_id = 20151101 and t1.card_id = ‘210210199901012222’;

6 多表删除
复制表格
create table bookcategory_bak
as
select * from bookcategory;

create table bookinfo_bak
as
select * from bookinfo;
– 1、由于业务需求,需要删除图书类别表中在图书信息表中没有图书记录的类别。
select book_id,book_name,category from bookcategory_bak t1
left join bookinfo_bak t2
on t1.category_id = t2.book_category_id
where parent_id<>0;
这里写图片描述
delete t1 from bookcategory_bak t1
left join bookinfo_bak t2
on t1.category_id = t2.book_category_id
where parent_id<>0 and book_id is null;
这里写图片描述

– 2、需要删除图书类别表的编程语言的类别,以及图书信息表中关于编程语言的图书记录。

select book_id,book_name,category_id,category from bookcategory_bak t1
inner join bookinfo_bak t2
on t1.category_id = t2.book_category_id;
这里写图片描述

delete t1,t2 from bookcategory_bak t1
inner join bookinfo_bak t2
on t1.category_id = t2.book_category_id
where t1.category_id = 3;
这里写图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42350428/article/details/81742244