当前位置: 首页> 房产> 政策 > 阳江58同城招聘网最新招聘_中国空间站研究项目_企业课程培训_百度网址大全免费下载

阳江58同城招聘网最新招聘_中国空间站研究项目_企业课程培训_百度网址大全免费下载

时间:2025/7/10 0:46:34来源:https://blog.csdn.net/lcadna/article/details/145478775 浏览次数:0次
阳江58同城招聘网最新招聘_中国空间站研究项目_企业课程培训_百度网址大全免费下载

Go程序员SQL复习集

1. SQL 基础

1.1 基本操作

  • SELECT:用于查询数据。
    SELECT * FROM employees;
    

WHERE:过滤条件。

sql

SELECT * FROM employees WHERE age > 30;
INSERT:插入数据。

sql

INSERT INTO employees (name, age) VALUES (‘Alice’, 28);
UPDATE:更新数据。

sql

UPDATE employees SET age = 29 WHERE name = ‘Alice’;
DELETE:删除数据。

sql

DELETE FROM employees WHERE name = ‘Alice’;
1.2 排序与限制
ORDER BY:排序。

sql

SELECT * FROM employees ORDER BY age DESC;
LIMIT:限制结果集数量。

sql

SELECT * FROM employees LIMIT 10;
1.3 聚合函数
COUNT():计算行数。

sql

SELECT COUNT(*) FROM employees;
AVG():计算平均值。

sql

SELECT AVG(age) FROM employees;
SUM():求和。

sql

SELECT SUM(salary) FROM employees;
GROUP BY:按列分组。

sql

SELECT department, COUNT(*) FROM employees GROUP BY department;
HAVING:过滤分组后的结果。

sql

SELECT department, AVG(salary) FROM employees GROUP BY department HAVING AVG(salary) > 50000;
2. SQL 进阶
2.1 连接 (JOIN)
INNER JOIN:返回两个表中匹配的行。

sql

SELECT e.name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
LEFT JOIN:返回左表所有行,右表没有匹配的用NULL填充。

sql

SELECT e.name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
RIGHT JOIN:返回右表所有行,左表没有匹配的用NULL填充。

sql

SELECT e.name, d.department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;
2.2 子查询 (Subquery)
在SELECT中使用子查询:

sql

SELECT name, (SELECT department_name FROM departments WHERE id = employees.department_id) AS department
FROM employees;
在WHERE中使用子查询:

sql

SELECT * FROM employees WHERE department_id IN (SELECT id FROM departments WHERE name = ‘HR’);
2.3 联合查询 (UNION)
UNION:合并两个结果集(去重)。

sql

SELECT name FROM employees WHERE department_id = 1
UNION
SELECT name FROM employees WHERE department_id = 2;
UNION ALL:合并两个结果集(包括重复)。

sql

SELECT name FROM employees WHERE department_id = 1
UNION ALL
SELECT name FROM employees WHERE department_id = 2;
3. 面试常见问题
3.1 SQL 基础面试题
什么是索引,为什么要使用索引?

索引是数据库中的一个数据结构,可以加速数据查询。它的作用是减少全表扫描,提升查询性能,尤其是在大数据量的情况下。常用的索引类型有B树索引、哈希索引等。
什么是主键与外键?

主键是表中的唯一标识,每一行数据必须有唯一的主键值;外键是引用其他表主键的字段,用于表示表与表之间的关系。
SQL中NULL的含义是什么?

NULL代表缺失的数据或值未知。与任何值(包括0、空字符串等)都不相等,需要使用IS NULL来判断。
什么是事务?ACID特性是什么?

事务是一个不可分割的操作集合,要么全部成功,要么全部失败。ACID特性指:
Atomicity(原子性):事务中的操作要么全做,要么全不做。
Consistency(一致性):事务开始前后,数据库的状态是一致的。
Isolation(隔离性):事务的执行不会受到其他事务的干扰。
Durability(持久性):事务一旦提交,其结果是永久保存的。
3.2 SQL 性能面试题
如何优化查询性能?

使用索引、避免在查询中使用SELECT *、避免使用复杂的JOIN和子查询、优化WHERE条件等。
如何设计高效的数据库架构?

正确使用索引、规范化与反规范化结合、避免数据冗余、根据实际情况进行分表分库设计等。
什么是查询的执行计划,如何查看?

执行计划显示了查询的执行步骤。可以使用EXPLAIN关键字来查看执行计划,了解数据库如何优化查询。
3.3 SQL 高级面试题
什么是窗口函数?举个例子。

窗口函数是在查询结果的“窗口”内对数据进行操作。例如,ROW_NUMBER()可以为查询结果集中的每一行分配一个唯一的行号。
sql

SELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS row_num
FROM employees;
如何处理数据库中的数据重复?

可以使用DISTINCT去重,或通过GROUP BY结合聚合函数来删除重复数据。
Explain如何使用索引优化查询?

在查询中经常用到的字段(例如WHERE、JOIN、ORDER BY中的字段)上创建索引。避免在没有必要的字段上创建索引,以免影响INSERT、UPDATE和DELETE操作的性能。

SQL 面试与工作场景题集

1. 基础场景题

