先把需要的表创建好
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