mysql,如何理解内连接inner join和外连接union语句?
发布于 作者:苏南大叔 来源:程序如此灵动~
首先必须澄清的是:mysql不支持outer join语句,只有inner join语句,并且可以简称为join,这个是本文正确理解的前提。非要说mysql支持outer join的话,请检查你的数据库到底是不是mysql呢?

大家好,这里是苏南大叔的程序如此灵动博客,记录苏南大叔关于代码的所学所想。本文就mysql的内连接和外连接的写法进行讨论。测试环境:win10,mysql@5.7.26,MySQLFront@5.3。
为了更好的理解本文的内容,您可以先查看下面这篇文章:
测试标本
首先,介绍一下测试标本。两个表users、posts,users发表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-苏南兄弟');
内连接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
另外两种求交集的方式:
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中内连接和外连接的用法,更多mysql相关文章,请查看下面的链接: