根据给定的信息,我们可以深入分析并提取出一系列有关 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;
```