MySQL基本查询语法详解:从SELECT到高级过滤
本文详解MySQL数据库中基本查询操作的完整语法与应用场景。基于实际的student表数据结构,系统地拆解了从基础的字段选取到复杂的条件过滤、排序分组等核心功能。内容涵盖SELECT语句的多维度使用,包括WHERE子句中的范围比较、集合匹配、模糊搜索及空值处理,并结合DISTINCT、ORDER BY、GROUP BY及LIMIT关键字,提供清晰的代码示例,助力用户熟练掌握日常数据检索需求。
基础查询与字段选择
在MySQL中进行数据检索时,首先需明确希望获取哪些列的数据。根据实际需求,可以选择特定的多个字段或返回表中所有字段。
第1步:执行特定字段查询
目的:仅提取关心的列,减少网络传输与内存开销。
入口:命令行MySQL客户端或IDE终端。
动作:使用SELECT column1, column2...语法指定目标列。
参数:需要提取的字段名,用逗号分隔。
完成状态:返回结果集仅包含指定列的行数据。
mysql> select id,name,birth from student;
第2步:执行所有字段查询
目的:快速获取表的完整快照,常用于测试或调试。
入口:命令行MySQL客户端。
动作:使用通配符*代表所有列。
注意:在生产环境中需谨慎使用,避免获取不必要的大量冗余数据。
完成状态:返回结果集包含表中的所有列。
mysql> select * from student;
条件过滤查询 (WHERE)
绝大多数查询都需要通过WHERE子句来筛选符合条件的记录。student表作为参考对象,可用于演示各类过滤逻辑。
第3步:精确匹配与范围比较
目的:查找特定ID、数值区间或固定属性值的记录。
入口:命令行MySQL客户端。
动作:利用=, >, <, >=, <=等操作符进行条件筛选。
重要参数:数值型字段直接比较,字符串字段建议使用引号包裹。
-- 精确匹配ID
mysql> select * from student where id=901;
-- ID大于等于904的记录
mysql> select * from student where id>=904;
-- 按部门名称精确查找
mysql> select name from student where department='计算机系';
第4步:集合与非集合范围查询 (IN / NOT IN)
目的:当需要匹配多个离散值时,比使用多个OR更简洁。
入口:命令行MySQL客户端。
动作:IN()指定在一个列表中的值,NOT IN()排除在列表中的值。
完成状态:结果集包含符合集合定义的所有记录。
-- 筛选出生年份为1988或1990的学生
mysql> select * from student where birth in(1988,1990);
-- 筛选ID不在特定列表中的学生
mysql> select * from student where id not in(903,906);
第5步:区间范围查询 (BETWEEN AND)
目的:查找位于两个边界值之间的记录(闭区间,包含边界)。
入口:命令行MySQL客户端。
动作:使用BETWEEN min AND max语法。
注意:NOT BETWEEN ... AND ...用于排除该区间内的数据。
-- 查询年龄在1986年到1988年之间(含)的学生
mysql> select * from student where birth between 1986 and 1988;
-- 查询ID不在904到906区间的学生
mysql> select * from student where id not between 904 and 906;
第6步:模糊字符串匹配 (LIKE)
目的:当确切字符未知或部分已知时,使用通配符进行模式匹配。
入口:命令行MySQL客户端。
动作:%代表零个或多个任意字符,_代表单个任意字符。
完成状态:返回所有符合模式规则的行。
-- 查询名字第二个字是'三'的学生
mysql> select * from student where name like '_三';
-- 完全匹配
mysql> select * from student where name like '张三';
-- 查询姓张的所有学生(后面跟任意字符)
mysql> select * from student where name like '张%';
-- 排除姓张的学生
mysql> select * from student where name not like '张%';
第7步:空值判断 (IS NULL)
目的:查找字段值为NULL(缺失/未定义)的记录。
注意:不能直接使用= NULL,必须使用IS NULL或IS NOT NULL。
动作:筛选出地址信息缺失的记录。
mysql> select * from student where address is null;
组合条件与逻辑运算
复杂业务通常涉及多个条件的组合,通过AND和OR连接表达式。
第8步:AND多条件交集查询
目的:所有条件必须同时满足才返回结果。
动作:使用AND连接多个过滤条件。
示例:查找姓张且出生于1985年后,且ID尾号为3的学生。
mysql> select * from student where name like '张%' and birth>1985;
-- 复合条件示例
mysql> select * from student where name like '张%' and birth>1985 and id like '%3';
第9步:OR多条件并集查询
目的:只要满足其中任一条件即返回结果。
动作:使用OR连接多个过滤条件。
示例:查找ID为905,或出生于1988年,或性别为女的学生。
mysql> select * from student where id=905 or birth=1988;
-- 多条件OR示例
mysql> select * from student where id=905 or birth=1988 or sex='女';
数据整理与高级筛选
在获取原始数据后,往往需要进行去重、排序、聚合统计及数量限制。
第10步:结果去重 (DISTINCT)
目的:去除结果集中重复的行,仅保留唯一值。
入口:命令行MySQL客户端。
动作:在SELECT后紧跟DISTINCT。
示例:查看学生表中存在的性别和院系类别。
mysql> select distinct sex from student;
mysql> select distinct department from student;
第11步:结果排序 (ORDER BY)
目的:按照指定列的值对结果集进行升序或降序排列。
入口:命令行MySQL客户端。
动作:默认升序(ASC),可显式指定DESC降序。
示例:按出生年份排序。
-- 默认升序
mysql> select * from student order by birth;
-- 显式升序
mysql> select * from student order by birth asc;
-- 降序排列
mysql> select * from student order by birth desc;
第12步:分组统计 (GROUP BY)
目的:将数据按指定列分组,并对每组进行聚合函数计算(如计数、求和)。
入口:命令行MySQL客户端。
动作:GROUP BY配合聚合函数使用。此处展示GROUP_CONCAT合并组内姓名及COUNT计数。
示例:统计各性别的男生/女生人数及对应的姓名列表。
-- 按性别分组,拼接同组内的所有名字
mysql> select sex,group_concat(name) from student group by sex;
-- 按性别分组,统计各组的人数
mysql> select sex,count(name) from student group by sex;
第13步:正则表达式查询 (REGEXP)
目的:利用强大的正则表达式引擎进行复杂的模式匹配,替代部分LIKE功能或实现LIKE无法做到的逻辑。
入口:命令行MySQL客户端。
动作:在WHERE子句中使用REGEXP关键字。
示例:匹配出生年份为1988或1990的记录。
mysql> select * from student where birth regexp '1988|1990';
第14步:限制查询数量 (LIMIT)
目的:控制返回结果集的行数,常用于分页显示或快速预览前N条数据。
入口:命令行MySQL客户端。
动作:LIMIT N取前N行;LIMIT offset, count从偏移量offset开始取count行(offset从0开始)。
示例:取前2条记录,或从第2条(偏移1)开始取3条记录。
-- 取前两条记录
mysql> select * from student limit 2;
-- 跳过第一条,取接下来的三条
mysql> select * from student limit 1,3;
以上就是MySQL基本查询语法与应用详解的详细内容,更多关于MySQL基础教程的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









