
作为程序员、数据分析从业者甚至是产品运营SQL都是必须掌握的核心技能。不管是后端开发对数据库增删改查还是数据分析提取业务数据本质都是在写SQL语句。很多新手觉得SQL难其实是没有理清逻辑。SQL的核心逻辑非常简单所有基础操作都围绕增(INSERT)、删(DELETE)、改(UPDATE)、查(SELECT)四大核心展开其中查询语句是重中之重占据日常使用的90%以上。今天这篇博客我将从零开始梳理最常用、最实用的基础SQL语句搭配通俗易懂的示例看完就能直接上手实操一、SQL前置基础认知1. 什么是SQLSQLStructured Query Language结构化查询语言是用于操作关系型数据库MySQL、Oracle、SQL Server等的标准化语言专门用来实现数据库数据的查询、新增、修改、删除、管理等操作。2. 核心分类新手必记日常开发99%的场景只用掌握DML数据操作语言也就是我们常说的增删改查查询SELECT读取数据库数据使用频率最高新增INSERT向数据表添加新数据修改UPDATE更新数据表已有数据删除DELETE删除数据表数据其他DDL数据库结构定义、DCL权限管理语句新手入门阶段只需简单了解即可。3. 通用规范SQL语句不区分大小写select和SELECT效果一致建议关键字大写可读性更强每条语句以分号 ;结尾字符串数据用单引号包裹数字无需引号可随意换行、空格不影响语句执行后文所有示例均基于常用的用户表 userid、username、age、gender、create_time演示贴合真实业务场景。二、核心重点SELECT 查询语句查询是SQL的核心所有数据提取、统计、筛选都依赖SELECT语法灵活且用法最多我们从基础到常用进阶逐一讲解。1. 基础查询查询指定字段数据是最常用的基础写法-- 查询表中所有字段数据* 代表所有字段 SELECT * FROM user; -- 查询指定字段用户名、年龄 SELECT username, age FROM user;2. 去重查询 DISTINCT查询结果中去除重复数据只展示唯一值-- 查询用户所有唯一的年龄 SELECT DISTINCT age FROM user;3. 条件查询 WHERE重中之重通过条件筛选符合要求的数据支持多种运算符、、、!、AND、OR、IN、LIKE等。-- 查询年龄为20岁的用户 SELECT * FROM user WHERE age 20; -- 查询年龄大于18岁的成年用户 SELECT * FROM user WHERE age 18; -- 查询年龄在18-30岁之间的用户 SELECT * FROM user WHERE age 18 AND age 30; -- 查询性别为男 或 年龄30岁的用户 SELECT * FROM user WHERE gender 男 OR age 30; -- 查询年龄为18、20、25岁的用户 SELECT * FROM user WHERE age IN (18,20,25); -- 模糊查询用户名包含“张”的用户 SELECT * FROM user WHERE username LIKE %张%; -- 模糊查询用户名以“李”开头 SELECT * FROM user WHERE username LIKE 李%;4. 排序查询 ORDER BY对查询结果进行排序ASC升序默认DESC降序-- 按年龄升序排序从小到大 SELECT * FROM user ORDER BY age ASC; -- 按创建时间降序排序最新用户在前 SELECT * FROM user ORDER BY create_time DESC;5. 分页查询 LIMIT用于限制查询数据条数解决数据过多加载缓慢的问题是项目分页功能的核心-- 查询前10条数据 SELECT * FROM user LIMIT 10; -- 分页第1页每页10条偏移量0条数10 SELECT * FROM user LIMIT 0,10; -- 分页第2页每页10条偏移量10条数10 SELECT * FROM user LIMIT 10,10;6. 聚合函数统计用于数据统计、计算常用5大聚合函数COUNT计数、SUM求和、AVG平均值、MAX最大值、MIN最小值-- 统计用户总数量 SELECT COUNT(*) FROM user; -- 统计所有用户的年龄总和 SELECT SUM(age) FROM user; -- 计算用户平均年龄 SELECT AVG(age) FROM user; -- 查询最大年龄、最小年龄 SELECT MAX(age), MIN(age) FROM user;7. 分组查询 GROUP BY根据指定字段分组统计常和聚合函数搭配使用HAVING用于筛选分组后的结果WHERE筛选分组前数据-- 按性别分组统计每种性别的用户数量 SELECT gender, COUNT(*) AS user_num FROM user GROUP BY gender; -- 按年龄分组筛选出用户数量大于2的年龄组 SELECT age, COUNT(*) AS user_num FROM user GROUP BY age HAVING user_num 2;三、新增语句INSERT用于向数据表中添加新数据支持单条、多条新增-- 单条数据新增指定字段 INSERT INTO user (username, age, gender, create_time) VALUES (张三, 22, 男, NOW()); -- 多条数据批量新增高效写法推荐 INSERT INTO user (username, age, gender, create_time) VALUES (李四, 25, 女, NOW()), (王五, 28, 男, NOW()); -- 不指定字段新增必须按表字段顺序传值 INSERT INTO user VALUES (NULL, 赵六, 23, 女, NOW());四、修改语句UPDATE更新数据表中已有数据务必加WHERE条件不加条件会更新全表数据属于高危操作-- 修改指定用户的年龄 UPDATE user SET age 24 WHERE username 张三; -- 同时修改多个字段 UPDATE user SET age 26, gender 女 WHERE id 2; -- 高危无WHERE条件会更新全表所有数据禁止随意使用 UPDATE user SET age 20;五、删除语句DELETE删除数据表数据同样必须携带WHERE条件否则清空全表数据-- 删除指定用户数据 DELETE FROM user WHERE username 赵六; -- 删除年龄小于18岁的用户 DELETE FROM user WHERE age 18; -- 高危无WHERE条件清空整张表数据 DELETE FROM user;六、新手必避的5个SQL坑很多新手写SQL报错、出bug基本都是踩了这些基础坑一定要牢记UPDATE/DELETE 不带WHERE条件直接操作全表数据生产环境极易造成数据事故操作前务必核对条件模糊查询 %前缀过多LIKE %张三 无法走索引数据量大时查询极慢尽量避免左模糊GROUP BY 字段不规范分组查询时非聚合字段必须出现在GROUP BY中否则会报错字符串未加单引号字符、时间类型数据必须用包裹数字类型无需引号混用会直接报错忽略NULL值判断判断字段为空不能用 NULL必须用 IS NULL / IS NOT NULL七、总结SQL的基础核心完全围绕增删改查展开其中SELECT查询是学习和使用的重点90%的工作场景只需要熟练掌握条件筛选、排序、分页、聚合统计、分组查询即可满足需求。新手学习不用死记硬背建议多动手实操结合业务场景写语句熟练掌握基础后再进阶学习多表联查、子查询、索引优化等高阶内容。后续我会继续更新SQL高阶用法、实战技巧、性能优化等内容感兴趣可以持续关注