面试题答案
一键面试示例表结构及数据
假设我们有三个表:Employees
、Salaries
和 Departments
。
Employees
表包含员工信息,有employee_id
(数值类型),name
(文本类型),department_id
(数值类型,关联Departments
表)。Salaries
表包含员工薪资信息,有employee_id
(数值类型,关联Employees
表),salary
(数值类型)。Departments
表包含部门信息,有department_id
(数值类型),department_name
(文本类型)。
SQL 查询语句
SELECT
d.department_name,
SUM(s.salary) AS total_salary,
GROUP_CONCAT(e.name ORDER BY LENGTH(e.name) DESC) AS sorted_names
FROM
Employees e
JOIN
Salaries s ON e.employee_id = s.employee_id
JOIN
Departments d ON e.department_id = d.department_id
GROUP BY
d.department_name;
查询解释
- 连接操作:
- 通过
JOIN
操作将Employees
表、Salaries
表和Departments
表连接起来。Employees
表与Salaries
表通过employee_id
进行连接,Employees
表与Departments
表通过department_id
进行连接。
- 通过
- 聚合操作:
- 数值类型聚合:对
Salaries
表中的salary
列(数值类型)使用SUM
函数进行求和操作,得出每个部门的总薪资。 - 文本类型聚合:对
Employees
表中的name
列(文本类型),先使用GROUP_CONCAT
函数将每个部门的员工名字合并成一个字符串,并且在合并过程中通过ORDER BY LENGTH(e.name) DESC
按照名字长度从长到短排序。
- 数值类型聚合:对
SQLite 处理不同类型数据的方式
- 数值类型:SQLite 对数值类型数据进行数学运算(如这里的
SUM
求和)时,会按照标准的数学规则进行计算。在存储和计算过程中,SQLite 会根据数据的大小和精度选择合适的内部表示方式。 - 文本类型:对于文本类型,在进行排序(如
ORDER BY LENGTH(e.name)
)时,SQLite 会按照定义的排序规则进行操作。LENGTH
函数用于获取文本的长度,SQLite 根据这个长度值对文本进行排序。在GROUP_CONCAT
操作中,文本按照排序后的顺序进行连接。