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

相关推荐
CCPC不拿奖不改名17 小时前
面向对象编程:继承与多态+面试习题
开发语言·数据结构·python·学习·面试·职场和发展
橘颂TA17 小时前
【剑斩OFFER】算法的暴力美学——力扣:1047 题:删除字符串中的所有相邻重复项
c++·算法·leetcode·职场和发展·结构于算法
Dontla17 小时前
Mock Interview模拟面试,20251225,MNC第一面HR面,AI Engineer
职场和发展
IT大白17 小时前
5、Kafka面试相关问题
分布式·面试·kafka
零售ERP菜鸟20 小时前
IT价值证明:从“成本中心”到“增长引擎”的确定性度量
大数据·人工智能·职场和发展·创业创新·学习方法·业界资讯
han_1 天前
从一道前端面试题,谈 JS 对象存储特点和运算符执行顺序
前端·javascript·面试
千金裘换酒1 天前
Leetcode 有效括号 栈
算法·leetcode·职场和发展
蝎子莱莱爱打怪1 天前
我的2025年年终总结
java·后端·面试