left joinright joininner join:这些都是SQL中用来连接两个多个表的操作
unionunion all:用于合并两个多个 SELECT 语句结果
但是有时候,对于Select出来的结果集不是很清楚。

假设我们有两张表。person表是左边的表。address是右边的表。我们分别用inner join,left join和right join,去验证select结果集到底有什么区别
在这里插入图片描述
1.inner join,也称内连接我们写出来的sql如下

select * from test.person p inner join test.address a on a.personID = p.personId 

这条sql的查询结果是:在这里插入图片描述
由此可见,返回结果行是连接条件为真的行。如果连接条件没有匹配行,那么返回结果,就会是空的。
在这里插入图片描述
2.left join,也称左连接给定下面sql语句

select * from test.person p left join test.address a on a.personID = p.personId 

这条sql的查询结果是:
在这里插入图片描述
可以从结果中看到返回person表中所有的行,以及address匹配的行,如果address表中没有匹配的行,则返回NULL。可以总结为:select结果集是返回左边表中的所有行,以及与右边表匹配的行,如果右边表中没有匹配的行,则返回NULL

3.right join,也称连接,顾名思义,用法与左连接是相似的。依旧给定语句

select * from test.person p right join test.address a on a.personID = p.personId 

这条sql的查询结果是:
在这里插入图片描述
可以从结果中看到,返回address表中所有的行,以及person表匹配的行,如果person表中没有匹配的行,则返回NULL。可以总结为:select结果集是返回右边表中的所有行,以及与左边表匹配的行,如果左边表中没有匹配的行,则返回NULL

4.unionunion all
与上面三个不同的是,unionunion all内部select语句必须拥有相同数量的列,并且列的顺序必须相同,同时,列也必须拥有相似的数据类型
比如给定以下两条sql:

select personID from test.person
select personID from test.address

使用union时的结果如下

select personID from test.person 
union
select personID from test.address

在这里插入图片描述
使用union all时的结果如下

select personID from test.person 
union all
select personID from test.address  

在这里插入图片描述
由此可见,union是选取不同值返回。union all是返回所有的值

原文地址:https://blog.csdn.net/c_xiazai12345/article/details/134644469

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_16017.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注