MySQL 基础:SELECT 语句的核心语法与规范
MySQL 基础:SELECT 语句的核心语法与规范
SELECT 语句是 MySQL 中最基础也最常用的查询命令,掌握其语法规则和使用规范,是高效处理数据的第一步。本文将聚焦 SELECT 语句的基本结构、关键规范及实用功能,帮助初学者建立扎实的 SQL 基础。
一、SELECT 语句的基本语法结构
1. 核心语法框架
SELECT 语句的最基础结构用于从表中提取指定字段的数据,语法如下:
1 | -- 选择指定字段 |
2. 关键说明
SELECT 后接需要查询的字段名,多个字段用英文逗号分隔;
FROM 后必须指定数据来源的表名,否则会触发语法错误;
语句必须以英文分号 ; 结束,这是 MySQL 语句的通用规则。
二、SELECT * 的使用禁忌与替代方案
SELECT * 能快速返回表中所有字段,但在实际开发中存在明显弊端,需谨慎使用:
1. 不推荐使用的原因
效率低下:会返回无关字段,增加数据库 IO 压力和网络传输成本,尤其对包含大量字段的大表影响显著;
稳定性差:当表结构变更(如新增 / 删除字段)时,查询结果会意外包含或丢失数据,可能导致依赖查询结果的应用程序出错;
可读性低:无法直观判断查询的具体字段,不利于代码维护。
2. 推荐做法
明确指定所需字段,例如:
1 | -- 推荐:只查询必要字段 |
三、SQL 大小写规范与书写建议
MySQL 对大小写的敏感性随操作系统不同而变化,遵循统一规范可避免低级错误:
1. 大小写规则
Windows 环境:大小写不敏感(SELECT 与 select 等效);
Linux 环境:大小写敏感(数据库名、表名、表别名严格区分大小写)。
2. 通用书写规范
关键字(如 SELECT、FROM、WHERE)全部大写;
表名、字段名、别名等全部小写;
多字段或复杂语句分行书写并缩进,提升可读性:
1 | -- 规范示例 |
四、列别名:提升结果可读性的实用技巧
列别名用于给查询结果中的字段临时命名,让输出更直观,不影响原表结构。
1. 语法格式
1 | -- 格式1:使用 AS 关键字(推荐,可读性强) |
2. 注意事项
- 若别名包含空格、特殊字符(如括号、中文),需用双引号 “ 或反引号 ` 包裹:
1 | SELECT |
- 别名仅在当前查询结果中生效,不会修改表中实际字段名。
五、去重查询:DISTINCT 关键字的正确用法
DISTINCT 用于提取唯一值,消除结果中的重复记录,适用于统计不重复数据的场景。
1. 基本语法
1 | SELECT DISTINCT 字段名 FROM 表名; |
2. 关键特性
DISTINCT 作用于其后的所有字段,而非单个字段。例如 SELECT DISTINCT a, b 会对 a 和 b 的组合去重;
若字段包含 NULL,DISTINCT 会将所有 NULL 视为相同值,仅保留一条。
3. 示例
1 | -- 对单个字段去重:查询所有不重复的部门 ID |
六、空值(NULL)的特殊处理规则
NULL 表示 “未知值”,与空字符串 “” 完全不同(空字符串长度为 0,NULL 长度未知且占用存储空间),处理方式需特别注意:
1. 核心规则
不能用 = 或 != 判断 NULL,必须使用 IS NULL(判断为空)或 IS NOT NULL(判断非空);
NULL 与任何值运算的结果都为 NULL(如 NULL + 1、NULL || ‘abc’ 均返回 NULL)。
2. 示例
1 | -- 查询未填写邮箱的用户 |
七、着重号:解决关键字冲突的必备技巧
若表名、字段名与 SQL 关键字(如 order、select)重名,需用反引号 ` 包裹,避免语法错误。
1 | -- 表名是关键字 order,用着重号包裹 |
八、常数查询:为结果添加固定标识
SELECT 语句支持直接查询常数,在结果中增加固定值列,常用于标记数据来源或整合多数据源。
1. 应用场景
区分不同表的查询结果(如多表数据合并时);
为结果添加业务标识(如数据归属、统计版本)。
2. 示例
1 | -- 为员工表查询结果添加公司标识 |
查询结果:
department | emp_name | hire_date |
---|---|---|
技术部 | 张三 | 2023-01-15 |
技术部 | 李四 | 2023-03-20 |
九、显示表结构:DESCRIBE / DESC 命令
使用 DESCRIBE 或 DESC 可查看表的字段详情,是分析表结构的常用工具。
1. 语法
1 | -- 完整写法 |
2. 输出字段含义
执行 DESC user; 后,输出结果包含以下信息:
Field:字段名称;
Type:字段数据类型(如 INT、VARCHAR(50));
Null:是否允许存储 NULL 值(YES 表示允许);
Key:索引类型(PRI 为主键,UNI 为唯一索引);
Default:字段默认值;
Extra:附加信息(如 AUTO_INCREMENT 表示自增)。
十、条件过滤:WHERE 子句的基础用法
WHERE 子句用于筛选符合条件的记录,必须紧跟 FROM 子句,是数据过滤的核心工具。
1. 语法结构
1 | SELECT 字段名 FROM 表名 WHERE 条件表达式; |
2. 示例
1 | -- 查询价格大于 100 且库存大于 0 的商品 |
总结:核心要点速览
避免SELECT *,明确指定需要的字段,提升效率和稳定性;
善用列别名让结果更易读,特殊别名用双引号包裹;
DISTINCT对其后所有字段去重,注意NULL的处理;
NULL需用IS NULL判断,与空字符串不同;
关键字冲突用着重号(`)解决;
常数查询可标记数据来源,DESC用于查看表结构;
WHERE子句紧随FROM,用于筛选符合条件的记录。
掌握这些技巧,能让你的 SQL 查询更高效、更易维护,为复杂查询打下坚实基础。