零基础学SQL:三小时笔记带你掌握核心查询语句 简介这份资源是B站Mosh老师SQL三小时入门课程的配套笔记以PDF形式整理面向零基础或希望系统梳理SQL核心语法的开发者与数据分析初学者。内容覆盖SQL基础知识、SELECT子句、WHERE条件筛选、AND/OR/NOT逻辑操作符以及IN、BETWEEN、LIKE、REGEXP等常用操作符的语法与用法帮助读者快速建立查询语句的书写框架。资源包内共1个PDF文件大小约2.43MB轻量便携适合随时查阅与打印。目前已有976人学习下载说明其在入门群体中具有一定认可度。笔记以速查表形式呈现条理清晰便于对照练习与复习可作为学习Mosh视频课程时的辅助材料也可独立用于日常SQL语句的快速检索与巩固适合需要夯实查询基础、提升数据库操作熟练度的读者参考使用。1. 零基础学 SQL三小时笔记到底能带你走多远很多人第一次听到“数据库”三个字脑子里浮现的是一排排黑色屏幕、密密麻麻的代码然后本能地觉得自己学不会。其实你每天都在跟数据库打交道——手机通讯录按姓氏排序、购物 App 里筛选价格区间、外卖软件按距离列出商家背后都是一句句 SQL 在干活。SQL 就是跟数据库对话的语言你告诉它“我要什么”它把结果端到你面前。这份笔记来自一套三小时的入门视频课把 SQL 最核心的查询语句从头到尾串了一遍包括 SELECT、WHERE、ORDER BY、JOIN 这些你以后每天都会用到的操作。它适合完全没碰过数据库的新手也适合学过一点但总记不住语法的人。你不需要先学编程不需要装复杂的开发环境跟着笔记敲一遍就能自己查出想要的数据。2. 先搞懂 SQL 到底在干什么从一张表说起2.1 数据库不是黑匣子它就是一堆 Excel 表你可以把数据库想象成一个超级 Excel 文件里面有很多张表table每张表有行有列。列叫字段column比如first_name、points行叫记录record比如一个客户的所有信息。SQL 就是你用来翻这个 Excel 的遥控器。你不需要知道数据存在硬盘的哪个扇区也不需要管它用了什么索引结构只要写一句SELECT * FROM customers它就把 customers 表里所有行所有列都捞出来给你看。这份笔记里反复出现的sql_store就是一个数据库的名字customers、orders就是里面的表。你入门阶段要做的就是学会用几把“钥匙”打开不同的门取出你要的那部分数据。2.2 为什么建议新手从 SELECT 和 WHERE 开始SQL 语句有几十种但日常工作中八成以上的操作只围绕两个动作查和筛。查就是 SELECT筛就是 WHERE。笔记里第一个例子就是这两者的组合-- 从 customers 表里选出所有列 -- 条件是 state 等于 CA -- 结果按 first_name 排序只取前 3 条 SELECT * FROM customers WHERE state CA ORDER BY first_name LIMIT 3;这段代码的意思是去 customers 表找到 state 是 CA 的那些行按 first_name 从小到大排好最后只给我看前三条。*代表所有列WHERE后面跟筛选条件ORDER BY控制排序LIMIT限制返回数量。你第一次跑的时候可能会想为什么不是SELECT first_name, state因为*最省事先看到全部数据心里有底了再挑列。入门阶段不要追求写得多优雅先让结果出来再慢慢优化。2.3 三小时笔记的知识地图长什么样这份笔记的目录本身就是一条很合理的学习路径先学 SELECT 和 WHERE 把数据查出来再学逻辑运算符AND、OR、NOT组合条件接着用 IN、BETWEEN、LIKE、REGEXP 做更灵活的匹配然后处理空值IS NULL再学排序和限制条数最后进入多表查询JOIN、UNION和插入数据INSERT。你不需要一次全记住按这个顺序走每学一个点就打开数据库敲一遍三小时足够你把核心骨架搭起来。笔记里还特别标注了 SQL 不区分大小写但 MySQL 里每条语句必须以分号结尾——这个细节新手最容易翻车少一个分号整段代码就卡住不动。3. 第一个能跑的查询手把手带你敲出结果3.1 准备一个能写 SQL 的地方你不需要装完整的 MySQL 服务器入门阶段用在线 SQL 练习环境或者轻量级工具就行。打开任意一个支持 MySQL 语法的在线编辑器你会看到一个输入框和一个运行按钮。第一步永远是选数据库-- 告诉数据库我要用 sql_store 这个库 USE sql_store;USE就是切换当前操作的数据库相当于在 Excel 里点开某个工作表。如果不写这一句后面所有表名都会找不到。执行完没有报错就说明你已经在 sql_store 里面了。3.2 写出你的第一条 SELECT 语句接着敲下面这行-- 查询 customers 表的所有数据 SELECT * FROM customers;点击运行你会看到一张表格列有 customer_id、first_name、last_name、birthdate、phone、address、city、state、points。这就是 customers 表的全貌。SELECT后面跟你要的列*是通配符表示“全部”FROM后面跟表名。注意语句末尾的分号在 MySQL 里它是命令结束的标志少了它编辑器会一直等你继续输入。如果你只想要姓名和积分把*换成具体列名-- 只查看 first_name 和 points 两列 SELECT first_name, points FROM customers;列名之间用逗号隔开顺序就是你希望结果里列出现的顺序。这一步跑通你就已经完成了 SQL 最核心的动作——从数据库里取数据。3.3 加上 WHERE让查询听你的话全表数据太多你通常只关心一部分。比如只看积分大于 1000 的客户-- 筛选 points 大于 1000 的客户 SELECT * FROM customers WHERE points 1000;WHERE后面跟条件表达式是大于是大于等于是小于是小于等于是等于和!都是不等于。字符串要用单引号包起来比如WHERE state CA。日期也类似WHERE birthdate 1990-01-01。如果你想同时满足两个条件用AND连接满足任意一个就行用OR想否定一个条件用NOT。笔记里给了一个很典型的例子-- 生日在 1990 年之后 并且 积分大于 1000 SELECT * FROM customers WHERE birthdate 1990-01-01 AND points 1000;把AND换成OR结果集会变大因为只要满足其中一个条件就会被选中。NOT的写法是WHERE NOT (birthdate 1990-01-01)意思是生日不在 1990 年之后。这三个逻辑运算符你多试几次就能感受到它们对结果的影响。4. 把查询写得更聪明排序、去重与模糊匹配4.1 ORDER BY 和 LIMIT 配合使用数据查出来是乱序的你想按积分从高到低看就用ORDER BY points DESC。DESC是降序ASC是升序默认就是升序可以不写。笔记里有一个多列排序的例子-- 先按 state 升序排state 相同的再按 first_name 降序排 SELECT * FROM customers ORDER BY state, first_name DESC;LIMIT用来限制返回条数LIMIT 3就是只给前三条。它还可以跳过若干条再取比如LIMIT 6, 3表示跳过前 6 条从第 7 条开始取 3 条。这个用法在分页场景里很常见你以后做网页列表翻页时一定会用到。4.2 DISTINCT 去重和 IN 批量匹配有时候你只想知道有哪些不同的州而不是每个客户的具体信息这时候用DISTINCT-- 查看 customers 表里出现过哪些不重复的 state SELECT DISTINCT state FROM customers;结果里每个州只出现一次。如果你要筛选多个特定值比如只看 VA、NY、CA 三个州的客户用IN比写三个OR更简洁-- 筛选 state 是 VA、NY 或 CA 的客户 SELECT * FROM customers WHERE state IN (VA, NY, CA);IN后面的括号里可以放任意多个值用逗号隔开。BETWEEN则是处理范围比如WHERE points BETWEEN 100 AND 200等价于points 100 AND points 200包含边界值。4.3 LIKE 和 REGEXP处理不精确的文本你不可能每次都记得完整的名字所以需要模糊匹配。LIKE配合两个通配符使用%代表任意多个字符_代表恰好一个字符。比如找 first_name 以 b 开头的客户-- first_name 以 b 开头后面可以是任意字符 SELECT * FROM customers WHERE first_name LIKE b%;如果写LIKE b_就只匹配两个字符且以 b 开头的名字。REGEXP比 LIKE 更强大支持正则表达式。笔记里给了几个实用例子WHERE first_name REGEXP ^a找以 a 开头的WHERE first_name REGEXP ey$|on$找以 ey 或 on 结尾的WHERE first_name REGEXP b[ru]找包含 b 后面跟着 r 或 u 的。^表示开头$表示结尾|是或[abc]匹配其中任意一个字符[a-d]匹配 a 到 d 范围内的字符。这些符号第一次看会有点晕你只需要先记住^和$的用法其他的遇到再查。4.4 空值判断和插入数据数据库里有些字段是空的比如客户没留电话phone列就是 NULL。注意 NULL 不能用判断必须用IS NULL-- 找出没有填写电话号码的客户 SELECT * FROM customers WHERE phone IS NULL;反过来IS NOT NULL就是找填了电话的。最后你不仅要会查还要会往表里加数据。INSERT INTO的写法如下-- 向 customers 表插入一条新记录 INSERT INTO customers(first_name, phone, points) VALUES (Mosh, NULL, DEFAULT);括号里指定要填的列VALUES后面按顺序给值。NULL表示空DEFAULT表示用表定义的默认值。一次插入多条就写多组括号用逗号隔开。执行完再用SELECT * FROM customers看一眼新记录就在里面了。5. 新手最容易踩的坑排查与避坑指南5.1 分号漏写整段代码卡住不动现象敲完语句点运行编辑器没反应或者提示语法错误指向末尾。原因MySQL 要求每条语句以分号结尾漏了分号它以为你还没写完。解决养成习惯每写完一句先补分号再换行。如果已经卡住在输入框末尾补一个;再运行。5.2 字符串引号用错条件永远不成立现象WHERE state CA在某些环境报错或者查不到任何数据。原因SQL 里字符串标准写法是单引号双引号在部分数据库里被当作列名或标识符。解决统一用单引号包字符串比如CA、1990-01-01。数字不需要引号直接写1000。5.3 JOIN 之后数据变多以为查错了现象customers表只有 10 行JOIN 之后结果有 30 行。原因一个客户可能有多个订单JOIN 会把匹配的每一组都列出来这是正常行为。解决先理解 JOIN 是“按条件拼接两张表”行数增加说明关联关系是一对多。如果只想要客户信息用SELECT DISTINCT c.*去重或者先想清楚业务上到底要什么。5.4 NULL 用等号判断结果永远为空现象WHERE phone NULL查不到任何记录。原因NULL 代表“未知”它不等于任何值包括它自己。解决改用IS NULL或IS NOT NULL。这个坑几乎每个新手都会踩一次记住 NULL 是特殊状态不能用常规比较运算符。5.5 忘记 USE 数据库表名找不到现象运行SELECT * FROM customers提示表不存在。原因当前没有选中任何数据库或者选错了库。解决在查询前先执行USE sql_store;确认左上角或状态栏显示的数据库名是你想要的。如果表名拼写错误也会报同样的错顺便检查一下表名。6. 下一步怎么走从三小时笔记到真正会用 SQL你跟着上面这些例子敲完已经摸到了 SQL 的核心骨架。接下来不要急着去啃厚书先把这份笔记里的每个操作自己改一改参数跑一遍。比如把WHERE points 1000改成WHERE points BETWEEN 500 AND 1500把ORDER BY state改成ORDER BY points DESC, state ASC看看结果有什么变化。改参数是成本最低的练习方式你不需要理解底层原理只需要观察输入和输出的对应关系。然后把 JOIN 单独拿出来多练几次。笔记里给了 INNER JOIN、LEFT JOIN、USING 和 CROSS JOIN 的写法你可以在customers和orders两张表上反复试先查所有客户及其订单再查没有下过订单的客户用 LEFT JOIN 加WHERE o.customer_id IS NULL最后试试 CROSS JOIN 把颜色和尺寸组合起来。JOIN 是 SQL 从单表操作跨向多表操作的关键一步多花半小时在这里后面学子查询和视图会轻松很多。再往后你可以按这个顺序补子查询在 WHERE 里嵌套 SELECT、聚合函数COUNT、SUM、AVG、GROUP BY、创建表和修改表结构CREATE TABLE、ALTER TABLE、索引的基本概念。这些内容这份三小时笔记没有深入展开但你已经有了查询基础学起来不会觉得突兀。入门阶段最怕的是东看一点西看一点最后连一条完整的查询都写不顺。你手里这份笔记的好处是它把最常用的语句按使用频率排好了你顺着敲一遍就相当于把 SQL 的日常操作过了一遍。我自己刚开始学的时候总想着把所有的语法都背下来再动手结果背了三天就放弃了。后来改成每天只练一个点比如今天只练 WHERE 的多种条件组合明天只练 ORDER BY 和 LIMIT 的配合反而记得牢。从那以后我每次学新东西都强制自己先跑通一个最小例子再慢慢加复杂度。希望这份笔记也能帮你迈出第一步别怕报错报错就是数据库在告诉你哪里没写对。本文还有配套的精品资源点击获取