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

相关推荐
HY小宝F8 小时前
职场沟通的深层智慧:从对抗到协作的自我修炼
职场和发展
愚者游世8 小时前
Delegating Constructor(委托构造函数)各版本异同
开发语言·c++·程序人生·面试·改行学it
AI职业加油站9 小时前
职业提升之路:我的大数据分析师学习与备考分享
大数据·人工智能·经验分享·学习·职场和发展·数据分析
信码由缰10 小时前
Spring Boot 面试问题
spring boot·后端·面试
草履虫建模17 小时前
力扣算法 1768. 交替合并字符串
java·开发语言·算法·leetcode·职场和发展·idea·基础
马猴烧酒.1 天前
【面试八股|Java集合】Java集合常考面试题详解
java·开发语言·python·面试·八股
学历真的很重要1 天前
【系统架构师】第二章 操作系统知识 - 第二部分:进程管理(详解版)
学习·职场和发展·系统架构·系统架构师
闻哥1 天前
从测试坏味道到优雅实践:打造高质量单元测试
java·面试·单元测试·log4j·springboot
VT.馒头1 天前
【力扣】2722. 根据 ID 合并两个数组
javascript·算法·leetcode·职场和发展·typescript
执着2591 天前
力扣hot100 - 108、将有序数组转换为二叉搜索树
算法·leetcode·职场和发展