编程导航学习网站:学编程、做项目、拿 Offer!
企业高频面试题库:开始刷题,面试遇原题!
精选简历模板大全:1 分钟搞定简历!
AI 资源导航网站:获取最新 AI 黑科技!
1 对 1 模拟面试:随时随地提升面试能力
SQL 求职高频面试题:开始刷题
数据库是用于存储和管理数据的仓库,而 SQL(Structured Query Language,结构化查询语言)就是用来操作数据库的标准语言。无论你是后端开发、数据分析,还是产品经理,SQL 都是必备技能之一。
通过学习 SQL,你可以轻松地对数据进行增删改查、统计分析、复杂查询等操作,帮助你更好地理解和管理数据。
掌握 SQL 后,有助于从事下列方向的工作(这些岗位都需要 SQL 技能):
在正式学习之前,强烈推荐大家使用鱼皮开发的 免费闯关式 SQL 自学网站 —— SQL 之母!
网站地址:https://sqlfather.yupi.icu
这个网站提供了 30+ 个精心设计的 SQL 闯关题目,通过实战练习的方式帮你快速入门 SQL,比单纯看教程效果好很多!

推荐先观看项目演示视频:https://www.bilibili.com/video/BV1pV4y1i7LW
项目已开源:https://github.com/liyupi/sql-mother

1)理论结合实践:不要只看教程,一定要多动手写 SQL 语句。可以使用鱼皮的 SQL 之母网站进行闯关练习,或者在本地安装数据库环境。
2)选择一个主流数据库:建议优先学习 MySQL(开源、免费、应用广泛),关于 MySQL 数据库的详细学习,可以查看 MySQL 数据库学习路线,掌握 SQL 基础语法后再了解其他数据库的差异。
3)先学标准 SQL:重点学习标准 SQL 语法(增删改查、多表查询、聚合函数等),这些语法在各个数据库中都是通用的。

4)多用 AI 辅助学习:遇到不理解的 SQL 语法或报错,可以问 AI 工具(比如 DeepSeek)让它解释或帮你改正。很多现成的 AI 工具可以在鱼皮的 AI 导航网站 找到。

