MySQL基础练习题:习题21-25

这部分主要是为了帮助大家回忆回忆MySQL的基本语法,数据库来自于MySQL的官方简化版,题目也是网上非常流行的35题。这些基础习题基本可以涵盖面试中需要现场写SQL的问题。

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

复制代码
select e.ename from emp e join dept d on e.deptno = d.deptno and d.dname = 'sales';

+--------+
| ename  |
+--------+
| ALLEN  |
| WARD   |
| MARTIN |
| BLAKE  |
| TURNER |
| JAMES  |
+--------+

列出薪水高于公司平均薪水的所有员工,所在部门,上级领导,薪水等级

先取出公司平均薪水

复制代码
mysql> select avg(sal) as avgsal from emp;
+-------------+
| avgsal      |
+-------------+
| 2073.214286 |
+-------------+

然后多表连接

复制代码
mysql> select e.ename,e.sal,d.dname,s.grade
			from
				emp e
			join
				dept d
			on
				e.deptno=d.deptno
			join
				salgrade s
			on
				e.sal between s.losal and s.hisal
			having
				sal>(select avg(sal) as avgsal from             emp);
+-------+---------+-------------+-------+
| ename | sal     | dname       | grade |
+-------+---------+-------------+-------+
| JONES | 2975.00 | RESEARCHING |     4 |
| BLAKE | 2850.00 | SALES       |     4 |
| CLARK | 2450.00 | ACCOUNTING  |     4 |
| SCOTT | 3000.00 | RESEARCHING |     4 |
| KING  | 5000.00 | ACCOUNTING  |     5 |
| FORD  | 3000.00 | RESEARCHING |     4 |
+-------+---------+-------------+-------+

列出与scott从事相同工作的所有员工及部门名称

先找出scott的岗位,然后找出从事此工作的员工并与部门表连接显示部门名,注意排除scott本人

复制代码
mysql> select e.ename,d.dname from emp e join dept d where e.deptno=d.deptno and e.job=(select job from emp where ename='scott') and e.ename<>'scott';
+-------+-------------+
| ename | dname       |
+-------+-------------+
| FORD  | RESEARCHING |
+-------+-------------+

列出薪水高于部门30的全部员工的员工姓名,薪水,部门名称

先取出部门30的最高薪水,然后链接表和部门。

复制代码
select a.ename,a.sal,d.dname from (select * from emp where sal > (select max(sal) from emp where deptno=30) and deptno<>30) a join dept d on a.deptno = d.deptno;
+-------+---------+-------------+
| ename | sal     | dname       |
+-------+---------+-------------+
| JONES | 2975.00 | RESEARCHING |
| SCOTT | 3000.00 | RESEARCHING |
| KING  | 5000.00 | accounting  |
| FORD  | 3000.00 | RESEARCHING |
+-------+---------+-------------+

列出在每个部门工作的员工数量,平均工资和平均服务期限

使用to_days()将时间转换为公元元年到某时间点的天数

复制代码
mysql> select d.deptno,
		count(e.ename)as number,ifnull(avg(e.sal),0) as avgsal,
		ifnull(avg((to_days(now())-to_days(e.hiredate))/365),0) as avgtime
	from
		dept d
	left join
		emp e
	on
		d.deptno=e.deptno
	group by
		d.deptno;
+--------+--------+-------------+-------------+
| deptno | number | avgsal      | avgtime     |
+--------+--------+-------------+-------------+
|     20 |      5 | 2175.000000 | 35.57588000 |
|     30 |      6 | 1566.666667 | 37.84750000 |
|     10 |      3 | 2916.666667 | 37.54886667 |
|     40 |      0 |    0.000000 |  0.00000000 |
+--------+--------+-------------+-------------+
相关推荐
程序员岳焱2 小时前
Java 与 MySQL 性能优化:Java 实现百万数据分批次插入的最佳实践
后端·mysql·性能优化
计算机毕设定制辅导-无忧学长2 小时前
西门子 PLC 与 Modbus 集成:S7-1500 RTU/TCP 配置指南(一)
服务器·数据库·tcp/ip
程序员柳3 小时前
基于微信小程序的校园二手交易平台、微信小程序校园二手商城源代码+数据库+使用说明,layui+微信小程序+Spring Boot
数据库·微信小程序·layui
梦在深巷、3 小时前
MySQL/MariaDB数据库主从复制之基于二进制日志的方式
linux·数据库·mysql·mariadb
IT乌鸦坐飞机4 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
IT_10244 小时前
Spring Boot项目开发实战销售管理系统——数据库设计!
java·开发语言·数据库·spring boot·后端·oracle
Johny_Zhao4 小时前
Ubuntu系统安装部署Pandawiki智能知识库
linux·mysql·网络安全·信息安全·云计算·shell·yum源·系统运维·itsm·pandawiki
祁思妙想5 小时前
八股学习(三)---MySQL
数据库·学习·mysql
惊骇世俗王某人5 小时前
1.MySQL之如何定位慢查询
数据库·mysql
秦歌6666 小时前
向量数据库-Milvus快速入门
数据库·milvus