关于MySQL内连接与外连接用法,全都在这里了

关于MySQL内连接与外连接用法,全都在这里了上节课我们给大家介绍了常用的 MySQL 多表联合查询用法 知道了 left join right join inner join 的基本用法 本节课我们继续展开讲讲 MySQL 多表联合查询的其他用法 全连接与笛卡尔连接

大家好,欢迎来到IT知识分享网。

上节课我们给大家介绍了常用的MySQL多表联合查询用法,知道了left join /right join /inner join 的基本用法。本节课我们继续展开讲讲MySQL多表联合查询的其他用法——全连接与笛卡尔连接。

01

全连接union&union all

首先看什么是全连接,具体可以看以下韦恩图。

关于MySQL内连接与外连接用法,全都在这里了

全连接full outer join

全连接定义:全连接全称为全外连接,它也是外连接的一种。它将左右两个表通过ON进行条件连接,并且最后列出左右两个表的所有记录。

但在MySQL中,它是不支持全连接这种用法的,不过可以使用union或union all进行弥补。例如,现在我们想把上节课左连接与右连接的结果合并起来,即我们想把使用华为手机的乘客编号、姓名、是否幸存、船舱等级和手机品牌船舱等级为3且存活的乘客编号、姓名、是否幸存、船舱等级和手机品牌两种查询结果合并,我们看分别使用union和union all该怎么做。

【union】

SELECT a.PassengerId,a.name,b.survived,b.pclass,a.phonebrand from phone a left join titanic b on a.PassengerId=b.passengerId where a.phonebrand="HUAWEI" UNION SELECT a.passengerId,a.name,b.survived,b.pclass,a.phonebrand from phone a right join titanic b on a.PassengerId=b.passengerId where b.survived=1 and b.pclass=3;

使用union查询结果如下

关于MySQL内连接与外连接用法,全都在这里了

union 查询结果

【union all】

SELECT a.PassengerId,a.name,b.survived,b.pclass,a.phonebrand from phone a left join titanic b on a.PassengerId=b.passengerId where a.phonebrand="HUAWEI" UNION all SELECT a.passengerId,a.name,b.survived,b.pclass,a.phonebrand from phone a right join titanic b on a.PassengerId=b.passengerId where b.survived=1 and b.pclass=3;

使用union all 查询结果如下

关于MySQL内连接与外连接用法,全都在这里了

union all查询结果

可以看到,相同的查询语句union的查询结果为23行记录,而union all 的查询结果为131行记录。因此,可以简单总结union 与union all 两种查询结果的要点与区别如下:

  • 通过union连接的查询语句前后分别单独取出的列数必须相同;
  • 在不要求合并的前后列名称相同时,输出结果以合并前的第一段SQL列名称为准;
  • union会对合并结果进行去重,而union all 只是简单对前后查询结果进行合并,不会去重;
  • 不推荐在union 或union all语句中进行order by 排序操作。

02

笛卡尔连接cross join

MySQL笛卡尔连接是MySQL中的一种连接方式,区别于内连接和外连接,对于cross join连接来说,其实使用的就是笛卡尔连接。在MySQL中,当两个表使用了笛卡尔连接时,cross join会产生一个结果集,该结果集是两个关联表的行的乘积。通常,如果每个表分别具有n和m行,则结果集将具有n*m行。

关于MySQL内连接与外连接用法,全都在这里了

笛卡尔连接示意图

例如,我们已知phone表有行记录,titanic表有891行记录,那么两者做笛卡尔连接的总记录数就是x891=,其基本用法如下。(由于结果太大,我们就不实际运行了)

SELECT * from phone a cross join titanic b

03

总结

以上就是我们本节课要介绍的全部内容,总结一下:

  • 在MySQL中不支持全连接的用法,不过我们可以使用union或union all 对前后结果进行合并。
  • union会对合并结果进行去重,而union all 不会对合并结果进行去重,但union的计算量显然更大,运行效率没有union all高。
  • 笛卡尔连接cross join是对两个表的所有行记录进行乘积,计算量巨大,一般在实际中不推荐使用。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/188081.html

(0)
上一篇 2025-09-15 07:26
下一篇 2025-09-15 07:45

相关推荐

发表回复

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

关注微信