5)多看优秀的 SQL:阅读开源项目中的 SQL 建表语句和查询语句,学习别人是如何设计表结构和编写复杂查询的。
6)注重查询性能:学会使用 EXPLAIN 分析查询计划,了解索引的作用,养成写高效 SQL 的习惯。
SQL 语言按照功能可以分为以下几类:
用于定义和管理数据库对象(数据库、表、索引、视图等)。
常用语句:
CREATE:创建数据库对象
▼sql复制代码-- 创建数据库 CREATE DATABASE school; -- 创建表 CREATE TABLE student ( id INT PRIMARY KEY, name VARCHAR(50), age INT );
ALTER:修改数据库对象
▼sql复制代码-- 添加列 ALTER TABLE student ADD COLUMN email VARCHAR(100); -- 修改列类型 ALTER TABLE student MODIFY COLUMN age TINYINT;
DROP:删除数据库对象
▼sql复制代码-- 删除表 DROP TABLE student; -- 删除数据库 DROP DATABASE school;
TRUNCATE:清空表数据(保留表结构)
▼sql复制代码TRUNCATE TABLE student;
用于对表中的数据进行增删改操作。
常用语句:
INSERT:插入数据
▼sql复制代码-- 插入单条数据 INSERT INTO student (id, name, age) VALUES (1, '张三', 20); -- 插入多条数据 INSERT INTO student VALUES (2, '李四', 21), (3, '王五', 22);
UPDATE:更新数据
▼sql复制代码-- 更新单个字段 UPDATE student SET age = 21 WHERE id = 1; -- 更新多个字段 UPDATE student SET name = '赵六', age = 23 WHERE id = 2;
DELETE:删除数据
▼sql复制代码-- 删除指定数据 DELETE FROM student WHERE id = 1; -- 删除所有数据(慎用!) DELETE FROM student;
用于查询数据库中的数据,是 SQL 中使用最频繁的语句。
常用语句:
SELECT:查询数据
▼sql复制代码-- 查询所有列 SELECT * FROM student; -- 查询指定列 SELECT name, age FROM student; -- 条件查询 SELECT * FROM student WHERE age > 20; -- 排序查询 SELECT * FROM student ORDER BY age DESC; -- 分组查询 SELECT class, COUNT(*) as count FROM student GROUP BY class; -- 多表查询 SELECT s.name, c.course_name FROM student s JOIN course c ON s.id = c.student_id;
用于控制数据库的访问权限和安全性。(不用记忆这部分)
常用语句:
GRANT:授予权限
▼sql复制代码-- 授予用户查询权限 GRANT SELECT ON school.* TO 'user1'@'localhost'; -- 授予所有权限 GRANT ALL PRIVILEGES ON school.* TO 'admin'@'localhost';
REVOKE:撤销权限
▼sql复制代码-- 撤销查询权限 REVOKE SELECT ON school.* FROM 'user1'@'localhost';
用于管理数据库事务,确保数据的一致性和完整性。(不用记忆这部分)
常用语句:
BEGIN/START TRANSACTION:开始事务COMMIT:提交事务ROLLBACK:回滚事务SAVEPOINT:设置保存点▼sql复制代码-- 开始事务 START TRANSACTION; -- 执行操作 UPDATE account SET balance = balance - 100 WHERE id = 1; UPDATE account SET balance = balance + 100 WHERE id = 2; -- 提交事务(如果成功) COMMIT; -- 或回滚事务(如果失败) -- ROLLBACK;
虽然 SQL 是标准化的语言,但不同的数据库系统对 SQL 都有自己的扩展和实现,这些被称为 "SQL 方言"。
主流数据库及其方言:
举一些方言差异的例子。
分页查询:
LIMIT 10 OFFSET 0LIMIT 10 OFFSET 0ROWNUM <= 10 或 FETCH FIRST 10 ROWS ONLYTOP 10 或 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY字符串拼接:
CONCAT(str1, str2) 或 str1 || str2str1 || str2str1 || str2str1 + str2 或 CONCAT(str1, str2)鱼皮建议先学习标准 SQL 语法,然后根据工作需要学习特定数据库的方言特性。
学习目标:掌握 SQL 的基本语法,能够进行简单的数据库和表操作、数据的增删改查。
CREATE DATABASEDROP DATABASEUSECREATE TABLE
ALTER TABLEDROP TABLETRUNCATE TABLEINSERT INTOUPDATE ... SET ... WHEREDELETE FROM ... WHERESELECT * FROMSELECT column1, column2 FROMWHERE
=、>、<、>=、<=、!=、<>AND、OR、NOTLIKE、%、_BETWEEN ... AND、INIS NULL、IS NOT NULLDISTINCTORDER BY(ASC、DESC)LIMIT1)先了解数据库的基本概念,理解什么是表、行、列、主键等,这些是学习 SQL 的基础。
2)动手实践最重要:每学一个语法,都要在数据库中实际操作一遍。可以使用 鱼皮的 SQL 之母 进行闯关练习。
3)从简单开始:先学会创建表、插入数据、查询数据,再逐步学习更复杂的操作。
4)熟记常用数据类型:重点掌握 INT、VARCHAR、TEXT、DATE、DATETIME、DECIMAL 等常用类型。
5)理解约束的作用:主键、外键、唯一约束、非空约束等都是为了保证数据的完整性和一致性。
学习目标:掌握复杂查询、多表查询、子查询、聚合函数等进阶技能,能够处理复杂的业务查询需求。
COUNT():计数SUM():求和AVG():平均值MAX():最大值MIN():最小值GROUP BY:分组HAVING:分组后的条件筛选▼sql复制代码-- 统计每个班级的学生人数 SELECT class, COUNT(*) as student_count FROM student GROUP BY class; -- 查询平均成绩大于 80 分的班级 SELECT class, AVG(score) as avg_score FROM student GROUP BY class HAVING AVG(score) > 80;
INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOIN(MySQL 不支持,可用 UNION 实现)CROSS JOIN▼sql复制代码-- 内连接:查询学生及其选课信息 SELECT s.name, c.course_name FROM student s INNER JOIN course c ON s.id = c.student_id; -- 左连接:查询所有学生及其选课信息(包括没选课的学生) SELECT s.name, c.course_name FROM student s LEFT JOIN course c ON s.id = c.student_id;
IN、ANY、ALLEXISTS 和 NOT EXISTS▼sql复制代码-- 查询成绩高于平均成绩的学生 SELECT * FROM student WHERE score > (SELECT AVG(score) FROM student); -- 查询选了课程的学生 SELECT * FROM student WHERE id IN (SELECT DISTINCT student_id FROM course);
UNION、UNION ALLCASE WHENROW_NUMBER():行号RANK():排名DENSE_RANK():密集排名PARTITION BY:分区WITH ... AS▼sql复制代码-- CASE WHEN 示例 SELECT name, CASE WHEN score >= 90 THEN '优秀' WHEN score >= 80 THEN '良好' WHEN score >= 60 THEN '及格' ELSE '不及格' END as grade FROM student; -- 窗口函数示例:查询每个班级成绩排名前 3 的学生 SELECT * FROM ( SELECT name, class, score, ROW_NUMBER() OVER (PARTITION BY class ORDER BY score DESC) as rank FROM student ) as ranked WHERE rank <= 3;
CREATE VIEW、DROP VIEWCREATE INDEX、DROP INDEX1)掌握多表连接是关键:左连接、内连接的区别一定要清楚,多画图理解两表连接的结果。

