一、SELECT 进阶指定列与表达式查询1. 指定列查询我们可以只查询表中需要的列而不是*代表的所有列这样更高效sql-- 查询学生的 id、姓名和语文成绩 SELECT id, name, chinese FROM exam;列名的顺序可以随意排列与表定义的顺序无关。只查询需要的列能减少数据传输量提升查询效率。2. 查询字段为表达式在SELECT子句中我们可以对列进行运算得到临时的计算结果不会修改表中真实数据sql-- 给所有学生的语文成绩加10分仅展示不修改原数据 SELECT id, name, chinese 10 FROM exam; -- 计算三科总分 SELECT id, name, chinese math english FROM exam;执行流程从物理表中读取原始数据在内存中对列值进行运算合并表达式结果返回给客户端3. 别名AS为了让查询结果的表头更易读可以给列或表达式起别名sql-- 给总分表达式起别名 SELECT id, name, chinese math english AS 总分 FROM exam; -- AS 关键字可以省略 SELECT id, name, chinese math english 总分 FROM exam; -- 别名含空格时必须加引号 SELECT id, name, chinese math english AS 总分 三科 FROM exam;4. 去重查询DISTINCT使用DISTINCT可以去除结果集中的重复记录sql-- 查询所有不重复的数学成绩 SELECT DISTINCT math FROM exam; -- 多列去重要求所有列的值都相同才会被判定为重复 SELECT DISTINCT id, math FROM exam;⚠️ 注意生产环境中不要不加限制地使用SELECT *或SELECT DISTINCT数据量过大时会严重消耗服务器资源。二、WHERE 条件查询WHERE子句用于过滤数据只返回满足条件的记录是查询中最核心的部分。1. 比较运算符表格运算符说明示例等于english 60/大于 / 小于math 80/大于等于 / 小于等于chinese 70!/不等于id 5BETWEEN ... AND ...范围匹配包含边界math BETWEEN 70 AND 90IN (v1, v2...)集合匹配math IN (78, 79, 99)LIKE模糊匹配name LIKE 孙%IS NULL/IS NOT NULL判断是否为 NULLenglish IS NULL 特别注意在 MySQL 中判断 NULL 必须用IS NULL或IS NOT NULL不能用 NULL因为NULL NULL的结果是 NULL不是 TRUE。! NULL的结果永远是 NULL不会匹配到任何记录。2. 逻辑运算符用于组合多个查询条件表格运算符说明示例AND逻辑与两个条件都为真结果才为真chinese 80 AND english 80OR逻辑或只要一个条件为真结果就为真chinese 90 OR english 90NOT逻辑非取反math NOT IN (78, 79, 99)3. 经典案例查询英语成绩低于 60 分的同学sqlSELECT name, english FROM exam WHERE english 60;查询语文成绩大于英语成绩的同学sqlSELECT name, chinese, english FROM exam WHERE chinese english;查询总分在 200 分以上的同学sqlSELECT name, chinese math english AS 总分 FROM exam WHERE chinese math english 200;⚠️ 注意WHERE子句中不能使用别名因为 SQL 执行顺序是FROM → WHERE → SELECT别名在WHERE执行时还未定义。4. 模糊查询LIKELIKE用于进行部分匹配配合通配符使用%匹配任意长度包括 0的任意字符_匹配任意单个字符sql-- 查询姓孙的同学 SELECT name FROM exam WHERE name LIKE 孙%; -- 查询名字中包含明的同学 SELECT name FROM exam WHERE name LIKE %明%; -- 查询名字以羽结尾且名字长度为2的同学 SELECT name FROM exam WHERE name LIKE _羽;⚠️ 性能提示LIKE %xxx或LIKE %xxx%会导致索引失效查询效率较低应尽量避免。三、排序与分页查询1. 排序查询ORDER BY使用ORDER BY对结果集进行排序默认是升序ASC也可以指定降序DESCsql-- 按数学成绩升序排列默认 ASC SELECT * FROM exam ORDER BY math; -- 按总分降序排列 SELECT id, name, chinese math english AS 总分 FROM exam ORDER BY 总分 DESC; -- 多列排序先按语文降序再按数学升序 SELECT * FROM exam ORDER BY chinese DESC, math ASC;排序可以基于列名也可以基于别名或表达式。SQL 执行顺序FROM → WHERE → SELECT → ORDER BY所以ORDER BY中可以使用别名。2. 分页查询LIMIT当数据量很大时需要分页展示LIMIT子句用于限制返回的行数sql-- 只查询前3条记录 SELECT * FROM exam LIMIT 3; -- 从第4条记录开始查询5条分页页码2每页5条 SELECT * FROM exam LIMIT 5 OFFSET 3; -- 等价写法LIMIT 偏移量, 条数 SELECT * FROM exam LIMIT 3, 5;LIMIT row_count返回前row_count条记录。LIMIT offset, row_count从offset位置开始返回row_count条记录。分页公式LIMIT (页码-1)*每页条数, 每页条数。四、MySQL 配置文件与执行顺序拓展1. MySQL 配置文件my.iniMySQL 服务启动时会读取my.ini或my.cnf配置文件作为默认设置ini[mysqld] # 设置默认字符集 character-set-serverutf8mb4 # 设置默认存储引擎 default-storage-engineInnoDB # 设置端口号 port3306修改配置后需要重启 MySQL 服务才能生效。客户端与服务器的字符集要保持一致否则会出现乱码。2. SQL 执行顺序理解 SQL 的执行顺序能帮我们写出更高效的查询plaintextFROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMITFROM确定要查询的表。WHERE过滤基础数据。SELECT计算列或表达式生成结果集。ORDER BY对结果集排序。LIMIT对排序后的结果集进行分页。总结本节课我们重点学习了SELECT 高级查询核心知识点包括表达式与别名对列进行运算并用别名美化结果。条件过滤使用WHERE结合比较 / 逻辑运算符精准筛选数据。模糊查询LIKE配合通配符进行部分匹配。排序与分页ORDER BY排序LIMIT实现分页展示。执行顺序理解 SQL 执行流程避免别名使用错误。