Mysql 多表连接查询

Mysql 多表连接查询本文部分内容转载至:Mysql多表查询详解,同时感谢原作者的整理与创作;

大家好,又见面了,我是你们的朋友全栈君。

本文部分内容参考了:Mysql 多表查询详解图解SQL的各种连接,同时感谢原作者的整理与创作;
另外,推荐:
Mysql 连接的使用 – 菜鸟教程
MySQL 8.0参考手册 – 官方手册

Mysql 连接

在一般的业务情况下,我们大致将 Mysql多表连接 分为如下几种:

  • 内连接:INNER JOIN – 可简写为 JOIN
  • 左外连接:LEFT OUTER JOIN – 可简写为 LEFT JOIN
  • 右外连接:RIGHT OUTER JOIN – 可简写为 RIGHT JOIN
  • 全连接:使用 UNION 完成;
  • 交叉连接:CROSS JOIN – 也称为 笛卡儿乘积连接,大抵不使用;

内连接 – INNER JOIN

SQL 语句:

SELECT * FROM a INNER JOIN b ON(a.id = b.id)

解释:
查询出 a表b表交集

图例:
INNER JOIN


左外连接 – LEFT OUTER JOIN

SQL 语句:

SELECT * FROM a LEFT OUTER JOIN b ON(a.id = b.id)

解释:
查询出 左边表 -- 即a表 的完全集,而 右边表 -- 即b表 中匹配的则有值,没匹配的以 null 值取代;

图例:
LEFT OUTER JOIN


右外连接 – RIGHT OUTER JOIN

SQL 语句:

SELECT * FROM a RIGHT OUTER JOIN b ON(a.id = b.id)

解释:
左外连接相反 ,查询出 右边表 -- 即b表 的完全集,而 左边表 -- 即a表 中匹配的则有值,没匹配的以 null 值取代;

图例:
RIGHT OUTER JOIN


全连接 – UNION

事实上由于 Mysql 不支持 FULL JOIN,所以我们将使用 UNION 来完成 全连接

SQL 语句:

SELECT * FROM a LEFT OUTER JOIN b ON(a.id = b.id) UNION SELECT * FROM a RIGHT OUTER JOIN b ON(a.id = b.id)

解释:
全连接左右外连接 的并集,连接表包含被连接的表的所有记录,如果缺少匹配的记录,,则以 null 取代;

图例:
这里写图片描述


交叉连接 – CROSS JOIN

关于 交叉连接 的教程,可以参考:MySQL交叉连接(CROSS
JOIN)
,本文此处便是转载于此;

CROSS JOIN 子句从连接的表返回行的 笛卡儿乘积

假设使用 CROSS JOIN 连接两个表;
结果集将包括两个表中的所有行,其中结果集中的每一行都是第一个表中的行与第二个表中的行的组合;
当连接的表之间没有关系时,会使用这种情况;

要特别注意的是,如果每个表有 1000 行,那么结果集中就有 1000 x 1000 = 1,000,000 行,那么数据量是非常巨大的;

SQL 语句:

SELECT * FROM a CROSS JOIN b /** * 注意: * 与 INNER JOIN 或 [LEFT, RIGHT] OUTER JOIN 子句不同 * CROSS JOIN 连接没有 ON 条件 */

添加了 WHERE 子句后,如果 a表b表 有关系,则 CROSS JOIN 的工作方式与 INNER JOIN 类似,SQL 语句为:

SELECT * FROM a CROSS JOIN b WHERE a.id = b.id


本文至此已结束,若有疏漏,还望诸位提醒更正

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/142939.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql alter 修改字段类型_Mysql必读mysql 增加修改字段类型及删除字段类型「建议收藏」

    mysql alter 修改字段类型_Mysql必读mysql 增加修改字段类型及删除字段类型「建议收藏」《MysqL必读MysqL增加修改字段类型及删除字段类型》要点:本文介绍了MysqL必读MysqL增加修改字段类型及删除字段类型,希望对您有用。如果有疑问,可以联系我们。添加)增加一个新列altertablet2adddtimestamp;altertableinfosaddextinyintnotnulldefault’0′;//删除列altertablet2…

    2022年5月24日
    33
  • 【Custom Mutator Fuzz】简单Protobuf使用练习

    【Custom Mutator Fuzz】简单Protobuf使用练习前面两篇文章中已经讲解了protobuf的结构以及生成代码的分析,这篇文章简单的介绍一下protobuf的使用。这里主要跟着libprotobuf-mutator_fuzzing_learning项目进行结构感知模糊测试练习

    2025年8月31日
    6
  • 手机按键精灵常用命令

    手机按键精灵常用命令微信类RunApp”com.tencent.mm”//打开微信应用RunApp”com.tencent.mm”,”.plugin.sns.ui.SnsTimeLineUI”//朋友圈RunApp”com.tencent.mm”,”.plugin.sns.ui.SnsMsgUI”//朋友圈回复给我的消息RunApp”com.tencen…

    2022年5月31日
    64
  • ostringstream用法

    ostringstream用法使用MFC都知道他有一个非常方便的字符串类CString,C++标准也有一个string类,但是处理起来不够灵活,特别是没有类似Format()的函数。 无意中看到ostringstream的用法,使用它可以达到类似的效果。 ostringstreamos;stringstr=”abcef”;inti=1000;osstd::coutos.st

    2022年6月28日
    56
  • 虚拟化为您打造下一代数据中心

    虚拟化为您打造下一代数据中心

    2021年7月27日
    58
  • python中encode和decode的区别_python isalpha

    python中encode和decode的区别_python isalpha在python中,我们通常使用的是unicode编码,但是日常文本使用各类编码为utf-8,编码的类型不一样,就容易造成乱码。为了避免读写操错误,我们需要进行转码则需要decode(解码)和encode(编码)方法。1、decode的作用是将其他编码的字符串转换成unicode编码将bytes类型转换为str类型(b.decode())2、encode的作用是将unicode编码转换成…

    2022年10月6日
    6

发表回复

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

关注全栈程序员社区公众号