访问 MySQL 数据库与 SQL 查询

SQLSQLBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

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

👀 预览

SQL查询预览图像

🎯 任务

在这个项目中,你将学习:

  • 如何使用终端访问MySQL数据库
  • 如何将SQL文件导入MySQL数据库
  • 如何从 emp 表中查询所有员工信息并对结果进行排序
  • 如何查询员工人数超过4人的部门的部门编号和员工总数
  • 如何查询10部门中薪资最高的员工

🏆 成果

完成这个项目后,你将能够:

  • 了解如何使用终端处理MySQL数据库
  • 执行基本的SQL查询以检索和分析数据
  • 应用排序、分组和筛选技术从数据库中提取特定信息

访问MySQL并导入数据库

在这一步中,你将学习如何访问MySQL数据库并导入 personnel.sql 文件。

  1. 打开终端并使用以下命令启动MySQL服务:
sudo service mysql start
  1. 使用以下命令访问MySQL客户端:
sudo mysql
  1. 使用以下命令将 personnel.sql 文件导入MySQL数据库:
source /home/labex/project/personnel.sql;

这将把 personnel 数据库和 emp 表导入到你的MySQL环境中。

编写查询语句

在这一步中,你将学习编写三条查询语句,分别是如何从 emp 表中查询所有员工并对结果进行排序,如何查询员工人数超过4人的部门的部门编号和员工总数,以及如何查询10部门中薪资最高的员工。

  1. ~/project 目录下创建一个名为 select_group.sql 的新文件。

  2. select_group.sql 文件中,添加以下SQL查询语句:

  3. 这条查询语句将返回 emp 表中的所有员工信息,并按部门编号升序和薪资降序排序。

    SELECT * FROM emp
    ORDER BY deptno ASC, sal DESC;
  4. 这条查询语句将返回员工人数超过4人的部门的部门编号和员工总数。GROUP BY 子句用于按部门编号对员工进行分组,HAVING 子句用于过滤结果,只包括员工人数超过4人的部门。

    SELECT deptno, COUNT(*) AS total_employees
    FROM emp
    GROUP BY deptno
    HAVING total_employees > 4;
  5. 这条查询语句将返回部门编号为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脚本。

  1. 在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中练习更多实验来提升你的技能。