根据给定的信息,我们可以深入分析并提取出一系列有关 MySQL 的重要知识点。这些知识点主要围绕着 SQL查询技巧存储过程以及触发器展开。

MySQL 经典面试题分析

1. SQL查询技巧

题目: 用两种方式按照部门号从高到低,工资从低到高列出每个员工的信息。

- 表结构:employee (eid, name, salary, deptid)

解答:

- 第一种方法是直接使用 ORDER BY 子句来排序结果集:

sql

SELECT * FROM employee ORDER BY deptid DESC, salary ASC;

  • 第二种方法通过自连接实现: sql SELECT e1.* FROM employee AS e1 JOIN (SELECT deptid FROM employee GROUP BY deptid ORDER BY deptid DESC) AS e2 ON e1.deptid = e2.deptid ORDER BY e1.salary ASC;

题目: 列出各个部门中工资高于本部门平均工资的员工数量和部门号,并按部门号排序。

解答:

为了实现这个功能,可以采用子查询或者关联查询的方式。

  • 子查询:
  • 计算每个部门的平均工资。
  • 找出每个部门中工资高于该部门平均工资的员工。
  • 统计每个部门符合条件的员工数量。 ```sql -- 计算每个部门的平均工资 SELECT deptid, AVG(salary) AS avg_salary FROM employee GROUP BY deptid;

-- 找出工资高于部门平均工资的员工

SELECT e1.id, e1.name, e1.salary, e1.deptid FROM employee AS e1

WHERE e1.salary > (SELECT AVG(salary) FROM employee AS e2 WHERE e1.deptid = e2.deptid);

-- 统计每个部门中符合条件的员工数量

SELECT COUNT(*), deptid

FROM (

SELECT e1.id, e1.name, e1.salary, e1.deptid

FROM employee AS e1

WHERE e1.salary > (

SELECT AVG(salary) FROM employee AS e2 WHERE e1.deptid = e2.deptid

)

) AS subquery

GROUP BY deptid;

```