SQL入门零基础保姆级教程 从查询到联表 看懂日常开发99%场景
我给你写一套真正新手能从零看懂、看完直接精通日常开发99%场景的《SQL 从入门到精通完整版教程》。 不讲废话、不讲学术概念,全部通俗大白话 + 可直接复制代码 + 避坑点 + 实战逻辑。 适配:MySQL / SQLite / PbootCMS / 网站运维 / 后端开发通用。
SQL 从入门到精通【零基础保姆级完整版】
适合:完全零基础、站长、运维、PHP开发者、PbootCMS使用者 学完效果:能独立写查询、筛选、联表、更新、删除、排查数据、优化语句,胜任99%网站日常SQL工作
前言:SQL到底是什么?
SQL 就是 操作数据库的语言。 你网站所有文章、会员、下载记录、配置,全部存在数据库里。 你要查数据、改数据、删数据、统计数据,全部靠 SQL。
SQL 只有 4大核心动作(记住这4个就学会80%)
SELECT 查询(最常用):看数据
INSERT 新增:加数据
UPDATE 更新:改数据
DELETE 删除:删数据
所有复杂SQL,都是这4句拼接出来的。
第一章:最基础语法规则(新手90%报错原因)
1、固定规则(必须记住)
语句结尾 英文分号 ;
字符串用 单引号 '内容',不要双引号、不要中文引号
大小写不敏感(select=SELECT)
空格随便加,不影响执行
字段不能用中文,表名不能空格
2、最简单万能模板
SELECT 字段 FROM 表名 WHERE 条件;
第二章:SELECT 查询(最核心、最常用)
1、查询整张表所有数据
SELECT * FROM ay_content;
* = 代表所有字段
2、只查指定字段(推荐,速度快)
SELECT id,title,source,scode FROM ay_content;
3、WHERE 条件筛选(重中之重)
等于 =
SELECT * FROM ay_content WHERE source='本站';
不等于 !=
SELECT * FROM ay_content WHERE source!='本站';
大于、小于
SELECT * FROM ay_content WHERE id>100;
AND 并且、OR 或者
-- 同时满足两个条件 SELECT * FROM ay_content WHERE source='本站' AND scode=14; -- 满足任意一个 SELECT * FROM ay_content WHERE scode=14 OR scode=15;
4、IN 多值匹配(替代一堆OR)
SELECT * FROM ay_content WHERE scode IN(14,15,16);
5、模糊查询 LIKE
% = 任意字符
-- 标题包含“软件”两个字 SELECT * FROM ay_content WHERE title LIKE '%软件%'; -- 以“教程”结尾 SELECT * FROM ay_content WHERE title LIKE '%教程';
6、trim() 去除空格(解决你查不到数据最大坑)
数据库很多内容带隐形空格,肉眼看不见但匹配不到
SELECT * FROM ay_content WHERE trim(source)='本站';
7、排序 ORDER BY
-- id 从大到小(最新的在前) SELECT * FROM ay_content ORDER BY id DESC; -- 从小到大 SELECT * FROM ay_content ORDER BY id ASC;
8、限制条数 LIMIT
-- 只取前10条 SELECT * FROM ay_content LIMIT 10;
9、统计数量 COUNT
-- 统计一共有多少条符合条件的数据 SELECT COUNT(*) FROM ay_content WHERE source='本站';
第三章:UPDATE 更新数据(改数据)
基础模板
UPDATE 表名 SET 字段='值' WHERE 条件;
实战1:单条件更新
UPDATE ay_content SET source='互联网' WHERE source='本站';
实战2:多条件(你刚才的需求)
UPDATE ay_content SET source='互联网' WHERE trim(source)='本站' AND scode IN(14,15);
⚠️ 新手第一大忌:忘记 WHERE
-- 绝对不要写!!! UPDATE ay_content SET source='本站';
不带 WHERE = 整张表所有数据全部被改掉,无法恢复!
第四章:DELETE 删除数据
安全删除(带条件)
DELETE FROM ay_content WHERE id=100;
高危提醒
永远不要执行:
DELETE FROM ay_content; -- 清空整张表
第五章:高级核心:联表查询 JOIN(你刚才问的重点)
1、先记住一句话终极真理
左连接 LEFT JOIN:左表数据全部保留,右表有就显示、没有就空
内连接 INNER JOIN:两边都匹配上才显示,缺一个就消失
2、PbootCMS 标准双表关联(ay_content + ay_extra_field)
关联关系:ay_content.id = ay_extra_field.contentid
最推荐:LEFT JOIN 万能写法(99%场景用这个)
SELECT c.*,e.* FROM ay_content c LEFT JOIN ay_extra_field e ON c.id = e.contentid WHERE trim(c.source)='本站' AND c.scode IN(14,15);
别名解释
c = ay_content(主表)
e = ay_extra_field(扩展附表)
3、为什么你必须用 LEFT JOIN?
因为:很多文章没有自定义扩展字段,ay_extra_field 里根本没有数据
INNER JOIN:这些文章直接消失
LEFT JOIN:文章保留,扩展字段空白,不丢数据
4、JOIN 超级致命坑(新手必踩)
错误写法(左连接失效)
WHERE e.xxx = 'xx'
右表字段不能放 WHERE 后面,会把空数据过滤掉,直接变成内连接!
正确写法:右表条件放 ON 后面
LEFT JOIN ay_extra_field e ON c.id=e.contentid AND e.xxx='xx'
第六章:子查询(高级玩家必备)
场景:只更新「在扩展表里存在的文章」
UPDATE ay_content SET source='互联网' WHERE id IN ( SELECT DISTINCT contentid FROM ay_extra_field );
含义: 先查扩展表里所有文章ID,再更新主表对应数据
第七章:日常开发高频万能语句(直接收藏)
1、查指定分类、指定来源、最新20条
SELECT * FROM ay_content WHERE scode=14 AND trim(source)='本站' ORDER BY id DESC LIMIT 20;
2、统计每个分类文章数量
SELECT scode,COUNT(*) FROM ay_content GROUP BY scode;
3、批量替换字段内容(超级常用)
UPDATE ay_content SET source='本站' WHERE source='互联网';
第八章:新手最完整避坑手册(99%报错原因)
1、查不到数据 99%原因
字段有空格 → 用 trim()
中英文引号混用
OR/AND 优先级混乱,没加括号
JOIN 用反了(用了内连接丢数据)
2、更新错数据原因
没写 WHERE
WHERE 条件写错
没先 SELECT 验证直接 UPDATE
3、联表错乱原因
右表筛选条件写在 WHERE 里
第九章:新手标准操作流程(永远不翻车)
任何修改数据操作,必须遵守顺序:
先 SELECT 查询,确认条数、数据对不对
确认无误,再改成 UPDATE / DELETE
小范围测试 → 再批量执行
示范:
-- 1.先查 SELECT * FROM ay_content WHERE trim(source)='本站' AND scode IN(14,15); -- 2.没问题再改 UPDATE ay_content SET source='互联网' WHERE trim(source)='本站' AND scode IN(14,15);
第十章:学完这套你达到的水平
独立写所有网站筛选、列表、统计 SQL
熟练双表联查、主附表关联
不会再出现「查不到数据、改错数据、联表丢数据」
完全够用:PbootCMS、WordPress、企业站、运维、后端开发
终极一句话总结SQL核心
查数据用 SELECT
改数据用 UPDATE(必带WHERE)
多条件用 AND/OR/IN
联表优先 LEFT JOIN
所有操作:先查后改,永不翻车
需要我再给你整理一份**PB网站专用高频SQL速查表(直接复制即用)**吗?