SQL 语句从基础到高级
SQLStructured Query Language结构化查询语言是关系型数据库的标准操作语言适用于 MySQL、Oracle、SQL Server、PostgreSQL 等主流数据库。本文将由浅入深从基础语法、核心操作、进阶查询到高级特性、实战优化全方位覆盖 SQL 常用语句附带可直接运行的实战案例零基础也能快速掌握。前置说明本文案例通用 90% 数据库少量差异化语法会单独标注所有案例基于通用数据表用户表、订单表、商品表演示贴合实际业务。一、SQL 基础认知与通用规范1.1 SQL 分类日常开发中核心使用 4 大类语句也是本文重点讲解内容DQL数据查询语言核心SELECT用于查询数据使用频率最高DML数据操作语言INSERT/UPDATE/DELETE用于增改删数据DDL数据定义语言CREATE/ALTER/DROP用于创建、修改、删除数据库、表、字段DCL数据控制语言GRANT/REVOKE用于权限管理1.2 通用语法规范SQL 语句不区分大小写关键字建议大写规范可读性每条语句以分号结尾单行注释-- 注释内容多行注释/* 注释内容 */字符串使用单引号内容字段别名可使用双引号或反引号二、SQL 基础操作2.1 DDL 数据库与表操作用于创建、修改、删除数据库和数据表是建库建表的基础。2.1.1 数据库操作sql-- 1. 创建数据库指定编码避免中文乱码 CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8mb4; -- 2. 查看所有数据库 SHOW DATABASES; -- 3. 使用/切换数据库 USE test_db; -- 4. 查看当前数据库 SELECT DATABASE(); -- 5. 删除数据库 DROP DATABASE IF EXISTS test_db;2.1.2 数据表操作sql-- 1. 创建数据表核心字段名数据类型约束 CREATE TABLE IF NOT EXISTS user ( id INT PRIMARY KEY AUTO_INCREMENT COMMENT 用户ID主键自增, username VARCHAR(50) NOT NULL COMMENT 用户名, age INT DEFAULT 18 COMMENT 年龄, gender CHAR(1) COMMENT 性别, create_time DATETIME DEFAULT NOW() COMMENT 创建时间, is_delete TINYINT DEFAULT 0 COMMENT 删除标记0未删除1已删除 ) ENGINEInnoDB DEFAULT CHARSETutf8mb4 COMMENT用户表; -- 2. 查看当前库所有表 SHOW TABLES; -- 3. 查看表结构 DESC user; -- 4. 修改表结构 -- 新增字段 ALTER TABLE user ADD COLUMN phone VARCHAR(11) COMMENT 手机号; -- 修改字段类型 ALTER TABLE user MODIFY COLUMN age TINYINT; -- 删除字段 ALTER TABLE user DROP COLUMN phone; -- 修改表名 ALTER TABLE user RENAME TO user_info; -- 5. 删除数据表 DROP TABLE IF EXISTS user_info;2.2 DML 数据增删改操作针对表中数据的新增、修改、删除日常业务高频操作。2.2.1 新增数据 INSERTsql-- 方式1指定字段插入 INSERT INTO user(username, age, gender) VALUES (张三, 22, 男); -- 方式2全字段插入需和表字段顺序一致 INSERT INTO user VALUES (NULL, 李四, 25, 女, NOW(), 0); -- 方式3批量插入高效推荐 INSERT INTO user(username, age, gender) VALUES (王五, 20, 男), (赵六, 23, 女);2.2.2 修改数据 UPDATE重要修改必须加 WHERE 条件否则更新全表sql-- 单字段修改 UPDATE user SET age 24 WHERE username 张三; -- 多字段修改 UPDATE user SET age 26, gender 男 WHERE id 2; -- 批量修改匹配多条条件数据 UPDATE user SET create_time NOW() WHERE age gt; 20;2.2.3 删除数据 DELETE重要删除必须加 WHERE 条件否则清空全表sql-- 条件删除单条/多条数据 DELETE FROM user WHERE id 3; -- 清空表数据保留表结构可回滚 DELETE FROM user; -- 快速清空表数据不可回滚、自增主键重置速度更快 TRUNCATE TABLE user;2.3 基础 DQL 查询语句SELECT 查询是 SQL 重中之重所有数据展示、统计、筛选都依赖此语句。2.3.1 基础查询语法sql-- 1. 查询所有字段 SELECT * FROM user; -- 2. 查询指定字段推荐避免冗余字段 SELECT id, username, age FROM user; -- 3. 字段起别名 AS可省略 SELECT id AS 用户ID, username 用户名, age 年龄 FROM user; -- 4. 去重查询 DISTINCT SELECT DISTINCT age FROM user; -- 5. 限制查询条数 LIMIT分页核心 SELECT * FROM user LIMIT 2; -- 查询前2条 SELECT * FROM user LIMIT 1,2; -- 从第2条开始查询2条分页公式LIMIT (page-1)*size, size2.3.2 条件查询 WHERE用于筛选符合条件的数据支持多种运算符比较、逻辑、模糊、范围等。sql-- 比较运算符、!、gt;、lt;、gt;、lt; SELECT * FROM user WHERE age gt; 20; SELECT * FROM user WHERE username ! 张三; -- 逻辑运算符AND、OR、NOT SELECT * FROM user WHERE age gt; 20 AND gender 男; SELECT * FROM user WHERE age lt; 18 OR age gt; 30; -- 范围查询 BETWEEN ... AND ... SELECT * FROM user WHERE age BETWEEN 20 AND 25; -- 枚举查询 IN SELECT * FROM user WHERE age IN (20,22,24); -- 空值判断 IS NULL / IS NOT NULL SELECT * FROM user WHERE phone IS NULL; SELECT * FROM user WHERE phone IS NOT NULL;2.3.3 模糊查询 LIKE通配符%匹配任意多个字符_匹配单个字符sql-- 用户名包含“张” SELECT * FROM user WHERE username LIKE %张%; -- 用户名以“李”开头 SELECT * FROM user LIKE 李%; -- 用户名第二个字为“五” SELECT * FROM user WHERE username LIKE _五%;2.3.4 排序查询 ORDER BYASC升序默认DESC降序sql-- 年龄升序 SELECT * FROM user ORDER BY age ASC; -- 年龄降序 SELECT * FROM user ORDER BY age DESC; -- 多字段排序年龄降序同龄则ID升序 SELECT * FROM user ORDER BY age DESC, id ASC;三、SQL 进阶核心操作3.1 聚合函数与分组查询聚合函数用于数据统计分组查询用于分类统计是报表、数据统计核心语法。3.1.1 常用聚合函数sql-- COUNT统计条数 SELECT COUNT(*) 总人数 FROM user; -- 统计所有数据 SELECT COUNT(age) 有效年龄人数 FROM user; -- 忽略NULL值 -- MAX/MIN最大/最小值 SELECT MAX(age) 最大年龄, MIN(age) 最小年龄 FROM user; -- SUM求和 SELECT SUM(age) 年龄总和 FROM user; -- AVG平均值 SELECT AVG(age) 平均年龄 FROM user;3.1.2 分组查询 GROUP BY语法规则SELECT后的非聚合字段必须出现在GROUP BY后HAVING用于分组后筛选替代 WHEREWHERE 不能用于分组后sql-- 按性别分组统计每组人数 SELECT gender, COUNT(*) 人数 FROM user GROUP BY gender; -- 按年龄分组统计每组人数筛选人数大于1的分组 SELECT age, COUNT(*) 人数 FROM user GROUP BY age HAVING 人数 gt; 1; -- 多字段分组按性别年龄分组统计 SELECT gender, age, COUNT(*) 人数 FROM user GROUP BY gender, age;3.2 多表联查实际业务中数据分散在多张表必须通过联查获取完整数据核心 4 种连接方式。 演示表用户表 user、订单表 orderuser_id 关联用户 ID3.2.1 内连接 INNER JOIN只查询两张表中匹配的数据无匹配则不显示sql-- 查询用户及对应的订单信息 SELECT u.username, o.order_id, o.order_price FROM user u INNER JOIN order o ON u.id o.user_id;3.2.2 左连接 LEFT JOIN以左表为基准左表数据全部展示右表无匹配则显示 NULL业务最常用sql-- 查询所有用户包含无订单的用户 SELECT u.username, o.order_id, o.order_price FROM user u LEFT JOIN order o ON u.id o.user_id;3.2.3 右连接 RIGHT JOIN以右表为基准右表数据全部展示左表无匹配则显示 NULLsql-- 查询所有订单包含无对应用户的订单数据 SELECT u.username, o.order_id, o.order_price FROM user u RIGHT JOIN order o ON u.id o.user_id;3.2.4 全连接 UNION合并两张表所有数据MySQL 无直接 FULL JOIN通过 UNION 实现sqlSELECT u.username, o.order_id FROM user u LEFT JOIN order o ON u.id o.user_id UNION SELECT u.username, o.order_id FROM user u RIGHT JOIN order o ON u.id o.user_id;3.3 子查询将一条 SQL 查询结果作为另一条 SQL 的参数分为单行子查询、多行子查询、嵌套子查询。3.3.1 单行子查询sql-- 查询年龄大于平均年龄的用户 SELECT * FROM user WHERE age gt; (SELECT AVG(age) FROM user);3.3.2 多行子查询IN/EXISTSsql-- IN匹配子查询返回的任意值 SELECT * FROM user WHERE id IN (SELECT user_id FROM order); -- EXISTS判断子查询是否有结果效率高于IN SELECT * FROM user u WHERE EXISTS (SELECT 1 FROM order o WHERE o.user_id u.id);3.3.3 派生表子查询FROM 后子查询sql-- 先统计各年龄人数再筛选人数大于1的记录 SELECT * FROM (SELECT age, COUNT(*) 人数 FROM user GROUP BY age) AS temp WHERE 人数 gt; 1;四、SQL 高级特性4.1 事务 Transaction事务用于保证数据一致性核心ACID 四大特性原子性、一致性、隔离性、持久性适用于转账、下单等多步数据操作场景。 MySQL InnoDB 引擎支持事务MyISAM 不支持。sql-- 1. 开启事务 START TRANSACTION; -- 2. 执行多条数据操作 UPDATE user SET age 23 WHERE id 1; UPDATE user SET age 21 WHERE id 2; -- 3. 提交事务数据永久生效 COMMIT; -- 回滚事务取消所有操作数据恢复原状 ROLLBACK;4.2 索引操作索引是提升查询效率的核心合理建索引可大幅优化 SQL 性能。sql-- 1. 查看表索引 SHOW INDEX FROM user; -- 2. 创建普通索引 CREATE INDEX idx_user_age ON user(age); -- 3. 创建唯一索引字段值唯一允许NULL CREATE UNIQUE INDEX idx_user_phone ON user(phone); -- 4. 创建联合索引 CREATE INDEX idx_user_age_gender ON user(age, gender); -- 5. 删除索引 DROP INDEX idx_user_age ON user;4.3 视图、存储过程、触发器4.3.1 视图 VIEW虚拟表封装复杂查询语句简化重复查询不存储真实数据sql-- 创建视图 CREATE VIEW v_user_order AS SELECT u.username, o.order_id, o.order_price FROM user u LEFT JOIN order o ON u.id o.user_id; -- 使用视图直接查询虚拟表 SELECT * FROM v_user_order; -- 删除视图 DROP VIEW IF EXISTS v_user_order;4.3.2 存储过程 PROCEDURE封装一段 SQL 逻辑可重复调用支持参数传递适合复杂批量操作sql-- 创建无参存储过程 DELIMITER // -- 修改语句结束符为// CREATE PROCEDURE get_user_list() BEGIN SELECT * FROM user WHERE is_delete 0; END // DELIMITER ; -- 恢复默认结束符 -- 调用存储过程 CALL get_user_list(); -- 删除存储过程 DROP PROCEDURE IF EXISTS get_user_list;4.3.3 触发器 TRIGGER监听表的增删改操作触发自动执行指定 SQL 逻辑sql-- 创建触发器新增用户后自动打印日志简易示例 DELIMITER // CREATE TRIGGER trigger_user_add AFTER INSERT ON user FOR EACH ROW BEGIN INSERT INTO log_table(content) VALUES (CONCAT(新增用户, NEW.username)); END // DELIMITER ; -- 删除触发器 DROP TRIGGER IF EXISTS trigger_user_add;4.4 窗口函数SQL 高级查询窗口函数是数据分析、排名、分组统计的高级用法不压缩行数区别于 GROUP BYMySQL8.0、Oracle、SQL Server 支持。4.4.1 排名函数sql-- ROW_NUMBER()连续排名1,2,3,4 -- RANK()跳跃排名1,2,2,4 -- DENSE_RANK()密集排名1,2,2,3 SELECT username, age, ROW_NUMBER() OVER(ORDER BY age DESC) 连续排名, RANK() OVER(ORDER BY age DESC) 跳跃排名, DENSE_RANK() OVER(ORDER BY age DESC) 密集排名 FROM user;4.4.2 分区窗口函数sql-- 按性别分区统计各性别年龄排名 SELECT username, gender, age, ROW_NUMBER() OVER(PARTITION BY gender ORDER BY age DESC) 性别内年龄排名 FROM user;五、SQL 实战优化与避坑指南5.1 高频错误避坑禁止全表更新 / 删除UPDATE/DELETE 必须加 WHERE 条件生产环境建议先 SELECT 验证条件SELECT * 慎用只查询业务需要的字段减少 IO 消耗GROUP BY 规范非聚合字段必须分组避免语法报错或数据错乱模糊查询前置 % 禁用LIKE % 张三 %、LIKE % 张三 无法走索引查询效率极低5.2 SQL 性能优化核心WHERE 条件优先过滤数据减少后续统计、联查的数据量联查字段、WHERE 条件字段、排序字段合理建立索引大表分页避免 LIMIT 100000,10使用主键偏移分页优化优先使用 EXISTS 替代 IN大数据量下效率差距明显避免在索引字段上使用函数、运算会导致索引失效六、常用 SQL 语句速查表汇总日常开发高频语句快速查阅使用基础查询SELECT 字段 FROM 表 WHERE 条件 LIMIT 条数统计查询SELECT 聚合函数 FROM 表 GROUP BY 字段 HAVING 条件多表联查JOIN 表 ON 关联条件 筛选条件数据操作INSERT/UPDATE/DELETE 配合 WHERE 精准操作性能优化索引优化、避免全表扫描、合理使用窗口函数 / 子查询

