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 ̄)づ╭❤~

相关推荐
掘金安东尼1 天前
让 JavaScript 更容易「善后」的新能力
前端·javascript·面试
掘金安东尼1 天前
用 HTMX 为 React Data Grid 加速实时更新
前端·javascript·面试
UrbanJazzerati1 天前
非常友好的Vue 3 生命周期详解
前端·面试
想用offer打牌1 天前
高并发下如何保证接口的幂等性
后端·面试·状态机
牛奶2 天前
Vue 基础理论 & API 使用
前端·vue.js·面试
牛奶2 天前
Vue 底层原理 & 新特性
前端·vue.js·面试
NAGNIP2 天前
一文搞懂深度学习中的通用逼近定理!
人工智能·算法·面试
青青家的小灰灰2 天前
深入理解事件循环:异步编程的基石
前端·javascript·面试
程序员清风2 天前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试
UrbanJazzerati2 天前
Vue3 父子组件通信完全指南
前端·面试