目录

mysql多表查询基础实例

# 前言

mysql作为常用的关系型数据库,多表查询是工作当中是常见的场景

以下例子均基于以下两张表进行处理

/*
 Date: 16/08/2022 16:06:05
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for class
-- ----------------------------
DROP TABLE IF EXISTS `class`;
CREATE TABLE `class`  (
  `class` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `id` int NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of class
-- ----------------------------
INSERT INTO `class` VALUES ('1班', 1);
INSERT INTO `class` VALUES ('1班', 2);

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `class_id` int NOT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'lisi', 1);
INSERT INTO `user` VALUES (2, '小王', 2);
INSERT INTO `user` VALUES (3, '张三', 1);
INSERT INTO `user` VALUES (6, '张三', 2);
INSERT INTO `user` VALUES (8, '张三', 1);

SET FOREIGN_KEY_CHECKS = 1;



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47

# 笛卡尔查询

笛卡尔查询会将两张表的乘积进行处理返回,因此数据总数是两张表的乘积

查询语句


SELECT * FROM user, class;


1
2
3
4

查询结果如下

id	name	class_id	class	id(1)
1	lisi	1	        1班	    2
1	lisi	1	        1班	    1
2	小王	2	        1班	    2
2	小王	2	        1班	    1
3	张三	1	        1班	    2
3	张三	1	        1班	    1
6	张三	2	        1班	    2
6	张三	2	        1班	    1
8	张三	1	        1班	    2
8	张三	1	        1班	    1

1
2
3
4
5
6
7
8
9
10
11
12

# 设置别名查询

这里我们将user表别名为t_user,同时将user表的id字段设置别名为u_id,name别名为u_name

查询语句


SELECT
    t_user.id u_id,
    t_user.name u_name,
    class.id,
    class.class
FROM user t_user, class;


1
2
3
4
5
6
7
8
9

查询结果

u_id	u_name	id	class
1	    lisi	2	1班
1	    lisi	1	1班
2	    小王	2	1班
2	    小王	1	1班
3	    张三	2	1班
3	    张三	1	1班
6	    张三	2	1班
6	    张三	1	1班
8	    张三	2	1班
8	    张三	1	1班

1
2
3
4
5
6
7
8
9
10
11
12

# 多表查询使用where语句

场景:查询user表当中,班级是1的班级,并且查询相关的班级名称class

查询语句

SELECT
    t_user.id u_id,
    t_user.name u_name,
    class.id,
		class.class class_name
FROM user t_user, class
WHERE class.id = 1 AND t_user.class_id = 1;


1
2
3
4
5
6
7
8
9
u_id	u_name	id	class_name
1	    lisi	1	1班
3	    张三	1	1班
8	    张三	1	1班

1
2
3
4
5

通过where语句,我们可以精确的查找到班级id为1的数据,并且也查询出了班级名称

# 总结

以上就是多表查询的基础实例

  • 在我们常见的业务场景当中,笛卡尔查询会查询出大量的数据,因此使用的时候需要进行考量
  • 使用where结合多表查询,可以精确查找到相关数据
  • 使用别名查询,使得查询出来的数据更为清晰,避免了在处理数据的时候混淆造成干扰

欢迎关注公众号:程序员布欧,不定期更新技术入门文章

创作不易,转载请注明出处和作者。

最近更新
01
spring boot集成redis基础入门
10-07
02
spring boot使用swagger生成api接口文档
10-07
03
spring boot项目使用mybatisplus代码生成实例
08-18
更多文章>