相关新闻

曝美团内部全面限用豆包大模型;OpenAI磋商将5%股份送给美国政府;任天堂回应“全员涨薪10%”传闻:这是2023年的事 | 极客头条

曝美团内部全面限用豆包大模型;OpenAI磋商将5%股份送给美国政府;任天堂回应“全员涨薪10%”传闻:这是2023年的事 | 极客头条

一分钟速览新闻点! 消息称美团内部全面限用豆包大模型,此前曾限用阿里云 Qwen 蔚来李斌毕业 30 年后回北大演讲:经历 6 次人生和事业大低谷 支付宝 AI 生活助理「阿宝」正式开启公测,全面取消邀请码限制 脉脉:1-5 月…

2026/7/8 2:43:32 阅读更多 →
使用claude code进行贪吃蛇游戏开发

使用claude code进行贪吃蛇游戏开发

初次使用claude code进行GUI游戏开发。(使用python语言)1.使用powershell打开指定目录2.输入claude命令打开3.输入自然语言描述需求4.根据效果和问题进行问题描述,要求大模型对代码进行修改。结果:

2026/7/8 2:43:32 阅读更多 →
继电器控制:从基础开关到智能灯控系统的完整实现方案

继电器控制:从基础开关到智能灯控系统的完整实现方案

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 这次我们来看一个很有意思的话题:用继电器控制台灯到底算不算智能灯控系统。很多人觉得这就是个简单的开关控制&#xff0…

