Mysql 01:基础查询(SELECT)全解——从单表到多字段的完整语法

发布时间:2026/6/11 5:32:49

Mysql 01:基础查询(SELECT)全解——从单表到多字段的完整语法 MySQL 中SELECT语句是数据查询的核心用于从数据表或视图中获取所需数据。它的语法结构丰富涵盖查哪些字段、从哪查、按什么条件查、分组、排序、限制条数等全流程操作。本文结合图片知识点从基本语法、核心子句、代码示例三个维度带你彻底掌握 MySQL 基础查询。一、核心语法格式1. 完整语法结构SELECT [DISTINCT] -- 可选去重 { * | 字段列表 } -- 必选查询字段* 代表所有字段 FROM 表1, 表2,... -- 必选查询来源表/视图 [WHERE 表达式] -- 可选筛选条件 [GROUP BY 字段] -- 可选分组 [HAVING 条件] -- 可选过滤分组结果 [ORDER BY 字段 [ASC|DESC]] -- 可选排序升序/降序 [LIMIT [偏移量,] 行数]; -- 可选限制查询条数2. 最常用简化格式日常开发中80% 的场景使用简化格式即可SELECT 字段1, 字段2,... FROM 表或视图 WHERE 查询条件;二、各子句核心知识点附说明1.SELECT指定查询字段*查询所有字段如SELECT * FROM student;字段列表查询指定字段多个字段用逗号分隔最后不加逗号如SELECT id,name,age FROM student;别名给字段起别名方便阅读如SELECT name AS 姓名 FROM student;2.FROM指定数据来源来源可以是单表、多表逗号分隔、视图多表查询时会默认产生笛卡尔积通常需配合WHERE条件过滤3.WHERE筛选查询条件必懂用于过滤行数据只返回满足条件的记录支持的运算符比较 !逻辑AND且、OR或、NOT非模糊LIKE% 匹配任意字符_匹配单个字符范围BETWEEN...AND...4.GROUP BY分组查询按指定字段分组相同字段值的分为一组常配合聚合函数使用COUNT()计数、SUM()求和、AVG()平均值、MAX()最大值、MIN()最小值注意分组后只能查询分组字段或聚合函数结果5.HAVING过滤分组结果用于过滤分组后的数据WHERE过滤分组前HAVING过滤分组后必须配合GROUP BY使用6.ORDER BY排序按指定字段排序默认升序ASC** 降序DESC** 需显式指定可排序多个字段先按字段 1 排序再按字段 2 排序7.LIMIT限制条数格式 1LIMIT 行数→ 查询前 N 条数据格式 2LIMIT 偏移量, 行数→ 跳过偏移量条查询行数条常用分页三、代码示例覆盖所有核心知识点准备数据创建学生成绩表score-- 创建表 CREATE TABLE score ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(20) NOT NULL, subject VARCHAR(20) NOT NULL, score INT NOT NULL, class VARCHAR(10) NOT NULL ); -- 插入测试数据 INSERT INTO score (name, subject, score, class) VALUES (张三, 语文, 85, 一班), (张三, 数学, 92, 一班), (李四, 语文, 78, 二班), (李四, 数学, 88, 二班), (王五, 语文, 95, 一班), (赵六, 英语, 60, 三班), (孙七, 数学, 55, 三班);示例 1基础查询查指定字段、所有字段-- 1. 查询所有字段* 的用法 SELECT * FROM score; -- 2. 查询指定字段name score SELECT name, score FROM score; -- 3. 给字段起别名 SELECT name AS 姓名, score AS 分数 FROM score;示例 2带 WHERE 条件的查询核心-- 1. 查询一班的学生成绩比较运算符 SELECT name, score FROM score WHERE class 一班; -- 2. 查询分数大于80的学生且排序 SELECT name, score FROM score WHERE score 80 ORDER BY score DESC; -- 3. 模糊查询查姓“张”的学生LIKE 通配符 SELECT name FROM score WHERE name LIKE 张%; -- 4. 范围查询查询分数在60-90之间的学生 SELECT name, score FROM score WHERE score BETWEEN 60 AND 90; -- 5. 多条件查询一班且分数大于80 SELECT name, score FROM score WHERE class 一班 AND score 80;示例 3GROUP BY 分组 聚合函数-- 1. 按班级分组统计每个班的学生人数COUNT SELECT class, COUNT(*) AS 学生人数 FROM score GROUP BY class; -- 2. 按班级分组计算每个班的平均分AVG SELECT class, AVG(score) AS 平均分 FROM score GROUP BY class; -- 3. 按姓名分组统计每个学生的总分SUM SELECT name, SUM(score) AS 总分 FROM score GROUP BY name;示例 4HAVING 过滤分组结果-- 需求查询学生总分大于150的学生先分组再过滤 SELECT name, SUM(score) AS 总分 FROM score GROUP BY name HAVING SUM(score) 150;示例 5ORDER BY 排序 LIMIT 限制条数-- 1. 查询所有成绩按分数降序排序 SELECT * FROM score ORDER BY score DESC; -- 2. 查询分数最高的前3条数据LIMIT SELECT * FROM score ORDER BY score DESC LIMIT 3; -- 3. 分页查询跳过前2条查询接下来3条LIMIT 偏移量,行数 SELECT * FROM score LIMIT 2, 3;示例 6多表查询笛卡尔积 过滤-- 模拟创建另一张表 student_info学生基本信息 CREATE TABLE student_info ( name VARCHAR(20) PRIMARY KEY, age INT, gender VARCHAR(5) ); INSERT INTO student_info VALUES (张三, 18, 男), (李四, 19, 女); -- 多表查询从score和student_info中查数据关联条件是name SELECT s.name, s.score, si.age FROM score s, student_info si WHERE s.name si.name;四、运行结果说明示例 1 结果SELECT * FROM score;返回表中所有 8 条数据的所有字段SELECT name, score FROM score;只返回姓名和分数两列示例 2 结果一班学生张三、王五的成绩分数大于 80按降序显示95、92、88、85示例 3 结果一班3 人平均分 86.67二班2 人平均分 83三班2 人平均分 57.5示例 4 结果仅返回总分大于 150 的学生无示例数据中无示例 5 结果降序排序40、35、30...前 3 条分数最高的 3 个学生分页跳过 2 条查第 3-5 条示例 6 结果关联后显示张三8518、张三9218、李四7819、李四8819五、核心总结口诀版SELECT 查字段FROM 找表源WHERE 筛行GROUP 分群HAVING 滤组ORDER 排序LIMIT 限条DISTINCT 去重聚合函数 COUNT/SUM/AVG分组必用它。关键注意事项WHERE不能用聚合函数过滤如WHERE COUNT(*) 5报错必须用HAVING分组查询中只能查分组字段 聚合函数LIMIT是 MySQL 特有语法分页核心多表查询必须加关联条件否则笛卡尔积数据爆炸

相关新闻