介绍
在这个实践项目中,你将通过处理人员数据库及其 emp 表来踏上掌握 SQL 查询艺术的旅程。通过一系列实际练习,你将获得有效检索、筛选和分析员工数据所需的技能。
👀 预览

🎯 任务
在这个项目中,你将学习:
- 如何使用终端访问 MySQL 数据库
- 如何将 SQL 文件导入 MySQL 数据库
- 如何从
emp表中查询所有员工信息并对结果进行排序 - 如何查询员工人数超过 4 人的部门的部门编号和员工总数
- 如何查询 10 部门中薪资最高的员工
🏆 成果
完成这个项目后,你将能够:
- 了解如何使用终端处理 MySQL 数据库
- 执行基本的 SQL 查询以检索和分析数据
- 应用排序、分组和筛选技术从数据库中提取特定信息
访问 MySQL 并导入数据库
在这一步中,你将学习如何访问 MySQL 数据库并导入 personnel.sql 文件。
- 打开终端并使用以下命令启动 MySQL 服务:
sudo service mysql start
- 使用以下命令访问 MySQL 客户端:
sudo mysql
- 使用以下命令将
personnel.sql文件导入 MySQL 数据库:
source /home/labex/project/personnel.sql;
这将把 personnel 数据库和 emp 表导入到你的 MySQL 环境中。
编写查询语句
在这一步中,你将学习编写三条查询语句,分别是如何从 emp 表中查询所有员工并对结果进行排序,如何查询员工人数超过 4 人的部门的部门编号和员工总数,以及如何查询 10 部门中薪资最高的员工。
在
~/project目录下创建一个名为select_group.sql的新文件。在
select_group.sql文件中,添加以下 SQL 查询语句:这条查询语句将返回
emp表中的所有员工信息,并按部门编号升序和薪资降序排序。SELECT * FROM emp ORDER BY deptno ASC, sal DESC;这条查询语句将返回员工人数超过 4 人的部门的部门编号和员工总数。
GROUP BY子句用于按部门编号对员工进行分组,HAVING子句用于过滤结果,只包括员工人数超过 4 人的部门。SELECT deptno, COUNT(*) AS total_employees FROM emp GROUP BY deptno HAVING total_employees > 4;这条查询语句将返回部门编号为 10 且薪资最高的员工的员工编号、姓名、部门编号和职位信息。
WHERE子句用于过滤结果,只包括部门编号为 10 的员工,ORDER BY子句用于按薪资降序对结果进行排序,LIMIT 1子句用于只返回第一个结果,即薪资最高的员工。SELECT empno, ename, deptno, job FROM emp WHERE deptno = 10 ORDER BY sal DESC LIMIT 1;
保存文件。
运行 SQL 脚本
在这一步中,你将学习如何运行 SQL 脚本。
在 MySQL 终端中,运行
select_group.sql脚本:source /home/labex/project/select_group.sql;这将执行
select_group.sql文件中的 SQL 语句并显示结果。示例输出:
MariaDB [personnel]> source /home/labex/project/select_group.sql; +-------+--------+-----------+------+------------+---------+---------+--------+ | empno | ename | job | mgr | hiredate | sal | comm | deptno | +-------+--------+-----------+------+------------+---------+---------+--------+ | 7839 | KING | PRESIDENT | NULL | 1981-11-17 | 5000.00 | NULL | 10 | | 7782 | CLARK | MANAGER | 7839 | 1981-06-09 | 2450.00 | NULL | 10 | | 7934 | MILLER | CLERK | 7782 | 1982-01-23 | 1300.00 | NULL | 10 | | 7902 | FORD | ANALYST | 7566 | 1981-12-03 | 3000.00 | NULL | 20 | | 7788 | SCOTT | ANALYST | 7566 | 1987-06-13 | 3000.00 | NULL | 20 | | 7566 | JONES | MANAGER | 7839 | 1981-04-02 | 2975.00 | NULL | 20 | | 7876 | ADAMS | CLERK | 7788 | 1987-06-13 | 1100.00 | NULL | 20 | | 7369 | SMITH | CLERK | 7902 | 1980-12-17 | 800.00 | NULL | 20 | | 7698 | BLAKE | MANAGER | 7839 | 1981-05-01 | 2850.00 | NULL | 30 | | 7499 | ALLEN | SALESMAN | 7698 | 1981-02-20 | 1600.00 | 300.00 | 30 | | 7844 | TURNER | SALESMAN | 7698 | 1981-09-08 | 1500.00 | 0.00 | 30 | | 7654 | MARTIN | SALESMAN | 7698 | 1981-09-28 | 1250.00 | 1400.00 | 30 | | 7521 | WARD | SALESMAN | 7698 | 1981-02-22 | 1250.00 | 500.00 | 30 | | 7900 | JAMES | CLERK | 7698 | 1981-12-03 | 950.00 | NULL | 30 | +-------+--------+-----------+------+------------+---------+---------+--------+ 14 rows in set (0.000 sec) +--------+-----------------+ | deptno | total_employees | +--------+-----------------+ | 20 | 5 | | 30 | 6 | +--------+-----------------+ 2 rows in set (0.000 sec) +-------+-------+--------+-----------+ | empno | ename | deptno | job | +-------+-------+--------+-----------+ | 7839 | KING | 10 | PRESIDENT | +-------+-------+--------+-----------+ 1 row in set (0.000 sec)
总结
恭喜你!你已经完成了这个项目。你可以在 LabEx 中练习更多实验来提升你的技能。
