Mysql

关注公众号 jb51net

关闭
首页 > 数据库 > Mysql > mysql复合查询

MySQL的复合查询功能实现

作者: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关键字

2.ALL关键字

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

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复合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文