MySQL复合查询(查询直接看这里)

回顾基本查询

  • 查询工资高于500或岗位为TOM的雇员,同时还要满足他们的姓名首字母为大写的J
select * from EMP where(sale > 500 or job = 'TOM') and ename like 'J%';
  • 按照部门号升序而雇员的工资降序排序
select * from EMP order by deptno, sal desc;

最后,使用 ORDER BY 子句按照年薪列进行降序排序。DESC 关键字表示降序排序。

  • 显示工资最高的员工的名字和工作岗位
select ename, job from EMP where sal = (select max(sal) from EMP);

这里为啥不能直接在where子句中用max把最大sal筛选出来,而是要再select一次呢?

可以这么理解:where子句期待的返回值是一个布尔值类型,而不是一个数字或者说某一个值。

更标准的解释就是where是对行与行之间进行比较筛选,而max是对整个表的数据进行筛选。

  • 显示工资高于平均工资的员工信息
select ename, sal from EMP where sal>(select avg(sal) from EMP);
  • 显示每个部门的平均工资和最高工资
select deptno, format(avg(sal), 2) , max(sal) from EMP group by deptno;

比如:

在这里插入图片描述

先以deptno列进行分组(group by),这一步指的是将多个部门号一样的合在一起

输出的有:deptno, format(avg(sal), 2) , max(sal)

然后FORMAT(AVG(sal), 2):对平均薪水进行格式化,保留两位小数;然后MAX(sal)找出每个部门的最高薪水。

在这里插入图片描述

  • 显示平均工资低于2000的部门号和它的平均工资
select deptno, avg(sal) as avg_sal from EMP group by deptno having avg_sal<2000;

having相当于二次筛选,将分组好的部门号筛选出薪资小于2000的

  • 使用年薪进行降序排序
select ename, sal*12+ifnull(comm,0) as '年薪' from EMP order by 年薪 desc;

在这个查询中,使用了表达式 sal * 12 + IFNULL(comm, 0) 来计算年薪。sal 代表薪水,comm 代表佣金(如果有)。IFNULL(comm, 0) 函数用于确保佣金字段的值不为空,如果为空,则将其替换为零。

使用 AS ‘年薪’ 语法将计算得到的年薪列重命名为“年薪”。

子查询

有三张表EMP,DEPT,SALGRADE来演示如何进行多表查询

单行子查询

显示和SMITH处于同一部门的员工

select * from EMP where deptno = (select deptno from EMP where ename='smith');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

久菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值