Mysql深入了解联表查询的特点

 更新时间:2022年07月27日 10:53:29   作者:·~简单就好  
这篇文章主要给大家介绍了关于MySQL联表查询的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

前言

为了减少对数据库的查询次数,例如在互不关联的表中为了减轻系统的压力,我们可以通过union all关键词将多个表查到的数据做一个联查处理

(便于统计分析时使用到不同的数据而只用一次请求)

举例:通过一条sql语句一次查询查询学生表中的性别为男的学生总数和教师表中的教师性别为男的教师总数

数据库表准备:

1、student表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student`  (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `birth` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `sex` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('01', '赵雷', '1990-01-01', '男');
INSERT INTO `student` VALUES ('02', '钱电', '1990-12-21', '男');
INSERT INTO `student` VALUES ('03', '孙风', '1990-05-20', '男');
INSERT INTO `student` VALUES ('04', '李云', '1990-08-06', '男');
INSERT INTO `student` VALUES ('05', '周梅', '1991-12-01', '女');
INSERT INTO `student` VALUES ('06', '吴兰', '1992-03-01', '女');
INSERT INTO `student` VALUES ('07', '郑竹', '1989-07-01', '女');
INSERT INTO `student` VALUES ('08', '王菊', '1990-01-20', '女');
SET FOREIGN_KEY_CHECKS = 1;

2、teacher表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for teacher
-- ----------------------------
DROP TABLE IF EXISTS `teacher`;
CREATE TABLE `teacher`  (
  `id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
  `name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '',
  `sex` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of teacher
-- ----------------------------
INSERT INTO `teacher` VALUES ('01', '张三', '男');
INSERT INTO `teacher` VALUES ('02', '李四', '女');
INSERT INTO `teacher` VALUES ('03', '王五', '男');
SET FOREIGN_KEY_CHECKS = 1;

一、传统方法(查询性能不佳)

对所查询的数据封装成一个表,在分别对表的数据查询展示出来。

这种方法比较简单但是会对数据库的查询次数大大提高

SELECT
	t1.学生男生总数,
	t2.男教师总数 
FROM
	( SELECT count( id ) AS 学生男生总数 FROM student WHERE student.sex = '男' ) t1,
	( SELECT count( id ) AS 男教师总数 FROM teacher WHERE teacher.sex = '男' ) t2

二、使用union all将多个表联合成一个表查询

	select t.*  from
	( SELECT count(id) as a,0 as b FROM student WHERE student.sex = '男'
			union all
	SELECT 0 as a,count(id) as b FROM teacher WHERE teacher.sex = '男' ) t

1、此时a代表学生性别为男生的总人数,b代表教师性别为男的总人数

2、此时我们只需对a和b分别求和,就能够查询出男学生和男教师的总人数

	select sum(t.a) as 学生男生总数,sum(t.b) as 男教师总数 from
	( SELECT count(id) as a,0 as b FROM student WHERE student.sex = '男'
			union all
	SELECT 0 as a,count(id) as b FROM teacher WHERE teacher.sex = '男' ) t

三、总结

当我们使用union all多表联合时,这样对于互不关联的数据我们也能够一次就只能查询多条我们需要的数据,减少了请求次数一次查询次数,而且对数据库的性能大大提升!

到此这篇关于Mysql深入了解联表查询的特点的文章就介绍到这了,更多相关Mysql联表查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 8.0.28 winx64.zip安装配置方法图文教程

    mysql 8.0.28 winx64.zip安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.28 winx64.zip安装配置方法图文教程,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • 浅谈MySQL为什么会选错索引

    浅谈MySQL为什么会选错索引

    本文主要介绍了浅谈MySQL为什么会选错索引,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • win10下mysql 8.0.11 压缩版安装教程

    win10下mysql 8.0.11 压缩版安装教程

    这篇文章主要为大家详细介绍了win10下mysql 8.0.11 压缩版安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解

    mysql 5.7.21 解压版通过历史data目录恢复数据的教程图解

    本文通过图文并茂的形式给大家介绍了mysql 5.7.21 解压版,通过历史data目录恢复数据的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • SQL字符串以及数字常用操作汇总

    SQL字符串以及数字常用操作汇总

    本篇文章是对SQL字符串以及数字的常用操作进行了详细的总结与分析,需要的朋友参考下
    2013-06-06
  • MySQL Workbench工具导出导入数据库方式

    MySQL Workbench工具导出导入数据库方式

    这篇文章主要介绍了MySQL Workbench工具导出导入数据库方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Mysql之索引的数据结构详解

    Mysql之索引的数据结构详解

    索引是存储引擎用于快速找到数据记录的一种数据结构,类似于教科书的目录部分,在MySQL中,索引可以加速数据查找,减少磁盘I/O的次数,提高查询速率,但是,创建和维护索引需要耗费时间,并且索引需要占磁盘空间,在InnoDB中,索引的实现基于B+树结构
    2024-12-12
  • Mysql binlog日志文件过大的解决

    Mysql binlog日志文件过大的解决

    本文主要介绍了Mysql binlog日志文件过大的解决,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • CentOS系统下如何设置mysql每天自动备份

    CentOS系统下如何设置mysql每天自动备份

    备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程。本文将详细介绍在CentOS系统下如何设置mysql每天自动备份,有需要的朋友们下面来一起看看吧。
    2016-10-10
  • MySQL高效分页解决方案集分享

    MySQL高效分页解决方案集分享

    这篇文章介绍了MySQL高效分页解决方案集,有需要的朋友可以参考一下
    2013-11-11

最新评论