MySQL的复合查询功能实现

 更新时间:2026年05月04日 09:19:20   作者:Halvmån  
orners查询AssistantAssistant*从真实的工程项目中,我们经常需要使用多表进行查询,单表查询实际上是开发中,数据来自多张表,因此需要进行多表查询,本文通过实例代码介绍MySQL的复合查询功能实现,感兴趣的朋友一起看看吧

到这里,我们已经学会了如何在一张表中进行各种查询。但请大家思考一个问题:真实的工程项目中,我们面对的真的只是单张孤立的数据表吗?显然不是。订单信息可能关联用户表,成绩查询需要联立课程表……单表查询固然基础,却难以应对这些现实场景。因此,为了让查询真正“活”起来,我们将进入下一个核心篇章 —— MySQL 复合查询

1.基本查询回顾

1.查询工资高于2000或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J

2.按照部门号升序而雇员的工资降序排

3.使用年薪进行降序排序

4.显示工资最高的员工的名字和工作岗位

5.显示工资高于平均工资的员工信息

6.显示每个部门的平均工资和最高工资

7.显示平均工资低于2000的部门号和它的平均工资

在 SQL 中看到的 HAVING 平均工资 <= 2000 其实是一种 MySQL 对标准 SQL 的扩展,它允许在 HAVING 子句中直接使用 SELECT 中定义的列别名(比如这里的 平均工资)。
不过,从 SQL 的逻辑执行顺序来看,这并不符合标准的运算顺序,所以容易让人困惑,所以最好不要这么写,直接写avg(sal)更好

8.显示每种岗位的雇员总数,平均工资

2.多表查询

实际开发中往往数据来自不同的表,所以需要多表查询。本节我们用一个简单的公司管理系统,有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询。
案例:
显示雇员名、雇员工资以及所在部门的名字因为上面的数据来自EMP和DEPT表,因此要联合查询

1.显示部门号为10的部门名,员工名和工资

2.显示各个员工的姓名,工资,及工资级别

3.自连接

自连接是指在同一张表连接查询
案例:
显示员工FORD的上级领导的编号和姓名(mgr是员工领导的编号--empno)

1.使用的子查询

2.使用多表查询(自查询)

-- 使用到表的别名
--from emp leader, emp worker,给自己的表起别名,因为要先做笛卡尔积,所以别名可以先识别

4.子查询

子查询是指嵌入在其他sql语句中的select语句,也叫嵌套查询

1.单行子查询

显示SMITH同一部门的员工

2.多行子查询

1.IN关键字

  • 作用:判断某个值是否在子查询返回的多行结果列表
  • 典型场景:查找与指定集合匹配的记录
  • 示例:查询和 10 号部门工作岗位相同的雇员,但排除 10 号部门自己

2.ALL关键字

  • 作用:与比较运算符(><= 等)配合,表示比子查询返回的所有值大/小/相等**
  • 典型场景:查找超过某一组中所有记录某个字段的值(例如比某部门所有人都高)
  • 示例:显示工资比 部门 30 的所有员工 的工资都高的员工(即工资大于部门 30 的最高工资)

3.ANY关键字(有些数据库也支持SOME)

  • 作用:与比较运算符配合,表示比子查询返回的任意一个值大/小/相等(即至少满足一个)
  • 典型场景:查找超过某一组中至少一个人的某个字段(例如比部门 30 中工资最低的人高)
  • 你的示例:显示工资比部门 30 的任意一个员工的工资高的员工(即大于部门 30 的最低工资即可,包括自己部门的员工)

3.多列子查询

单行子查询是指子查询只返回单列,单行数据;多行子查询是指返回单列多行数据,都是针对单列而言的,而多列子查询则是指查询返回多个列数据的子查询语句

案例:查询和SMITH的部门和岗位完全相同的所有雇员,不含SMITH本人

4.在from子句中使用子查询

子查询语句出现在from子句中。这里要用到数据查询的技巧,把一个子查询当做一个临时表使用

1.显示每个高于自己部门平均工资的员工的姓名、部门、工资、平均工资

2.查找每个部门工资最高的人的姓名、工资、部门、最高工资

3.显示每个部门的信息(部门名,编号,地址)和人员数量

5.合并查询

在实际应用中,为了合并多个select的执行结果,可以使用集合操作符 union,union all

1.union

该操作符用于取得两个结果集的并集。当使用该操作符时,会自动去掉结果集中的重复行

案例:将工资大于2500或职位是MANAGER的人找出来

2.union all

该操作符用于取得两个结果集的并集。当使用该操作符时,不会去掉结果集中的重复行

案例:将工资大于25000或职位是MANAGER的人找出来

好啦,这就是有关MySQL的复合查询的内容啦,我们下篇博客不见不散啦(五一快乐>W<)

到此这篇关于MySQL的复合查询的文章就介绍到这了,更多相关mysql复合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL通过触发器解决数据库中表的行数限制详解及实例

    MySQL通过触发器解决数据库中表的行数限制详解及实例

    这篇文章主要介绍了MySQL通过触发器解决数据库中表的行数限制详解及实例的相关资料,需要的朋友可以参考下
    2017-04-04
  • MySQL中int (10) 和 int (11) 的区别

    MySQL中int (10) 和 int (11) 的区别

    这篇文章主要介绍了MySQL中int (10) 和 int (11) 的区别,根据mysql 中整数数据类型、不同类型的取值范围、不同数据类型的默认显示宽度展开对int的介绍,需要的朋友可以参考一下
    2022-01-01
  • mysql-canal-rabbitmq 安装部署超详细教程

    mysql-canal-rabbitmq 安装部署超详细教程

    这篇文章主要介绍了mysql-canal-rabbitmq 安装部署超详细教程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 如何解决mysql表输入中文出现问号的问题

    如何解决mysql表输入中文出现问号的问题

    这篇文章主要介绍了如何解决mysql表输入中文出现问号的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • SQL索引失效的11种情况详析

    SQL索引失效的11种情况详析

    索引并不是时时都会生效的,遇到一些情况将导致索引失效,下面这篇文章主要给大家介绍了关于SQL索引失效的11种情况,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2023-03-03
  • MySQL备份神器mydumper的原理、实操与恢复完全指南

    MySQL备份神器mydumper的原理、实操与恢复完全指南

    数据库备份是将数据库中的数据和结构复制到另一个位置,以便在需要时可以恢复数据,MySQL自带了备份工具mysqldump,可以备份整个数据库或特定的表,这篇文章主要介绍了MySQL备份神器mydumper的原理、实操与恢复的相关资料,需要的朋友可以参考下
    2026-04-04
  • MySQL中DATE_FORMAT时间函数的使用小结

    MySQL中DATE_FORMAT时间函数的使用小结

    本文主要介绍了MySQL中DATE_FORMAT时间函数的使用小结,用于格式化日期/时间字段,可提取年月、统计月份数据、精确到天,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • mysql 5.7.23 安装配置方法图文教程

    mysql 5.7.23 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.23安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Mysql使用索引实现查询优化

    Mysql使用索引实现查询优化

    索引的目的在于提高查询效率,本文给大家介绍Mysql使用索引实现查询优化技巧,涉及到索引的优点等方面的知识点,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下吧
    2016-07-07
  • mysql配置SSL证书登录的实现

    mysql配置SSL证书登录的实现

    应国家等级保护三级安全要求,mysql 的 ssl 需要安全证书加密,本文主要介绍了mysql配置SSL证书登录,感兴趣的可以了解一下
    2021-09-09

最新评论