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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SQL Server数据库分区分表

    SQL Server数据库分区分表当一个数据表的数据量达到千万级别以后,每次查询都需要消耗大量的时间,所以当表数据量达到一定量级后我们需要对数据表水平切割。水平分区分表就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下。这样把一个大的文件拆分成多个小文件,便于我们对数据的管理。下面我们来创建表分区代码创建分区表添加文件组代码格式:…

    2022年6月5日
    68
  • idea2021.1.4激活码【最新永久激活】

    (idea2021.1.4激活码)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlS3…

    2022年3月26日
    251
  • pycharm django环境搭建_django创建项目和应用的命令

    pycharm django环境搭建_django创建项目和应用的命令一、配置并准备你的环境1、首先,在设置里面选择好环境,这里我们使用python3.7(Ps:打开pycharm后—>File—>settings—>键入ProjectInterpreter),点击如下图所示的齿轮后出现Add。2、添加设置你自己安装的python后点击OK3、我们会看到现在都有什么东西,然后点击加号,下载django包。…

    2025年7月5日
    2
  • Java程序main方法执行流程

    Java程序main方法执行流程Java程序main方法执行流程当我们编写完java源代码程序后,经过javac编译后,执行java命令执行这个程序时,是怎么一步步的调用到我们程序中的main方法的呢?今天通过查看OpenJdk的源码来揭开它的神秘面纱。java命令是在安装jre/jdk时配置到系统环境路径中去的,执行java命令时会找到bin目录下的java可执行程序,并将我们编译后的java程序类名传递进去就可以执行了。…

    2022年5月13日
    47
  • 时钟周期,机器周期,指令周期的区别是什么_紫外分光吸光度大于1

    时钟周期,机器周期,指令周期的区别是什么_紫外分光吸光度大于1时钟周期     时钟周期也称为振荡周期,定义为时钟脉冲的倒数(时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时钟周期就是1/12us),是计算机中的最基本的、最小的时间单位。    在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。时钟频率越高,工作速度就越快。     8051单片机把一个时钟

    2022年10月13日
    3
  • 世界名着100部简介

    世界名着100部简介01、傲慢与偏见      02、孤星血泪      03、雾都孤儿        04、唐·吉诃德  05、安娜·卡列尼娜      06、飘      07、简·爱       08、悲惨世界  09、茶花女      10、基督山恩仇记      11、童年         12、这里的黎明静悄悄  13、钢铁是怎样炼成的

    2022年4月28日
    46

发表回复

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

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