我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

首先必须澄清的是:mysql不支持outer join语句,只有inner join语句,并且可以简称为join,这个是本文正确理解的前提。非要说mysql支持outer join的话,请检查你的数据库到底是不是mysql呢?

苏南大叔:mysql,如何理解内连接inner join和外连接union语句? - mysql-inner-join
mysql,如何理解内连接inner join和外连接union语句?(图4-1)

大家好,这里是苏南大叔的平行空间笔记本博客,记录苏南大叔关于代码的所学所想。本文就mysql的内连接和外连接的写法进行讨论。测试环境:win10mysql@5.7.26MySQLFront@5.3

为了更好的理解本文的内容,您可以先查看下面这篇文章:

测试标本

首先,介绍一下测试标本。两个表userspostsusers发表posts。共有三个user,用户一发表了两篇post,用户二发表了一篇post,用户三没有发布任何内容。并且被发布的post中,有个神秘人(不能识别的user),发布了一篇文章。

所以,两者的交集是1,2,A独有的是3,B独有的是9。建表语句如下:

DROP TABLE IF EXISTS `posts`;
CREATE TABLE `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` int(11) DEFAULT NULL,
  `title` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;
INSERT INTO `posts` VALUES (1,1,'1-苏南大叔的文章1'),(2,1,'1-苏南大叔的文章2'),(3,2,'2-苏南大哥的文章'),(4,9,'9-神秘人的文章');

DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;
INSERT INTO `users` VALUES (1,'1-苏南大叔'),(2,'2-苏南大哥'),(3,'3-苏南兄弟');

苏南大叔:mysql,如何理解内连接inner join和外连接union语句? - 数据集
mysql,如何理解内连接inner join和外连接union语句?(图4-2)

内连接inner join求交集

这个内连接inner join的效果,也是求交集。所以,这里出现了第三种求交集的方式。

SELECT users.id as uid,users.name,posts.title FROM users
INNER JOIN posts on users.id = posts.user_id
ORDER BY users.id

这个inner join也可以表述为join,效果相同。

SELECT users.id as uid,users.name,posts.title FROM users
JOIN posts on users.id = posts.user_id
ORDER BY users.id

苏南大叔:mysql,如何理解内连接inner join和外连接union语句? - inner-join
mysql,如何理解内连接inner join和外连接union语句?(图4-3)

另外两种求交集的方式:

left join ... where right.key is not null
right join ... where left.key is not null

外连接union求合集

实际上mysql并不支持outer join,但是可以使用union来模拟相同的效果。比如:

select users.id as uid,users.name,posts.title from users left join posts on users.id = posts.user_id
union
select users.id as uid,users.name,posts.title from users right join posts on users.id = posts.user_id

苏南大叔:mysql,如何理解内连接inner join和外连接union语句? - union合集
mysql,如何理解内连接inner join和外连接union语句?(图4-4)

相关文章

总结

本文主要示例了mysql中内连接和外连接的用法,更多mysql相关文章,请查看下面的链接:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   mysql