编程导航教程

首页

SQL 学习路线 | 26 年最新零基础到精通一条龙(万人收藏⭐️)

2025-11-18 20:13
阅读 2.1k
下载文档
评论
问答
笔记
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
大纲
    0

    编程导航学习网站:学编程、做项目、拿 Offer!

    企业高频面试题库:开始刷题,面试遇原题!

    精选简历模板大全:1 分钟搞定简历!

    AI 资源导航网站:获取最新 AI 黑科技!

    1 对 1 模拟面试:随时随地提升面试能力

    SQL 求职高频面试题:开始刷题

    开篇介绍

    数据库是用于存储和管理数据的仓库,而 SQL(Structured Query Language,结构化查询语言)就是用来操作数据库的标准语言。无论你是后端开发、数据分析,还是产品经理,SQL 都是必备技能之一。

    通过学习 SQL,你可以轻松地对数据进行增删改查、统计分析、复杂查询等操作,帮助你更好地理解和管理数据。

    为什么要学 SQL?

    1. 应用广泛:几乎所有需要存储数据的系统都会用到数据库和 SQL
    2. 简单易学:SQL 语法接近自然语言,学习难度不大
    3. 求职必备:大部分技术岗位(开发、数据分析、测试等)都要求掌握 SQL
    4. 数据分析基础:是进行数据分析和数据科学的基础工具
    5. 薪资加分项:熟练掌握 SQL 可以显著提升求职竞争力

    就业方向

    掌握 SQL 后,有助于从事下列方向的工作(这些岗位都需要 SQL 技能):

    1. 后端开发工程师
    2. 数据分析师
    3. 数据库工程师(DBA)
    4. 数据科学家
    5. 测试工程师
    6. 产品经理(需要数据分析能力)

    鱼皮的 SQL 免费自学网站

    在正式学习之前,强烈推荐大家使用鱼皮开发的 免费闯关式 SQL 自学网站 —— SQL 之母!

    网站地址:https://sqlfather.yupi.icu

    这个网站提供了 30+ 个精心设计的 SQL 闯关题目,通过实战练习的方式帮你快速入门 SQL,比单纯看教程效果好很多!

    鱼皮的SQL学习网

    推荐先观看项目演示视频:https://www.bilibili.com/video/BV1pV4y1i7LW

    项目已开源:https://github.com/liyupi/sql-mother

    学习路线图

    SQL 学习路线思维导图

    整体学习建议

    1)理论结合实践:不要只看教程,一定要多动手写 SQL 语句。可以使用鱼皮的 SQL 之母网站进行闯关练习,或者在本地安装数据库环境。

    2)选择一个主流数据库:建议优先学习 MySQL(开源、免费、应用广泛),关于 MySQL 数据库的详细学习,可以查看 MySQL 数据库学习路线,掌握 SQL 基础语法后再了解其他数据库的差异。

    3)先学标准 SQL:重点学习标准 SQL 语法(增删改查、多表查询、聚合函数等),这些语法在各个数据库中都是通用的。

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

    AI资源大全网站

    5)多看优秀的 SQL:阅读开源项目中的 SQL 建表语句和查询语句,学习别人是如何设计表结构和编写复杂查询的。

    6)注重查询性能:学会使用 EXPLAIN 分析查询计划,了解索引的作用,养成写高效 SQL 的习惯。

    SQL 知识体系

    SQL 分类

    SQL 语言按照功能可以分为以下几类:

    1、DDL(Data Definition Language)数据定义语言

    用于定义和管理数据库对象(数据库、表、索引、视图等)。

    常用语句:

    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;

    2、DML(Data Manipulation Language)数据操作语言

    用于对表中的数据进行增删改操作。

    常用语句:

    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;

    3、DQL(Data Query Language)数据查询语言

    用于查询数据库中的数据,是 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;

    4、DCL(Data Control Language)数据控制语言

    用于控制数据库的访问权限和安全性。(不用记忆这部分)

    常用语句:

    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';

    5、TCL(Transaction Control Language)事务控制语言

    用于管理数据库事务,确保数据的一致性和完整性。(不用记忆这部分)

    常用语句:

    • 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 都有自己的扩展和实现,这些被称为 "SQL 方言"。

    主流数据库及其方言:

    1. MySQL:最流行的开源数据库,语法相对简单,适合入门
    2. PostgreSQL:功能强大的开源数据库,支持复杂查询和扩展
    3. Oracle:企业级商业数据库,功能完善,使用 PL/SQL
    4. SQL Server:微软的商业数据库,使用 T-SQL
    5. SQLite:轻量级嵌入式数据库,常用于移动端和小型应用

    举一些方言差异的例子。

    分页查询:

    • MySQL: LIMIT 10 OFFSET 0
    • PostgreSQL: LIMIT 10 OFFSET 0
    • Oracle: ROWNUM <= 10 或 FETCH FIRST 10 ROWS ONLY
    • SQL Server: TOP 10 或 OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY

    字符串拼接:

    • MySQL: CONCAT(str1, str2) 或 str1 || str2
    • PostgreSQL: str1 || str2
    • Oracle: str1 || str2
    • SQL Server: str1 + str2 或 CONCAT(str1, str2)

    鱼皮建议先学习标准 SQL 语法,然后根据工作需要学习特定数据库的方言特性。

    阶段 1:SQL 基础语法

    学习目标:掌握 SQL 的基本语法,能够进行简单的数据库和表操作、数据的增删改查。

    知识点

    1、数据库基础概念【必学】

    • 什么是数据库、数据库管理系统(DBMS)
    • 关系型数据库的基本概念(表、行、列、主键、外键)
    • SQL 的作用和分类

    2、数据定义语言(DDL)【必学】

    • 创建数据库:CREATE DATABASE
    • 删除数据库:DROP DATABASE
    • 选择数据库:USE
    • 创建表:CREATE TABLE
      • 数据类型(INT、VARCHAR、DATE、DATETIME 等)
      • 约束(PRIMARY KEY、NOT NULL、UNIQUE、DEFAULT、AUTO_INCREMENT)
    • 修改表:ALTER TABLE
    • 删除表:DROP TABLE
    • 清空表:TRUNCATE TABLE

    3、数据操作语言(DML)【必学】

    • 插入数据:INSERT INTO
    • 更新数据:UPDATE ... SET ... WHERE
    • 删除数据:DELETE FROM ... WHERE

    4、数据查询语言(DQL)- 基础【必学】

    • 查询所有数据:SELECT * FROM
    • 查询指定列:SELECT column1, column2 FROM
    • 条件查询:WHERE
      • 比较运算符:=、>、<、>=、<=、!=、<>
      • 逻辑运算符:AND、OR、NOT
      • 模糊查询:LIKE、%、_
      • 范围查询:BETWEEN ... AND、IN
      • 空值判断:IS NULL、IS NOT NULL
    • 去重查询:DISTINCT
    • 排序:ORDER BY(ASC、DESC)
    • 限制结果数量:LIMIT

    学习建议

    1)先了解数据库的基本概念,理解什么是表、行、列、主键等,这些是学习 SQL 的基础。

    2)动手实践最重要:每学一个语法,都要在数据库中实际操作一遍。可以使用 鱼皮的 SQL 之母 进行闯关练习。

    3)从简单开始:先学会创建表、插入数据、查询数据,再逐步学习更复杂的操作。

    4)熟记常用数据类型:重点掌握 INT、VARCHAR、TEXT、DATE、DATETIME、DECIMAL 等常用类型。

    5)理解约束的作用:主键、外键、唯一约束、非空约束等都是为了保证数据的完整性和一致性。

    学习资源

    • ⭐ 鱼皮的 SQL 之母(免费闯关式学习):通过闯关练习快速入门 SQL
    • ⭐ SQL 之母项目演示视频:了解如何使用 SQL 之母学习
    • ⭐ 史上最易懂 SQL 教程(10 小时):零基础成长 SQL 大师
    • SQL 数据库两小时半快速入门:快速入门版本
    • MySQL 官方文档:权威参考资料

    面试题

    • ⭐ SQL 面试题 - 面试鸭

    阶段 2:SQL 进阶查询

    学习目标:掌握复杂查询、多表查询、子查询、聚合函数等进阶技能,能够处理复杂的业务查询需求。

    知识点

    1、聚合函数【必学】

    • 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;

    2、多表查询【必学】

    • 内连接:INNER JOIN
    • 左外连接:LEFT JOIN
    • 右外连接:RIGHT JOIN
    • 全外连接:FULL 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;

    3、子查询【必学】

    • 单行子查询
    • 多行子查询:IN、ANY、ALL
    • 相关子查询
    • EXISTS 和 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);

    4、高级查询技巧【建议学】

    • 联合查询:UNION、UNION ALL
    • 条件表达式:CASE WHEN
    • 窗口函数(排名、累计等)
      • ROW_NUMBER():行号
      • RANK():排名
      • DENSE_RANK():密集排名
      • PARTITION BY:分区
    • 公共表表达式(CTE):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;

    5、视图和索引【建议学】

    • 视图:CREATE VIEW、DROP VIEW
    • 索引:CREATE INDEX、DROP INDEX
    • 索引类型:主键索引、唯一索引、普通索引、全文索引

    学习建议

    1)掌握多表连接是关键:左连接、内连接的区别一定要清楚,多画图理解两表连接的结果。

    2)多做复杂查询练习:找一些包含多表关联、分组统计、条件筛选的综合题目练习。

    3)理解子查询的执行顺序:子查询一般先执行,再被外层查询使用。

    4)窗口函数很强大:虽然语法复杂,但能解决很多排名、累计等问题,值得深入学习。

    学习资源

    • ⭐ SQL 进阶教程 - LeetCode 数据库题目:大量实战练习题
    • SQL 窗口函数详解:窗口函数专题

    面试题

    • ⭐ SQL 面试题 - 面试鸭

    阶段 3:SQL 性能优化

    学习目标:了解 SQL 查询的性能优化方法,能够编写高效的 SQL 语句,理解索引的原理和使用。

    知识点

    1、查询优化基础【必学】

    • 使用 EXPLAIN 分析查询计划
    • 理解查询的执行过程
    • 避免全表扫描
    • 减少子查询的使用(能用 JOIN 就用 JOIN)
    • 避免在 WHERE 子句中使用函数或表达式
    • 使用 LIMIT 限制返回结果

    2、索引优化【必学】

    • 索引的原理(B+ 树)
    • 何时需要创建索引
    • 索引的优缺点
    • 联合索引和最左前缀原则
    • 覆盖索引
    • 索引失效的场景

    3、SQL 编写最佳实践【建议学】

    • 避免 SELECT *,只查询需要的列
    • 合理使用 EXISTS 代替 IN
    • 使用 UNION ALL 代替 UNION(如果不需要去重)
    • 批量操作代替单条操作
    • 避免使用 OR,考虑使用 IN 或 UNION

    学习建议

    1)性能优化是经验积累的过程:不要死记硬背优化技巧,要理解背后的原理。

    2)多使用 EXPLAIN 分析:建议每写一个复杂查询,都用 EXPLAIN 看看执行计划,观察是否用到索引。

    3)索引不是越多越好:过多的索引会影响写入性能,要根据实际查询需求合理创建。

    4)结合具体数据库学习:不同数据库的优化策略可能不同,建议结合 MySQL 或 PostgreSQL 的优化专题深入学习。

    5)关注慢查询日志:实际工作中,通过分析慢查询日志来定位性能问题。

    学习资源

    • MySQL 索引和查询优化:索引原理和优化
    • SQL 调优实战:真实案例分析

    面试题

    • ⭐ SQL 面试题 - 面试鸭

    面试鸭刷题神器热门八股文

    阶段 4:SQL 实战应用

    学习目标:将 SQL 知识应用到实际项目中,结合具体的数据库系统进行实战练习。

    知识点

    1、结合具体数据库实战【必学】

    • 选择一个主流数据库深入学习(推荐 MySQL)
    • 学习数据库的安装和配置
    • 了解数据库的管理工具(如 Navicat、DBeaver、MySQL Workbench)
    • 实践数据库的备份和恢复

    2、实际业务场景练习【必学】

    • 用户管理系统(用户表、角色表、权限表)
    • 电商系统(商品表、订单表、用户表)
    • 学生管理系统(学生表、课程表、成绩表)
    • 博客系统(文章表、评论表、标签表)

    3、结合编程语言使用 SQL【建议学】

    • 在后端代码中执行 SQL(JDBC、MyBatis、Hibernate 等)
    • ORM 框架的使用
    • SQL 注入的防范

    学习建议

    1)从简单项目开始:先做一个简单的学生管理系统或博客系统,设计表结构并实现增删改查。

    2)关注表结构设计:良好的表结构设计是高效查询的基础,学习数据库设计三范式。

    3)参加开源项目:阅读开源项目中的数据库设计和 SQL 语句,学习优秀的实践经验。

    4)结合具体数据库深入:建议选择 MySQL 作为主攻方向,系统学习 MySQL 的特性和优化。更详细的内容可以参考 MySQL 数据库学习路线。

    学习资源

    • ⭐ SQL 之母开源项目:鱼皮的 SQL 学习项目,可以学习源码实现
    • ⭐ LeetCode 数据库题库:大量 SQL 实战题目
    • SQL Zoo:在线 SQL 练习平台
    • HackerRank SQL 题目:国外的 SQL 练习平台

    项目实战

    可以参考鱼皮的项目教程进行实战练习:

    • ⭐ 鱼皮的项目实战教程:包含多个完整项目,涉及数据库设计和 SQL 使用
    • SQL 之母 - 开源项目:纯前端实现的 SQL 学习网站

    阶段 5:求职备战

    SQL 是大部分技术岗位面试的必考内容,尤其是后端开发、数据分析等岗位。

    学习目标:熟练掌握常见的 SQL 面试题,能够快速准确地编写 SQL 语句,顺利通过 SQL 相关的面试环节。

    学习建议

    1)多刷 LeetCode 数据库题:LeetCode 的数据库题目涵盖了大部分面试考点,建议至少刷 50+ 道题。

    2)准备手写 SQL:面试时可能要求现场手写 SQL,要能快速写出正确的查询语句。常见考点包括:多表连接、分组统计、排名查询、去重等。

    3)理解 SQL 执行原理:面试官可能会问 SQL 的执行顺序、索引原理、查询优化等,要有深入理解。

    4)准备项目中的 SQL 经验:如果简历上的项目涉及数据库,要提前准备好如何讲解表设计、如何优化慢查询等。

    5)关注数据库特性:如果应聘特定数据库相关的岗位(如 MySQL DBA),要深入学习该数据库的特性和优化。

    6)多看真实面经:真实面经大全,了解不同公司对 SQL 的考察重点。

    更多求职干货:

    • 鱼皮的保姆级求职指南
    • 鱼皮的保姆级写简历指南
    • 编程导航的求职干货分享
    • 老鱼简历 - 写简历工具
    • 真实面经大全
    • 几百场真实面试视频
    • 1 对 1 AI 模拟面试
    • 面试题讲解视频 - 面试鸭 B 站账号

    面试考察形式

    面试时对 SQL 的考察主要有下面几种形式:

    1. 手写 SQL 查询:给定表结构和需求,现场编写 SQL 语句(最常见)
    2. 口述 SQL 思路:描述如何用 SQL 实现某个复杂查询
    3. SQL 优化:给一个慢查询,让你分析问题并优化
    4. 数据库设计:给定业务场景,设计合理的表结构
    5. 理论知识:询问索引原理、事务隔离级别、锁机制等

    经典面试题

    理论题

    1. 说说 SQL 的执行顺序?
    2. 什么是索引?索引有哪些类型?
    3. 索引在什么情况下会失效?
    4. INNER JOIN、LEFT JOIN、RIGHT JOIN 的区别?
    5. WHERE 和 HAVING 的区别?
    6. UNION 和 UNION ALL 的区别?
    7. 什么是事务?事务的 ACID 特性是什么?
    8. 如何优化慢查询?

    实践题

    1. 查询每个部门工资最高的员工【高频】
    2. 查询每个班级成绩排名前 3 的学生【高频】
    3. 查询连续登录 3 天以上的用户【高频】
    4. 删除重复数据,只保留 id 最小的一条
    5. 统计每个用户的累计消费金额
    6. 查询至少选了两门课程的学生
    7. 查询每个月的订单数量和总金额
    8. 实现分页查询(考虑性能优化)

    面试题库

    • ⭐ SQL 面试题 - 面试鸭:综合题库,包含所有 SQL 相关题目

    面试题讲解视频

    • 数据库面试题讲解 - 面试鸭:关注面试鸭 B 站账号

    加油各位鱼友们 💪🏻!

    程序员必备资源

    1)程序员学习交流圈:极客教程、实战项目、求职宝典

    2)程序员面试八股文:实习/校招/社招高频考点、企业真题解析

    3)程序员写简历神器:专业模板、丰富例句、直通面试

    4)AI 知识资源大全:前沿技术、最新 AI 资讯、提示词大全

    5)1 对 1 模拟面试:实习/校招/社招面试拿 Offer 必备