今天看到的mysql笔试题 exists代替in

最近看到的几个mysql面试题,是关于exist如何代替in

  • 题目如下:
    • 1.员工表employee,有2个字段salary , deptid ,查询所有数据,按照部门号从高到低,工资从低到高顺序输出
    • 2.员工表employee,有2个字段salary , deptid ,查询各个部门中高于所有员工平均工资的人数:查询的结果列为: 部门,人数
    • 3.员工表employee,有2个字段salary , deptid ,查询出最高工资和最低工资的差是多少
    • 4.用exists替换下面的sql中的in
      SELECT * FROM tb1 WHERE u_id IN (SELECT u_id FROM tb2 WHERE name = ‘张三’);

先把需要的表创建好

CREATE TABLE employee(
	salary INT,
	deptid INT
)
-- 随意填点数据
INSERT INTO employee(salary,deptid) VALUES(2500,1),
(3500,2),
(3100,3),
(2800,1),
(4000,3),
(8000,2),
(8000,1),
(8000,3);

创建完表
在这里插入图片描述
然后第一题 : 查询所有数据,按照部门号从高到低,工资从低到高顺序输出

select deptid,salary from employee order by deptid DESC,salary ASC

这个最简单,结果是
第一题结果
第二题 : 查询各个部门中高于所有员工平均工资的人数:查询的结果列为: 部门,人数

-- 分2步
-- 查出所有员工平均工资
SELECT AVG(salary) AS avgsal from employee
-- 按部门查询人数
select e.deptid,COUNT(*) from employee e GROUP BY e.deptid

-- 结合起来
select e.deptid,COUNT(*) from employee e,
(SELECT AVG(salary) AS avgsal from employee) a
WHERE e.salary > a.avgsal
GROUP BY e.deptid

结果是
第二题结果
第三题 : 查询出最高工资和最低工资的差是多少

SELECT MAX(e.salary) - MIN(e.salary) '差值' FROM employee e

结果是
第三题答案
第四题就是关于exists代替in的
SELECT * FROM tb1 WHERE u_id IN (SELECT u_id FROM tb2 WHERE name = ‘张三’);
先把表创建出来

CREATE TABLE tb1(
	u_id INT PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(20)
)
-- 随意添加一些数据
INSERT INTO tb1(u_id,`name`) VALUES(NULL,'aaa'),
(NULL,'bbb'),
(NULL,'ccc'),
(NULL,'张三');

CREATE TABLE tb2(
	u_id INT PRIMARY KEY AUTO_INCREMENT,
	`name` VARCHAR(20)
)
-- 随意添加一些数据
INSERT INTO tb2(u_id,`name`) VALUES(NULL,'ddd'),
(NULL,'张三'),
(NULL,'eee'),
(NULL,'fff');

我的做法是这样

SELECT * FROM tb1 WHERE EXISTS(SELECT u_id FROM tb2 WHERE name = '张三' AND tb1.u_id = tb2.u_id);

因为我是一个新手,如果有什么更好的解题方法,欢迎写在评论里

欢迎关注我的个人博客 https://myblog.52fun.fun

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值