sql中的left join, right join 和inner join,union 与union all的用法

left join, right join 和inner join:这些都是SQL中用来连接两个或多个表的操作。

union,union all:用于合并两个或多个 SELECT 语句的结果。

但是有时候,对于Select出来的结果集不是很清楚。

假设我们有两张表。person表是左边的表。address是右边的表。我们分别用inner join,left join和right join,去验证select的结果集到底有什么区别。

1.inner join,也称内连接,我们写出来的sql如下:

bash 复制代码
select * from test.person p inner join test.address a on a.personID = p.personId 

这条sql的查询结果是:

由此可见,返回的结果行是连接条件为真的行 。如果连接条件没有匹配行,那么返回的结果,就会是空的。

2.left join,也称左连接,给定下面sql语句:

bash 复制代码
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,也称右连接,顾名思义,用法与左连接是相似的。依旧给定语句:

bash 复制代码
select * from test.person p right join test.address a on a.personID = p.personId 

这条sql的查询结果是:

可以从结果中看到,返回了address表中所有的行,以及person表匹配的行,如果person表中没有匹配的行,则返回NULL。可以总结为:select结果集是返回右边表中的所有行,以及与左边表匹配的行,如果左边表中没有匹配的行,则返回NULL

4.union和union all

与上面三个不同的是,union和 union all内部的 select语句必须拥有相同数量的列,并且列的顺序必须相同,同时,列也必须拥有相似的数据类型

比如给定以下两条sql:

bash 复制代码
select personID from test.person
bash 复制代码
select personID from test.address

使用union时的结果如下:

bash 复制代码
select personID from test.person 
union
select personID from test.address

使用union all时的结果如下:

bash 复制代码
select personID from test.person 
union all
select personID from test.address  

由此可见,union是选取不同值 返回。union all是返回所有的值

相关推荐
小高求学之路17 小时前
Neo4j - 为什么需要图数据库
数据库·neo4j
rocksun18 小时前
Rust 异步编程:Futures 与 Tokio 深度解析
数据库·rust
曹牧18 小时前
Oracle:前五个字符
数据库·oracle
Coder_Oldou18 小时前
【经验分享】MySQL线上使用经验
数据库·经验分享·mysql
在职工程博士18 小时前
在职博士-南京邮电大学申请考核制博士招生实施细则(信息通信、信息管理工程方向)
大数据·数据库·嵌入式硬件·物联网·硬件工程·数据库开发
chushiyunen18 小时前
mysql性能调优、连接数、问题排查等
数据库·mysql
盛世宏博北京18 小时前
《RS485 总线架构下古籍库房中央控制 + 四维防护自动化系统技术方案》
数据库·温湿度·文物库房
Predestination王瀞潞18 小时前
数据库MySql 8.0.44的安装
数据库·mysql
码农阿豪18 小时前
兼容是基石,超越是未来:金仓数据库的三重革新
数据库
廋到被风吹走18 小时前
【数据库】【Redis】基本概念和特点
数据库·redis·缓存