第八周课后作业 数据库查询练习

简介: 第八周课后作业 数据库查询练习
一、数据库(employee)中有数据表
部门表(dept)
字段名  字段类型   宽度  说明    备注
deptno  char        10  主键     部门编号
dname   varchar     10  非NULL  部门名称
loc     varchar     20  非NULL  所在城市
雇员表(emp)
字段名  字段类型   宽度   说明         备注
empno    char      10     主键          员工编号
ename    varchar   20     非NULL    员工姓名
job      varchar   10                          工作
mrg      char      10                           直属领导
hiredate date                                    雇佣日期
sal     decimal(7,2)           非NULL      工资
comm    decimal(7,2)                         奖金
deptno  char      10                           所属部门
工资等级表(grade)
字段名  字段类型  宽度  说明      备注
grade    char        10    主键     工资等级
losal      float               非NULL   最低工资
hisal      float               非NULL   最高工资


首先对应创建表:


create database employee;
use employee;
(部门表)
create table dept(
deptno char(10) primary key comment "部门编号",
dname varchar(10) not null comment "部门名称",
loc varchar(20) not null comment "所在城市");
(雇员表)
create table emp(
empno char(10) primary key comment "员工编号",
ename varchar(20) not null comment "员工姓名",
job varchar(10) comment "工作",
mrg char(10) comment "直属领导",
hiredate date comment "雇佣日期",
sal decimal(7,2) not null comment "工资",
comm decimal(7,2) comment "奖金",
deptno char(10) comment "所属部门");
(工资等级表)
create table grade(
grade char(10) primary key comment "工资等级",
losal float not null comment "最低工资",
hisal float not null comment "最高工资");



1. 列出所有员工的姓名及其直接上级的姓名。


select ename,(select ename from emp where e.mrg=e.empno) from emp e;


解析:

列:是员工姓名以及上级姓名

表格:emp

条件:员工的直属领导编号=员工编号

因为是所有员工以及上级姓名,所以外部并没有其他条件仅仅就这一张表

所以在选择属性中间进行查找对应表中员工的直属领导姓名


2. 查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。


select d.,z.cnt
from dept d,( select deptno,count() as cnt from emp group by deptno) z
where d.deptno=z.deptno and z.cnt>=1;


列:部门编号、部门名称、部门位置、部门人数

表:dept,emp

条件:z.cnt>=1


思路:

因为列中的前三个属性在第一张表中,部门人数需要从第二张表emp中统计出来,所以需要两张表。

第一张表需要需要所有属性,另一张表需要部门编号以及人数我们进行生成出来,再整体进行条件筛选。



这是from后面的两张表,再进行筛选count>=1 以及部门编号相同的即可


3. 列出所有文员的姓名及其部门名称,部门的人数。


select e.ename,d.name,e.cnt
from dept d,(select ename,deptno,count(*)as cnt from emp) e
where e.ename = “文员” and e.deptno=d.deptno


列:文员的姓名及其部门名称,部门的人数

表:dept,emp

条件:emp.ename = “文员”


4. 列出薪金比laoZhang高的所有员工


select ename from emp where sal>(select sal from emp where ename like “laoZhang”);


5. 列出受雇日期早于直接上级的所有员工的编号、姓名、部门名称。


select e.empno,e.ename,d.dname
from emp e,dept d
where hiredate<(select hiredate from emp where empno in (e.mrg))
and e.deptno=d.deptno;


列:员工的编号、姓名、部门名称

表:emp,dept

条件:受雇日期早于直接上级(这里可以直接用日期比较)


思路:

首先进行比对emp中日期前后,在进行对应员工所属部门与dept中的筛选


6. 列出部门名称和这些部门的员工信息,同时列出那些没有员工的部门。


select dname,emp.*
from dept left join emp
on dept.deptno=emp.deptno;


列:部门名称,员工信息

表:emp,dept 进行左外连接

条件:列出没有员工与有员工的


7. 列出最低薪金大于15000的各种工作及从事此工作的员工人数。


select job,count(*)
from emp e
group by job
having min(sal)>15000;


进行分组,然后设置最低薪金大于15000


8. 列出在销售部工作的员工的姓名,假定不知道销售部的部门编号。


select ename
from emp;
where deptno=(select deptno from dept where dname=“销售部”);


思路:

不知道销售部的部门编号,那么从部门名称中寻找部门编号,然后进行比对查找


9. 列出薪金高于公司平均薪金的所有员工信息,所在部门名称,上级领导,工资等级。


select e.*,d.dname,m.ename,g.grade
from emp e,from emp m,dept d,grade g
where e.sal>(select avg(sal) from emp) and e.mrg=m.empno and e.deptno=d.deptno and e.sal between g.losal and g.hisal;


