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 ;
以上结果执行如下。