当前位置: 首页 > news >正文

navicat多表语句练习

已知2张基本表:部门表:dept (部门号,部门名称);员工表 emp(员工号,员工姓名,年龄,入职时间,收入,部门号)
CREATE table dept(dept1 VARCHAR(6),dept_name VARCHAR(20)) default charset=utf8;
INSERT into dept VALUES ('101','财务');
INSERT into dept VALUES ('102','销售');
INSERT into dept VALUES ('103','IT技术');
INSERT into dept VALUES ('104','行政');
CREATE table emp (sid VARCHAR(6),name VARCHAR(20),age TINYINT(2),woektime_start VARCHAR(10),incoming SMALLINT(10),dept2 VARCHAR(6))default charset=utf8;

insert into emp VALUES ('1789','张三',35,'1980/1/1',4000,'101');
insert into emp VALUES ('1674','李四',32,'1983/4/1',3500,'101');
insert into emp VALUES ('1776','王五',24,'1990/7/1',2000,'101');
insert into emp VALUES ('1568','赵六',57,'1970/10/11',7500,'102');
insert into emp VALUES ('1564','荣七',64,'1963/10/11',8500,'102');
insert into emp VALUES ('1879','牛八',55,'1971/10/20',7300,'103');
insert into emp VALUES ('1880','老九',55,'1971/10/20',7500,'105');
insert into emp VALUES ('1900','老十',64,'1990/8/1',2000,'106');

drop table dept ;
drop table emp ;
select * from dept;
select * from emp ;

1.列出每个部门的平均收入及部门名称;
select dept_name ,AVG(incoming) FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2 GROUP BY dept_name;

2.财务部门的收入总和;
SELECT SUM(incoming) from dept right JOIN emp on dept.dept1=emp.dept2
Where dept_name=”财务”;

3.It技术部入职员工的员工号
SELECT sid from dept INNER JOIN emp on dept.dept1=emp.dept2 WHERE dept_name="IT技术";

4.财务部门收入超过2000元的员工姓名
emp incoming>2000
dept 财务
select NAME FROM dept INNER JOIN emp on dept.dept1=emp.dept2 WHERE dept_name="财务" and emp.incoming>2000;
5.找出销售部收入最低的员工的入职时间;
emp
dept
max
SELECT woektime_start FROM dept INNER JOIN emp on dept.dept1=emp.dept2 WHERE dept_name="销售" ORDER BY emp.incoming asc limit 1;

SELECT woektime_start FROM (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) a
WHERE incoming=(SELECT MIN(b.incoming)
from (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) b
WHERE dept_name ="销售") and a.dept_name ="销售"

6.找出年龄小于平均工资的员工的姓名,ID和部门名称 ;

SELECT sid,name,dept_name FROM dept INNER JOIN emp on dept.dept1=emp.dept2 where age<(SELECT avg(incoming) FROM emp);

7.列出每个部门收入总和高于9000的部门名称
select dept_name FROM dept INNER JOIN emp on dept.dept1=emp.dept2GROUP BY dept_name HAVING sum(incoming)>9000 ;

Select s.dept_name from (select dept_name,sum(incoming) from dept join emp on dept.dept1=emp.dept2 GROUP BY dept_name having sum(incoming)>9000)s

8.查出财务部门工资少于3800元的员工姓名
财务 dept
incoming emp
name
<
select name from dept join emp on dept.dept1=emp.dept2 where dept_name="财务" and incoming<3800;
9.求财务部门最低工资的员工姓名;
min
dept dept_name
emp incoming min
SELECT name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2 WHERE dept_name="财务" ORDER BY incoming asc LIMIT 1;

SELECT * FROM (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) a
WHERE incoming=(SELECT MIN(b.incoming) from (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) b WHERE dept_name ="财务") and a.dept_name ="财务"

10.找出销售部门中年纪最大的员工的姓名
1.SELECT name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2 WHERE dept_name="销售" ORDER BY age desc LIMIT 1;
2.SELECT Name FROM (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) a
WHERE age=(SELECT Max(b.age)
from (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) b
WHERE dept_name ="销售") and a.dept_name ="销售"

3.select name from dept join emp on dept.dept1=emp.dept2 where dept_name="销售" and age=(select max(age) from dept join emp on dept.dept1=emp.dept2 where dept_name="销售");

4.select name from dept left join emp on dept.dept1=emp.dept2
where(age,dept_name)IN
(select max(age),dept_name from dept left join emp on dept.dept1=emp.dept2 WHERE dept_name="销售");

11.求收入最低的员工姓名及所属部门名称:
SELECT name,dept_name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2
WHERE incoming=(select min(incoming) from dept LEFT JOIN emp ON dept.dept1=emp.dept2
);
12.求李四的收入及部门名称
SELECT incoming,dept_name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2
WHERE name="李四";

13.求员工收入小于4000元的员工部门编号及其部门名称
SELECT dept2,dept_name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2
WHERE incoming<4000;

14.列出每个部门中收入最高的员工姓名,部门名称,收入,并按照收入降序;
SELECT NAME,incoming,dept_name FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
GROUP BY incoming desc ;

Select name,dept_name ,incoming from dept left join emp on dept.dept1=emp.dept2 where(incoming,dept_name)IN
(select max(incoming),dept_name from dept left join emp on dept.dept1=emp.dept2 group by dept_name) ORDER BY incoming desc ;
表子查询
15.求出财务部门收益最高的俩位员工的姓名,工号,收益
SELECT NAME,incoming,sid FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
where dept_name="财务" ORDER BY incoming desc LIMIT2;

16.查询财务部低于平均收入的员工号与员工姓名:
SELECT sid,name FROM dept INNER JOIN emp on dept.dept1=emp.dept2 where dept_name="财务"
and incoming<(SELECT avg(incoming) FROM emp);

17.列出部门员工数大于1个的部门名称;
SELECT dept_name FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
GROUP BY dept_name HAVING count(*)>1;

18.列出部门员工收入不超过7500,且大于3000的员工年纪及部门编号;
SELECT age,dept2 FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
WHERE incoming BETWEEN 3000 and 7500;

SELECT age,dept2 FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
WHERE incoming > 3000 and incoming <=7500;

19.求入职于20世纪70年代的员工所属部门名称;
SELECT dept_name FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
WHERE woektime_start BETWEEN 1970 and 1980;

20.查找张三所在的部门名称;
SELECT dept_name FROM dept INNER JOIN emp on dept.dept1=emp.dept2 where name="张三";

21.列出每一个部门中年纪最大的员工姓名,部门名称;
SELECT name,dept_name FROM dept INNER JOIN emp on dept.dept1=emp.dept2
where age=(SELECT max(age) FROM emp);

SELECT name,dept_name FROM dept left join emp on dept.dept1=emp.dept2 where (age ,dept_name)in
(select max(age),dept_name from dept left join emp on dept.dept1=emp.dept2 GROUP BY dept_name);
22.列出每一个部门的员工总收入及部门名称;
SELECT dept_name,SUM(incoming) FROM dept INNER JOIN emp on dept.dept1=emp.dept2 GROUP BY dept_name ;

23.列出部门员工收入大于7000的员工号,部门名称;
SELECT sid,dept_name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2
WHERE incoming>7000;

24.找出哪个部门还没有员工入职;
SELECT dept_name FROM dept LEFT JOIN emp ON dept.dept1=emp.dept2
WHERE woektime_start is NULL;

25.先按部门号大小排序,再依据入职时间由早到晚排序员工信息表 ;
select * from emp ORDER BY dept2 desc,woektime_start asc;

26.求出财务部门工资最高员工的姓名和员工号
1.SELECT NAME,sid FROM dept RIGHT JOIN emp ON dept.dept1=emp.dept2
where dept_name="财务" ORDER BY incoming desc LIMIT 1;

2.SELECT Name,sid FROM (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) a
WHERE incoming=(SELECT Max(b.incoming)
from (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) b
WHERE dept_name ="财务") and a.dept_name ="财务"

3.select name.,sid from dept join emp on dept.dept1=emp.dept2 where dept_name="财务" and incoming=(select max(incoming) from dept join emp on dept.dept1=emp.dept2 where dept_name="财务");

4.select name,sid from dept left join emp on dept.dept1=emp.dept2
where(incoming,dept_name)IN
(select max(incoming),dept_name from dept left join emp on dept.dept1=emp.dept2 WHERE dept_name="财务");

5.select c.name,sid from (SELECT * FROM dept a INNER JOIN emp b on a.dept1=b.dept2)c where c.dept_name="财务"and incoming=(SELECT max(incoming) FROM dept a INNER JOIN emp b on a.dept1=b.dept2 where dept_name="财务");

27.求出工资在7500到8500之间,年龄最大的员工的姓名和部门名称。
1.SELECT name,dept_name FROM dept INNER JOIN emp on dept.dept1=emp.dept2
WHERE incoming BETWEEN 7500 and 8500 ORDER BY age desc LIMIT 1;

2.select name,dept_name from dept join emp on dept.dept1=emp.dept2
where incoming>=7500 and incoming <=8500 and age in
(select max(age) from dept join emp on dept.dept1=emp.dept2 where incoming>=7500 and incoming <=8500);

3.SELECT Name,dept_name FROM (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) a
WHERE incoming between 7500 and 8500 and age=(SELECT Max(b.age)
from (SELECT * FROM dept INNER JOIN emp on dept.dept1=emp.dept2) b where incoming between 7500 and 8500);

http://www.jsqmd.com/news/687642/

相关文章:

  • Windows 10 中切换全角/半角
  • 2026年5月 遭遇刑事指控别乱选,西安靠谱刑事律师怎么挑 - 资讯焦点
  • 从VB6的MSFlexGrid到.NET的DataGridView:一个老鸟的控件迁移心路与实战
  • 保姆级教程:用Kalibr搞定Realsense D435i三目相机联合标定(附完整配置与避坑记录)
  • 游戏开发维护错误修复与内容更新
  • 5分钟搞定!Zotero AI插件让你的文献管理效率飙升300%
  • 瑞祥商联卡快速回收攻略:一分钟了解如何高效变现 - 团团收购物卡回收
  • 从FCN到UNet:手把手拆解那个‘U’型结构,为什么拼接(Skip Connection)比相加更有效?
  • AI嵌入式K210项目(20)- 从零上手CanMV IDE:环境搭建与首个AI程序调试
  • ALLWEONE本地模型配置指南:Ollama与LM Studio实战
  • 分析上海靠谱外语培训的价格,诚信的外语培训报名方式是啥? - myqiye
  • 告别‘嗡嗡’声:用DPCRN模型(仅0.8M参数)实战单通道语音降噪,附Python代码
  • 职场精英疲惫救星!2026十大抗衰老药推荐,NMN效果好的品牌为高压精英群体保养秘籍 - 资讯焦点
  • linux 各个文件夹作用
  • 2026年上海热门语言培训机构排名,虹口上外校区实践小语种培训靠谱吗 - 工业品牌热点
  • 别再只盯着参数量了!用torchinfo和thop工具包,5分钟搞定PyTorch模型FLOPs与Params的完整计算流程
  • 维护2000条UI自动化用例的她,问了一个问题,让我看到了APP测试的天花板
  • 职场女性抗衰老必入:NMN排名哪款口碑好,吉瑞维全网热推 - 资讯焦点
  • OBD协议考古:为什么福特用双线(PWM),而通用用单线(VPW)?聊聊J1850背后的汽车电子设计哲学
  • ESP32联网获取天气信息,除了心知天气,这3个免费API接口也值得一试
  • 中年男逆龄不是梦!NMN哪个牌子好?2026口服NMN抗衰老产品推荐解析 - 资讯焦点
  • 2026年重庆CCC围挡价格大比拼,排名靠前的厂家怎么收费 - 工业推荐榜
  • 2026年陕西应急管理无人机口碑厂商一览 聚焦智能应急与实战落地 - 深度智识库
  • 如何用OpenRGB统一管理电脑RGB灯光:告别混乱的终极解决方案
  • DiffusionDet高级配置详解:从ResNet到Swin-Transformer的全面对比
  • 告别U-Boot?在SA8155平台上用QNX原生IPL替换第三方引导程序的完整指南
  • 昆山天硕广告传媒:昆山企业文化墙设计公司 - LYL仔仔
  • Instagram数据抓取怎么选
  • GetQzonehistory:三步找回你遗失的QQ空间青春记忆
  • Pandas数据清洗完整指南:8大核心技巧详解(2026实战版)