2)多做复杂查询练习:找一些包含多表关联、分组统计、条件筛选的综合题目练习。
3)理解子查询的执行顺序:子查询一般先执行,再被外层查询使用。
4)窗口函数很强大:虽然语法复杂,但能解决很多排名、累计等问题,值得深入学习。
学习目标:了解 SQL 查询的性能优化方法,能够编写高效的 SQL 语句,理解索引的原理和使用。
EXPLAIN 分析查询计划LIMIT 限制返回结果SELECT *,只查询需要的列EXISTS 代替 INUNION ALL 代替 UNION(如果不需要去重)OR,考虑使用 IN 或 UNION1)性能优化是经验积累的过程:不要死记硬背优化技巧,要理解背后的原理。
2)多使用 EXPLAIN 分析:建议每写一个复杂查询,都用 EXPLAIN 看看执行计划,观察是否用到索引。
3)索引不是越多越好:过多的索引会影响写入性能,要根据实际查询需求合理创建。
4)结合具体数据库学习:不同数据库的优化策略可能不同,建议结合 MySQL 或 PostgreSQL 的优化专题深入学习。
5)关注慢查询日志:实际工作中,通过分析慢查询日志来定位性能问题。

学习目标:将 SQL 知识应用到实际项目中,结合具体的数据库系统进行实战练习。
1)从简单项目开始:先做一个简单的学生管理系统或博客系统,设计表结构并实现增删改查。
2)关注表结构设计:良好的表结构设计是高效查询的基础,学习数据库设计三范式。
3)参加开源项目:阅读开源项目中的数据库设计和 SQL 语句,学习优秀的实践经验。
4)结合具体数据库深入:建议选择 MySQL 作为主攻方向,系统学习 MySQL 的特性和优化。更详细的内容可以参考 MySQL 数据库学习路线。
可以参考鱼皮的项目教程进行实战练习:
SQL 是大部分技术岗位面试的必考内容,尤其是后端开发、数据分析等岗位。
学习目标:熟练掌握常见的 SQL 面试题,能够快速准确地编写 SQL 语句,顺利通过 SQL 相关的面试环节。
1)多刷 LeetCode 数据库题:LeetCode 的数据库题目涵盖了大部分面试考点,建议至少刷 50+ 道题。
2)准备手写 SQL:面试时可能要求现场手写 SQL,要能快速写出正确的查询语句。常见考点包括:多表连接、分组统计、排名查询、去重等。
3)理解 SQL 执行原理:面试官可能会问 SQL 的执行顺序、索引原理、查询优化等,要有深入理解。
4)准备项目中的 SQL 经验:如果简历上的项目涉及数据库,要提前准备好如何讲解表设计、如何优化慢查询等。
5)关注数据库特性:如果应聘特定数据库相关的岗位(如 MySQL DBA),要深入学习该数据库的特性和优化。
6)多看真实面经:真实面经大全,了解不同公司对 SQL 的考察重点。
更多求职干货:
面试时对 SQL 的考察主要有下面几种形式:
INNER JOIN、LEFT JOIN、RIGHT JOIN 的区别?WHERE 和 HAVING 的区别?UNION 和 UNION ALL 的区别?加油各位鱼友们 💪🏻!

1)程序员学习交流圈:极客教程、实战项目、求职宝典
2)程序员面试八股文:实习/校招/社招高频考点、企业真题解析
3)程序员写简历神器:专业模板、丰富例句、直通面试
4)AI 知识资源大全:前沿技术、最新 AI 资讯、提示词大全
5)1 对 1 模拟面试:实习/校招/社招面试拿 Offer 必备