列:员工所有信息,所在部门名称,上级领导姓名,工资等级

表:emp,dept,grade

条件:薪水高于公司平均 雇员表与部门表有相同编号 找到对应的上级名称 最后根据对应工资找到对应的等级(4个)


10.列出与xiaoLiu从事相同工作的所有员工及部门名称。


select e.*,d.dname
from emp e,dept d
where e.job=(select job from emp where ename=“xiaoLiu”) and e.deptno=d.deptno;


列:所有员工,部门名称

表:emp,dept

条件:找到与xiaoliu相同工作的员工 对应员工表中部门编号找到部门表中的部门名称(2)


11.列出薪金高于在部门30工作的所有员工的薪金的员工姓名和薪金、部门名称。


select e.ename,e.sal,d.dname
from emp e,dept d
where e.deptno=d.deptno and e.sal>all(select sal from emp where deptno=30);


列:员工姓名和薪金、部门名称

表:emp,dept

条件:两张表对应的部门名称,sal>all(对应薪资)


12.列出在每个部门工作的员工数量、平均工资。


select deptno,count(*),avg(sal)
from emp
group by deptno
相关文章
|
人工智能 安全 机器人
无代码革命:10分钟打造企业专属数据库查询AI机器人
随着数字化转型加速,企业对高效智能交互解决方案的需求日益增长。阿里云AppFlow推出的AI助手产品,借助创新网页集成技术,助力企业打造专业数据库查询助手。本文详细介绍通过三步流程将AI助手转化为数据库交互工具的核心优势与操作指南,包括全场景适配、智能渲染引擎及零代码配置等三大技术突破。同时提供Web集成与企业微信集成方案,帮助企业实现便捷部署与安全管理,提升内外部用户体验。
1230 12
无代码革命:10分钟打造企业专属数据库查询AI机器人
|
Cloud Native 关系型数据库 分布式数据库
|
并行计算 关系型数据库 MySQL
如何用 esProc 将数据库表转储提速查询
当数据库查询因数据量大或繁忙变慢时,可借助 esProc 将数据导出为文件进行计算,大幅提升性能。以 MySQL 的 3000 万行订单数据为例,两个典型查询分别耗时 17.69s 和 63.22s。使用 esProc 转储为二进制行存文件 (btx) 或列存文件 (ctx),结合游标过滤与并行计算,性能显著提升。例如,ctx 并行计算将原查询时间缩短至 0.566s,TopN 运算提速达 30 倍。esProc 的简洁语法和高效文件格式,特别适合历史数据的复杂分析场景。
|
SQL 关系型数据库 MySQL
如何优化SQL查询以提高数据库性能?
这篇文章以生动的比喻介绍了优化SQL查询的重要性及方法。它首先将未优化的SQL查询比作在自助餐厅贪多嚼不烂的行为,强调了只获取必要数据的必要性。接着,文章详细讲解了四种优化策略:**精简选择**(避免使用`SELECT *`)、**专业筛选**(利用`WHERE`缩小范围)、**高效联接**(索引和限制数据量)以及**使用索引**(加速搜索)。此外,还探讨了如何避免N+1查询问题、使用分页限制结果、理解执行计划以及定期维护数据库健康。通过这些技巧,可以显著提升数据库性能,让查询更高效流畅。
|
数据库 Python
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
【YashanDB知识库】python驱动查询gbk字符集崖山数据库CLOB字段,数据被驱动截断
|
数据库
【YashanDB知识库】数据库用户所拥有的权限查询
【YashanDB知识库】数据库用户所拥有的权限查询
|
存储 运维 监控
百万指标,秒级查询,零宕机——时序数据库 TDengine 在 AIOps 中的硬核实战
本篇文章详细讲述了七云团队在运维平台中如何利用 TDengine 解决海量时序数据存储与查询的实际业务需求。内容涵盖了从数据库选型、方案落地到业务挑战及解决办法的完整过程,特别是分享了升级 TDengine 3.x 时的实战经验,给到有需要的小伙伴参考阅读。
862 1
|
缓存 NoSQL 关系型数据库
WordPress数据库查询缓存插件
这款插件通过将MySQL查询结果缓存至文件、Redis或Memcached,加速页面加载。它专为未登录用户优化,支持跨页面缓存,不影响其他功能,且可与其他缓存插件兼容。相比传统页面缓存,它仅缓存数据库查询结果,保留动态功能如阅读量更新。提供三种缓存方式选择,有效提升网站性能。
409 1
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
2142 6

热门文章

最新文章