场景1:查询某部门的员工

问题:
假设你有一个 employees 表,包含 id, name, age, salary, department_id 字段。如何查询部门编号为 3 的所有员工的姓名和薪资?

答案:

SELECT name, salary
FROM employees
WHERE department_id = 3;
场景2:查询年龄大于30的员工数量
问题:
查询所有年龄大于30岁的员工的数量。答案:sqlSELECT COUNT(*)
FROM employees
WHERE age > 30;
场景3:查询薪资最高的前5名员工
问题:
如何查询薪资最高的前5名员工的姓名和薪资?答案:sqlSELECT name, salary
FROM employees
ORDER BY salary DESC
LIMIT 5;
2. 中级场景题
场景4:查询每个部门的平均薪资
问题:
假设你有一个 departments 表,包含 id, name 字段,如何查询每个部门的平均薪资?答案:sqlSELECT d.name AS department_name, AVG(e.salary) AS average_salary
FROM departments d
JOIN employees e ON d.id = e.department_id
GROUP BY d.name;
场景5:查询某一部门薪资最高的员工
问题:
如何查询部门编号为 2 的薪资最高的员工的姓名和薪资?答案:sqlSELECT name, salary
FROM employees
WHERE department_id = 2
ORDER BY salary DESC
LIMIT 1;
场景6:删除没有薪资记录的员工
问题:
删除所有薪资为空(NULL)的员工记录。答案:sqlDELETE FROM employees
WHERE salary IS NULL;
3. 高级场景题
场景7:按部门统计员工人数
问题:
查询每个部门的员工人数,并按照人数降序排序。答案:sqlSELECT department_id, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id
ORDER BY employee_count DESC;
场景8:查询某个员工的上级
问题:
假设 employees 表中有 id, name, manager_id 字段,manager_id 表示该员工的上级员工 ID。如何查询某个员工(例如 id = 4)的上级员工姓名?答案:sqlSELECT e2.name AS manager_name
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id
WHERE e1.id = 4;
场景9:计算每个员工的排名
问题:
根据员工薪资对员工进行排名,如何查询薪资排名前3的员工?答案:sqlSELECT name, salary, ROW_NUMBER() OVER (ORDER BY salary DESC) AS rank
FROM employees
WHERE rank <= 3;
场景10:查找部门中的最低薪资
问题:
查询部门编号为 5 中的最低薪资员工的姓名和薪资。答案:sqlSELECT name, salary
FROM employees
WHERE department_id = 5
ORDER BY salary ASC
LIMIT 1;
4. 复杂场景题
场景11:统计每个部门的员工平均薪资、总薪资和员工人数
问题:
查询每个部门的员工平均薪资、总薪资和员工人数。答案:sqlSELECT department_id, AVG(salary) AS average_salary, SUM(salary) AS total_salary, COUNT(*) AS employee_count
FROM employees
GROUP BY department_id;
场景12:查找薪资高于平均薪资的员工
问题:
查询薪资高于所有员工平均薪资的员工姓名和薪资。答案:sqlSELECT name, salary
FROM employees
WHERE salary > (SELECT AVG(salary) FROM employees);
场景13:查找某个部门薪资的中位数
问题:
如何查找某个部门(例如部门编号为 3)薪资的中位数?答案: 中位数的查询通常比较复杂,以下是一个常见的解决方法:sqlSELECT AVG(salary) AS median_salary
FROM (SELECT salaryFROM employeesWHERE department_id = 3ORDER BY salaryLIMIT 2 - (SELECT COUNT(*) FROM employees WHERE department_id = 3) % 2OFFSET (SELECT (COUNT(*) - 1) / 2 FROM employees WHERE department_id = 3)
) AS temp;
场景14:找到那些有多个上级的员工
问题:
如何找到那些有多个上级的员工?答案:sqlSELECT employee_id
FROM employees
GROUP BY employee_id
HAVING COUNT(DISTINCT manager_id) > 1;
5. 优化场景题
场景15:如何优化一个慢查询?
问题:
假设你有以下查询,它非常慢:sqlSELECT * FROM employees WHERE department_id = 3;
你会如何优化这个查询?答案:创建索引: 确保 department_id 上有索引,优化查询速度。
sqlCREATE INDEX idx_department_id ON employees(department_id);
减少 SELECT * 的使用: 只选择需要的列,避免全表扫描。
sqlSELECT name, salary FROM employees WHERE department_id = 3;
场景16:如何优化带有多个JOIN的查询?
问题:
假设你有一个复杂的查询,涉及到多个表的 JOIN,并且查询非常慢。你会如何优化?答案:使用索引: 确保每个连接条件(例如 ON 后的字段)都有索引。
减少 JOIN 表数目: 如果不需要所有表的所有数据,可以考虑减少 JOIN 数量。
使用 EXPLAIN 查看执行计划: 分析查询的执行计划,找出瓶颈。
sqlEXPLAIN SELECT e.name, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.id;你可以将这个 Markdown 文件保存为 `.md` 格式,方便随时查阅和整理笔记。如果有其他需
关键字:阳江58同城招聘网最新招聘_中国空间站研究项目_企业课程培训_百度网址大全免费下载

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: