MySQL复合查询

目录

基本查询回顾

多表查询

自连接

子查询

单行子查询

多行子查询

多列子查询

在from中使用子查询

合并查询


基本查询回顾

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

按部门号升序,按雇员的工资降序

使用年薪进行降序排序,由于奖金COMM有的是NULL所以用ifnull函数是null的就设为0

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

  1. 先查最高工资再查表里符合条件的

  2. 嵌套查询

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

嵌套查找使用聚合统计avg来求平均值

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

可以使用format来保留相应的精度

显示平均工资低于两千的部门号和该部门的平均工资

使用format返回字符串,having后不转换就会2000就会与字符串比较导致出错

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

使用count找该职位的人数

多表查询

实际上数据往往来自多个表,所以需要多表查询

将两个表做组合(本质就是穷举)

如下所示

可以通过where条件限制

显示员工名字、工资、所在部门名称

上面员工名字、工资来自于EMP表,所在部门名称在DEPT表里拿

显示部门号为10的部门名、员工名和工资

显示各个员工的姓名、工资及工资级别

自连接

自连接是在同一张表连接查询

将同一张表做重命名后就可以做笛卡尔积了

显示员工FORD的上级领导的编号和姓名

  1. 先找到FORD的领导编号

  2. 根据领导编号找领导的信息

可以通过子查询来寻找

我们要的条件都和表有关

如果emp1员工的名字为FORD,emp1 员工FORD的领导工号与emp2的工号相同,那一定是emp1与emp2穷举到此员工与其领导在一行,显示emp2的名字与工号即可

子查询

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

单行子查询

返回一行记录的子查询

显示与SMITH同部门的员工

多行子查询

返回多行记录的子查询(返回单列多行数据)

in关键字 判断一个列值是否在集合中

查询和10号部门的工作岗位相同的雇员的名字,岗位,工资,部门号,但是不包含10自己

all关键字:比所有行都要高

显示工资比部门30的所有员工的工资高的员工的姓名、工资和部门号

any关键字:

显示工资比部门30的任意员工的工资高的员工的姓名、工资和部门号(包含自己部门的员工)

多列子查询

多列子查询则是指查询返回多个列数据的子查询语句

查询和SMITH的部门和岗位完全相同的员工,不包括SMITH本人

where (deptno,job)=(select deptno,job from EMP where ename='SMITH')

直接比较多个列,也可以用in ,查出的信息即使是成对的,但可以看为一个整体

在from中使用子查询

子查询语句出现在from子句中,把一个子查询当一个临时表来使用

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

将每个部门的平均工资与部门号查询出来做临时表,与EMP表做笛卡尔积形成一个表

select deptno,avg(sal) from EMP group by deptno;

select * from EMP, (select deptno,avg(sal) myavg from EMP group by deptno) as tmp (必须重命名)

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

把每个部门最高工资找出来做临时表

(select deptno,max(sal) mymax from EMP group by deptno)做临时表

mysql> select ename,sal,t1.deptno,mymax from EMP t1,(select deptno,max(sal) mymax from EMP group by deptno) as t2 where t1.deptno=t2.deptno and t1.sal=t2.mymax;

显示每个部门的信息部门名、编号、地址和人员数量

将每个部门的人数做临时表

( select deptno,count(*) num from EMP group by deptno)

解决多表问题的本质:想办法将多表转化成为单表,所以mysql中所有select问题全部可以转成单表问题

合并查询

可以对多个select的执行结果做合并 union 与 union all

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

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

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

union会去重


这篇就到这里啦(づ ̄3 ̄)づ╭❤~

相关推荐
穿条秋裤到处跑8 小时前
每日一道leetcode(2026.04.29):二维网格图中探测环
算法·leetcode·职场和发展
许彰午13 小时前
我手写了一个 Java 内存数据库(二):B+ 树的插入与分裂
java·开发语言·面试
Morwit15 小时前
QML组件之间的通信方案(暴露子组件)
c++·qt·职场和发展
leoufung16 小时前
LeetCode 76:Minimum Window Substring 题解与滑动窗口思维详解
算法·leetcode·职场和发展
weisian15117 小时前
基础篇--概念原理-2-参数是什么?——从原理到实战,一篇讲透
面试·职场和发展·模型参数·7b和70b·参数=规则,不是原始数据
天真小巫18 小时前
2026.5.2总结
职场和发展
weisian15118 小时前
基础篇--概念原理-1-Token是什么?——从原理到实战,一篇讲透
人工智能·职场和发展·token
AI人工智能+电脑小能手18 小时前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
逻辑驱动的ken21 小时前
Java高频面试考点场景题20
java·开发语言·深度学习·面试·职场和发展
Wect21 小时前
深度剖析浏览器跨域问题
前端·面试·浏览器