2026/7/8 2:41:32 阅读更多 →

最新新闻

当 AI 生成的样式需要一间独立房间:Shadow DOM 与 CSS Modules 的样式隔离对决

当 AI 生成的样式需要一间独立房间:Shadow DOM 与 CSS Modules 的样式隔离对决

当 AI 生成的样式需要一间独立房间:Shadow DOM 与 CSS Modules 的样式隔离对决 一、深度引言与场景痛点 AI 生成的组件代码带着自己的样式行李——一段 CSS 声明打包在组件内部,颜色、间距、字号都是自给自足的。当这段代码进入设计系统仓库,…

2026/7/8 3:45:51 阅读更多 →
计算机二级-MySQL学习记录1

计算机二级-MySQL学习记录1

2026.7.7 学习了数据库技术的基本概念和方法,了解了什么是数据库,数据库的特点,什么是DBMS及其功能是什么,理解了数据库系统的特点、结构、数据模型,并且初步接触了关系数据库,并了解了其设计基础以及设计步…

2026/7/8 3:43:51 阅读更多 →
Mac NTFS写入权限完全解锁:开源工具Free-NTFS-for-Mac的5个实用技巧 | 2024指南

Mac NTFS写入权限完全解锁:开源工具Free-NTFS-for-Mac的5个实用技巧 | 2024指南

