MySQL INNER JOIN详解(内连接语法及实例)

MySQL INNER JOIN详解(内连接语法及实例)-mikechen

MySQL INNER JOIN定义

MySQL INNER JOIN也叫内连接或等值连接,用于获取两个表中字段匹配关系的记录。

如下图所示:

MySQL INNER JOIN详解(内连接语法及实例)-mikechen

内连接是一种常见的连接查询,只返回两个表中联结字段相等的行。

 

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条:

  1. from后面跟有主表;
  2. inner join后面跟有与主表联结的表,理论上可以有多个表,但是为了获得更好的性能,应当适当限制加入的表的结构;
  3. on后边跟有联结条件,建立公共列关系;
  4. 如果联结具有相同列名的多个表,则必须使用表前缀来区分不同表,以及使用字段别名来区分同名列,避免出现列名混淆。

 

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年+大厂架构经验,BAT资深面试官,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

👇阅读更多mikechen架构文章👇

阿里架构 |双11秒杀 |分布式架构 |负载均衡 |单点登录 |微服务 |云原生 |高并发 |架构师

以上

关注作者「mikechen」公众号,获取更多技术干货!

后台回复架构,即可获取《阿里架构师进阶专题全部合集》,后台回复面试即可获取《史上最全阿里Java面试题总结

评论交流
    说说你的看法