MySQL INNER JOIN定义
MySQL INNER JOIN也叫内连接或等值连接,用于获取两个表中字段匹配关系的记录。
如下图所示:
内连接是一种常见的连接查询,只返回两个表中联结字段相等的行。
MySQL INNER JOIN语法
语法结构,如下所示:
SELECT column_list FROM t1 INNER JOIN t2 ON join_condition1 INNER JOIN t3 ON join_condition2 ... WHERE where_conditions;
ON用于指定内连接的查询条件,与WHERE的不同点在于:
WHERE是限定已全部查询出来的记录,那么在数据量很大的情况下,此操作会浪费很多性能,所以此处推荐使用ON实现内连接的条件匹配。
MySQL INNER JOIN规则
MySQL INNER JOIN的必要条件,主要包含如下4条:
- from后面跟有主表;
- inner join后面跟有与主表联结的表,理论上可以有多个表,但是为了获得更好的性能,应当适当限制加入的表的结构;
- on后边跟有联结条件,建立公共列关系;
- 如果联结具有相同列名的多个表,则必须使用表前缀来区分不同表,以及使用字段别名来区分同名列,避免出现列名混淆。
MySQL INNER JOIN实例
下面我们创建两张用户表,然后取其中的交集。
1.创建用户表1
CREATE TABLE `user1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; INSERT INTO `user` VALUES (1, '张三'); INSERT INTO `user` VALUES (2, '李四'); INSERT INTO `user` VALUES (3, '王二');
2.创建用户表2
CREATE TABLE `user2` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic; INSERT INTO `user2` VALUES (1, '张三'); INSERT INTO `user2` VALUES (2, '李四'); INSERT INTO `user2` VALUES (4, '麻子');
3.inner join 内连接
select a.id,a.name from user1 a inner join user2 b on a.id=b.id;
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》