Mac NTFS写入权限完全解锁:开源工具Free-NTFS-for-Mac的5个实用技巧 | 2024指南 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mou…

2026/7/8 3:43:51 阅读更多 →
2026广州网站建设公司哪家好

2026广州网站建设公司哪家好

2026广州网站建设公司哪家好广州企业搜索本地小程序或网站建设公司时,通常同时关注沟通效率、交付周期和后续维护。但在 SaaS 工具、全国化平台和本地服务商并存的情况下,地域并不是唯一判断条件,企业仍需要把业务目标、人员能力和系统边界放…

2026/7/8 3:41:51 阅读更多 →
建筑装饰新宠!冲孔与雕花铝单板,轻奢质感打造高端空间

建筑装饰新宠!冲孔与雕花铝单板,轻奢质感打造高端空间

建筑装饰新宠!冲孔与雕花铝单板,轻奢质感打造高端空间 在高端建筑装饰领域,冲孔铝单板和雕花铝单板正成为备受青睐的选材。它们究竟有何优势,适用于哪些场景,与普通铝板又有何区别,定制时需要注意什么呢&am…

2026/7/8 3:41:50 阅读更多 →
FitMall-运动优选项目博客

FitMall-运动优选项目博客

FitMall 运动优选:一个完整健身电商平台的技术全解析 从零搭建的全栈健身电商平台,涵盖商品交易、AI 智能助手、社区互动、训练管理四大核心模块。本文将拆解其技术选型、架构设计、关键实现细节与工程经验。 目录 项目概览技术栈一览架构设计那些有意思…

2026/7/8 3:37:50 阅读更多 →

日新闻

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破

3大核心能力重塑《明日方舟》游戏体验:MAA自动化助手的革命性突破 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: …

2026/7/8 0:00:48 阅读更多 →
MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N+1 到批处理的全路径

MyBatis 批量操作深度优化——从 N1 到批处理的全路径 一、从"功能正确"到"性能可接受"——MyBatis 批量操作的三段式进化 MyBatis 在日常增删改查场景中几乎是无感的——实体映射直观、SQL 控制灵活。但当数据量从千级上升到十万级、百万级,许…

2026/7/8 0:00:48 阅读更多 →
工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

工业负载控制方案:TPD2015FN与PIC18F45K22应用解析

1. 工业负载控制方案概述在工业自动化、电机驱动和照明控制等高需求场景中,可靠地控制电感和电阻负载是核心挑战之一。TPD2015FN作为东芝的8通道高端智能功率开关IC,配合PIC18F45K22微控制器,能够构建一套稳定、高效的负载控制系统。这套组合…

2026/7/8 0:02:48 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