加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

MySQL 内连接、外连接、左连接、右连接、全连接

发布时间:2023-01-05 05:31:39 所属栏目:MsSql教程 来源:转载
导读: 建表语句:
CREATE TABLE `a_table` (
`a_id` int(11) DEFAULT NULL,
`a_name` varchar(10) DEFAULT NULL,
`a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf

建表语句:

CREATE TABLE `a_table` (
  `a_id` int(11) DEFAULT NULL,
  `a_name` varchar(10) DEFAULT NULL,
  `a_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

CREATE TABLE `b_table` (
  `b_id` int(11) DEFAULT NULL,
  `b_name` varchar(10) DEFAULT NULL,
  `b_part` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8

表测试数据:

在这里插入图片描述

一、内连接

关键字:inner join on

语句:select * from a_table a inner join b_table b on a.a_id = b.b_id;

执行结果:

在这里插入图片描述

说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分。

在这里插入图片描述

二、左连接(左外连接)

关键字:left join on / left outer join on

语句:select * from a_table a left join b_table b on a.a_id = b.b_id;

执行结果:

在这里插入图片描述

说明:

left join 是left outer join的简写,它的全称是左外连接,是外连接中的一种。

左(外)连接,左表(a_table)的记录将会全部表示出来mssql 右连接,而右表(b_table)只会显示符合搜索条件的记录。右表记录不足的地方均为NULL。

在这里插入图片描述

三、右连接(右外连接)

关键字:right join on / right outer join on

语句:select * from a_table a right outer join b_table b on a.a_id = b.b_id;

执行结果:

在这里插入图片描述

说明:

right join是right outer join的简写,它的全称是右外连接,是外连接中的一种。

与左(外)连接相反,右(外)连接,左表(a_table)只会显示符合搜索条件的记录,而右表(b_table)的记录将会全部表示出来。左表记录不足的地方均为NULL。

在这里插入图片描述

四、全连接(全外连接)

MySQL目前不支持此种方式,可以用其他方式替代解决。

全外连接:左表和右表都不做限制,所有的记录都显示,两表不足的地方用null 填充;

也就是:

左外连接=左表全部记录+相关联结果

右外连接=右表全部记录+相关联结果

全外连接=左表全部记录+右表全部记录+相关联结果=左外连接+右外连接-相关联结果(即去重复)

那么在MYSQL中谁可以做到呢?

UNION

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

注释:默认地,UNION 操作符选取不同的值。如果允许重复的值,请使用 UNION ALL。

故实现全外连接可以使用:

SELECT * FROM emp e LEFT JOIN dept d ON e.deptno=d.deptno
UNION
SELECT * FROM emp e RIGHT JOIN dept d ON e.deptno=d.deptno;

在这里插入图片描述

注释:以上连接全为等值连接;Oracle中全外连接可以使用full join;请不要弄混。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章