Mysql中必须掌握的JOIN各种连接!

JOIN 用于根据两个或多个表中的列之间的关系,从这些表中查询数据。常见的有以下三种。
1.INNER JOIN (内连接或等值连接),获取两个表中字段匹配关系的记录。
2.LEFT JOIN(左连接),获取左表中的所有记录,即使在右表没有对应匹配的记录。
3.RIGHT JOIN(右连接),与 LEFT JOIN 相反,用于获取右表中的所有记录,即使左表没有对应匹配的记录。

新建两张表,tb_author和tb_book,tb_author用于存放所有作者信息,结构和数据如下。
在这里插入图片描述
tb_book用来存放书的一些信息,结构和数据如下。
在这里插入图片描述
注意上面作者周彦伟在tb_book表中没有书,以及编码这本书的作者在tb_author作者信息表中不存在。

1.INNER JOIN

在这里插入图片描述
组合两个表中的记录,只要在公共字段之中有相符的值就返回,如现在要获取所有书列表,并且这本书的作者在tb_author中存在。

 select tb_author.author_name,tb_book.book_name 
 from  tb_author 
 inner join  tb_book 
 on  tb_author.author_name=tb_book.book_author

以上sql语句执行结果如下,显而易见没有周彦伟,因为他没有书记录。
在这里插入图片描述

2.LEFT JOIN

在这里插入图片描述
返回左表的全部行和右边满足条件的行,如果左表中的行在右表没有匹配的,则右表中用Null代替。
如现在获取所有作者的所有出版的书,在表中周彦伟没有出版的书,则理应返回Null

select tb_author.author_name,tb_book.book_name 
from  tb_author 
left join tb_book 
on tb_author.author_name=tb_book.book_author;

以上sql执行结果如下。
在这里插入图片描述

3.RIGHT JOIN

在这里插入图片描述
和LEFT JOIN相反,如现在要获取所有书,在tb_author中没有对应作者信息的行则返回Null。在上述表数据中,编码这本书的作者信息在tb_author中是没有对应信息的,理应返回Null。

select tb_author.author_name,tb_book.book_name 
from  tb_author 
right join tb_book 
on tb_author.author_name=tb_book.book_author;

以上Sql执行结果如下。
在这里插入图片描述

4.配合Where

如现在要查看谁没出版书,也就是left join配合 where筛选tb_book.book_name为null的人。

select tb_author.author_name,tb_book.book_name 
from  tb_author 
left join tb_book on 
tb_author.author_name=tb_book.book_author 
where tb_book.book_name is NULL

以上结果执行如下。
在这里插入图片描述

同样反过来查看哪本书的作者在作者信息表中不存在。

select tb_author.author_name,tb_book.book_name 
from  tb_author 
right join tb_book 
on tb_author.author_name=tb_book.book_author 
where tb_author.author_name is Null ;

以上结果执行如下。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值